簡體   English   中英

初始化函數參數的Python方法

[英]Pythonic way to initialise function parameters

哪個更pythonic?

一種

def my_function(arg, p=0):
    while arg:
        # do something
         value = arg.pop()
        # save value with a name which uses p for indexing
    p+=1

或B

def my_function(arg):
    p = 0
    while arg:
        # do something
        value = arg.pop()
        # save value with a name which uses p for indexing
    p+=1

我的一部分認為,如果有人將p設置為一個奇怪的值,將p作為函數的參數包括在內是很愚蠢的。 但是同時我不喜歡讓p = 0使已經很復雜的函數變得混亂。

不要用本地變量弄亂功能參數。 如果不是調用者應該使用的參數,請不要將其添加到函數簽名中。

換句話說,您不希望任何人使用help(my_function)並對p用途感到驚訝。


當然,這不是一個硬性規定。 使用局部變量可以使某些關鍵路徑功能更快,因此有時您會看到類似以下內容的信息:

some_global = expensive_function()

def foo(bar, baz, _some_local=some_global):
    # code using _some_local instead of some_global

以使用更快的本地名稱查找。 然后,參數開頭的_告訴您,該名稱實際上是您不應依賴的內部實現細節。

它取決於p始終必須從0開始。 如果是這樣,那么肯定要使用選項B。如果沒有必要,不要給用戶一個混亂您代碼的機會。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM