2015-12-02 52 views
2

鍛鍊39學習Python堅硬方式http://learnpythonthehardway.org/book/ex39.html),下面的函數定義(get_slot()get()):學習Python堅硬方式EX39

def get_slot(aMap, key, default=None): 
    """ 
    Returns the index, key, and value of a slot found in a bucket. 
    Returns -1, key, and default (None if not set) when not found. 
    """ 
    bucket = get_bucket(aMap, key) 

    for i, kv in enumerate(bucket): 
     k, v = kv 
     if key == k: 
      return i, k, v 
    return -1, key, default 

def get(aMap, key, default=None): 
    """Gets the value in a bucket for the given key, or the default.""" 
    i, k, v = get_slot(aMap, key, default=default) 
    return v 

爲什麼叫get_slot()時寫default=default

在我看來,只需撥打get_slot()'默認'就足夠了? - >get_slot(aMap, key, default)

default=default是否與命名vs位置函數參數有關? (正如這裏討論的:http://pythoncentral.io/fun-with-python-function-parameters/) 或者是default=default完全是出於完全不同的原因?

+4

在這種情況下,它是相同的,但是即使位置匹配,通常也是使用關鍵字參數名稱的良好做法(更安全)。 – Julien

+0

好吧,因爲'default'是一個命名參數,所以在調用函數時最好使用關鍵字參數'default ='?我理解正確嗎? – Sean

回答

1

default是函數get_slot()的「關鍵參數」,其默認值爲None。 如果您在不指定「默認」的情況下致電get_slot(),則其值爲「無」。 在上面的示例中,您將鍵參數「default」設置爲「default」,它是傳遞給函數「get」的參數,所以它的值爲None

因此,在這種特殊情況下它不會改變你是否撥打:

get_slot(aMap, key)

get_slot(aMap, key, default = default)

但如果從None不同的值傳遞給get功能get_slot函數中的default變量將取值不同於None

我希望這可以清除一點。

+0

感謝您的回答,出於某種原因,編輯我的問題的人將代碼從'無'更改爲'1'(我已將其更改回來並添加了一個指向Learn Python Hard Way示例的鏈接,以便人們可以現場查看代碼)。這會改變你的答案嗎? – Sean

+0

謝謝澄清。它實際上改變了答案,因爲最終你的'默認'值將取值'None'。數值在函數中傳遞的方式不會改變,但最終的結果將會如此。我會更新答案! – toti08

+0

非常感謝 - 這非常有道理! – Sean

相關問題