最常見的一種形式是的是為一個或者多個參數指定默認值,這會創建一個可以使用比定義時允許的參數更少的參數調用的函數,
def ask_ok(prompt, retries=4, reminder='Please try again!'): while True: ok = input(prompt) if ok in ('y', 'ye', 'yes'): return True if ok in ('n', 'no', 'nop', 'nope'): return False retries = retries - 1 if retries < 0: raise ValueError('invalid user response') print(reminder)
可以用以下三種調用方式:
- ask_ok('Do you really want to quit?')
- ask_ok('OK to overwrite the file?', 2)
- ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')
默認值在函數定義作用域有效,因此:
i = 5 def f(arg=i): print(arg) i = 6 f()
打印為5
重要提醒:默認參數在定義時賦值,且僅僅賦值一次,當函數多次被調用,且并沒有提供默認的參數值,就會從定義時賦值的地方取得值。即使函數中給默認參數重新賦值了,下次調用還是會從定義賦值的地方取得值!當默認參數為可變類型的list/dict等類型時,需要注意。
def f(a, L=[]): L.append(a) return L print(f(1)) print(f(2,[])) print(f(3))
輸出為:
[1] [2] [1,3]
如果不想讓默認值咋后續調用中累積,可以用如下寫法:
def f(a, L=None): if L is None: L = [] L.append(a) return L
首先要理解可變對象與不可變對象可以參考http://blog.csdn.net/u014265088/article/details/52756442這篇文章
假如默認參數是可變對象,函數內對參數的改變會影響原始對象,下次調用函數默認參數已經被更改
假如默認參數是不可變對象,函數內對參數賦值時,參數會引用內存其他地方,下次調用函數時還是會從定義時賦值的地方取值。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
