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