繁体   English   中英

Python args和kwargs参数混乱

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM