簡體   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