2016-02-12 97 views
0

比方說,我有一個函數需要兩個參數:xy。如果沒有給出y,那麼我將根據x創建一個默認值。當然,我不能用def myfunc(x, y=x+1)來定義函數,因爲默認值將在函數的定義上進行評估,而不是在調用時進行評估。因此,我會用def myfunc(x, y=None)來定義函數,並在我的函數體中檢查y是否爲None,如果是,則重新定義yx + 1。如果y可能是什麼?如果連None都是可能的值呢?有沒有一種方法可以區分myfunc(4)myfunc(4, None),即使y的默認值是None使用默認參數調用的Python函數不同於無參數

+0

您的功能沒法處理「任何東西」,所以設定默認的東西永遠不會被傳遞或者你知道你不會處理。 – Fredrik

+0

@FredrikRosenqvist如果它是一種新的序列呢? – zondo

+0

順序是什麼意思?舉個例子 – Fredrik

回答

2

如果你真的需要知道它沒有設置,這是這樣的:

NOT_SET = object() 
def f(x, y=NOT_SET): 
    if y is NOT_SET: 
     # y is not set 

這工作,因爲這樣:

>>> a = object() 
>>> b = object() 
>>> a is b 
False 
+1

如果使用'if y NOT_SET:'可能會更好,這會檢查對象身份而不是相等。 –

+0

@GeorgSchölly你是對的,我編輯了我的答案。 – Fredrik