1.在定義有默認參數(shù)的函數(shù)時,需要注意以下: 必傳參數(shù)必須在前面,默認參數(shù)在后;
我們提供的服務(wù)有:成都網(wǎng)站制作、網(wǎng)站設(shè)計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、莊浪ssl等。為1000多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學管理、有技術(shù)的莊浪網(wǎng)站制作公司
備注:python為了簡化函數(shù)的調(diào)用,提供了默認參數(shù)機制,這樣在調(diào)用函數(shù)時,就可以省略最后一個參數(shù)不寫;設(shè)置何種參數(shù)為默認參數(shù)?一般來說,將參數(shù)值變化小的設(shè)置為默認參數(shù)。
2. 若參數(shù)為列表,且有默認值
2.1若調(diào)用方法時傳該參數(shù),則沒有問題
2.2 若調(diào)用方法時不傳該參數(shù),則有問題 ,問題是:每次調(diào)用該方法時,該參數(shù)不是創(chuàng)建方法時的默認值,而是多次調(diào)用被修改后的列表。
創(chuàng)建一個函數(shù)用來計算三個數(shù)的和,如下:
下來,我們對其進行調(diào)用:
假設(shè)我們要計算這個函數(shù)返回結(jié)果的平均值。那么此時,我們只需將和值除以參數(shù)個數(shù)即可,那么參數(shù)個數(shù)怎么獲取呢?你可能會說:數(shù)一下就知道了。那么假設(shè)此時有很多的參數(shù),你還去數(shù)嗎?此時,明顯這個方法是不恰當?shù)模敲从袥]有更加方便、高效的方法呢?我們接著往下看。
通過上面這個例子,我們不但可以獲取參數(shù)個數(shù),還可以獲取所有變量名以及默認返回值。此時,我們只需根據(jù)自己的需求,去應(yīng)用就可以了,那么以上的問題,就自然解決了。
4.7.1. 默認參數(shù)值
最常用的一種形式是為一個或多個參數(shù)指定默認值。這會創(chuàng)建一個可以使用比定義是允許的參數(shù)更少的參數(shù)調(diào)用的函數(shù),例如:
def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
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 OSError('uncooperative user')
print(complaint)
這個函數(shù)可以通過幾種不同的方式調(diào)用:
只給出必要的參數(shù):
ask_ok('Do you really want to quit?')
給出一個可選的參數(shù):
ask_ok('OK to overwrite the file?', 2)
或者給出所有的參數(shù):
ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')
這個例子還介紹了 in 關(guān)鍵字。它測定序列中是否包含某個確定的值。
默認值在函數(shù) 定義 作用域被解析,如下所示:
i = 5
def f(arg=i):
print(arg)
i = 6
f()
將會輸出 5。
重要警告: 默認值只被賦值一次。這使得當默認值是可變對象時會有所不同,比如列表、字典或者大多數(shù)類的實例。例如,下面的函數(shù)在后續(xù)調(diào)用過程中會累積(前面)傳給它的參數(shù):
def f(a, L=[]):
L.append(a)
return L
print(f(1))
print(f(2))
print(f(3))
這將輸出:
[1]
[1, 2]
[1, 2, 3]
如果你不想讓默認值在后續(xù)調(diào)用中累積,你可以像下面一樣定義函數(shù):
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L