[英]Python args and kwargs arguments confusion
我一直在阅读有关kwargs和args的内容,但是在这种情况下,我真的很努力地实现它们。
我有一个班级的对象
a = MDFile()
有一个方法
a.create_matrix()
这将返回一个n×m矩阵,其中n是MDFile中的粒子数。 如果用户未为该方法指定任何参数,则希望它返回完整的n×m矩阵。 但是,如果用户指定了粒子编号-说他们只想要第5个粒子的信息,我希望他们能够:
a.create_matrix(particle_id=5)
并且它将仅返回矩阵的相应行,该行将是一个1xm的数组。
如何使用kwargs和args实现此目的? 还是有更好的替代方法来做到这一点? 似乎args需要某种默认值,我不是真的想要。 我也不希望该方法与if语句一起散布,因为它会严重降低性能。
我认为@Martijn Pieters是对的。 您将必须使用if
语句,并且坦率地说if
语句不会产生太大影响。 例如,考虑以下测试:
>>> from timeit import timeit
>>> timeit('create_matrix(particle_id=None)', setup='def create_matrix(particle_id=None):\n if particle_id:\t return particle_id\n else: return None', number=10000000)
1.3292641180877212 # if statement with particle_id defaulting to None
>>> timeit('create_matrix(particle_id=5)', setup='def create_matrix(particle_id=None):\n if particle_id:\t return particle_id\n else: return None', number=10000000)
1.5606957465069584 # if statement with particle_id defaulting to 5
>>> timeit('create_matrix(particle_id=5)', setup='def create_matrix(particle_id=None): return None', number=10000000)
1.2185165279484238 # no if statement
在1000万次迭代中, if
语句添加的时间相对较少。 最后一个测试不包含if
语句。
因此,您可以尝试使用此方法(如@Martijn Pieters所建议的):
def create_matrix(self, particle_id=None):
if particle_id is not None:
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.