[Python] default argument


def show_name(name = "no name"):
    print(name)

show_name("John")
#John
show_name()
#no name

只要在參數後面加個等於可以設定參數的預設值
但要小心不要使用可變(mutable)的容器當作預設值, ex: list, dict, set
不然會出現下面的問題


def add_me(names = []):
    names.append('Me')
    return names

print(add_me())
#['Me']
print(add_me())
#['Me', 'Me']

python funtion的default是在建立function時就已經製造出來了
也就是說每一次呼叫add_me的時候 都是使用同一個default的names
第一次呼叫時names是空list
但第二次叫呼時會使用第一次的names 這時就會產生意想不到的效果

若是不想要產生這種問題 請把default value設定為None 然後在function內檢查


def add_me(names = None):
    if names is None:
        names = []
    names.append('Me')
    return names

print(add_me())
#['Me']
print(add_me())
#['Me']

在〈[Python] default argument〉中有 1 則留言

發佈留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料