位置引數須以正確的順序傳入函式。呼叫時的數量必須和宣告時的一樣。
defpower(x, n):
s = 1
while n >0:
n = n - 1s = s *x
return
sprint(pow(5,3)) #
125
修改後的power(x, n)函式有兩個引數:x和n,這兩個引數都是位置引數,呼叫函式時,傳入的兩個值按照位置順序依次賦給引數x和n。
def power(x, n=2):s = 1
while n >0:
n = n - 1s = s *x
return
sprint(power(5)) #
25print(pow(3,3)) #
27
預設引數可以簡化函式的呼叫。設定預設引數時必選引數在前,預設引數在後。
有多個預設引數時,呼叫的時候,既可以按順序提供預設引數:
def enroll(name, gender, age=6, city='beijing'):
print('
name:
', name)
print('
gender:
', gender)
print('
age:
', age)
print('
city:
', city)
enroll(
'bob
', '
m', 7)
輸出:
name: bobgender: m
age: 7city: beijing
也可以不按順序提供部分預設引數。當不按順序提供部分預設引數時,需要把引數名寫上:
enroll('adam
', '
m', city='
tianjin
')
輸出:
name: adamgender: m
age: 6city: tianjin
意思是,city引數用傳進去的值,其他預設引數繼續使用預設值。
定義函式:
def add_end(l=):'end')
return l
正常呼叫時:
l1 = add_end([1, 2, 3])print(l1) #
[1, 2, 3, 'end']
l2 = add_end(['
x', '
y', 'z'
])print(l2) #
['x', 'y', 'z', 'end']
但如果使用預設呼叫:
l1 =add_end()print(l1) #
['end']
l2 =add_end()
print(l2) #
['end', 'end']
l3 =add_end()
print(l3) #
['end', 'end', 'end']
預設引數是,但是函式似乎每次都「記住了」上次新增了'end'後的list。
原因解釋如下:
python函式在定義的時候,預設引數l的值就被計算出來了,即,因為預設引數l也是乙個變數,它指向物件,每次呼叫該函式,如果改變了l的內容,則下次呼叫時,預設引數的內容就變了,不再是函式定義時的了。
要修改上面的例子,我們可以用none這個不變物件來實現:
def add_end(l=none):if l is
none:
l ='end')
return
ll1 =add_end()
print(l1) #
['end']
l2 =add_end()
print(l2) #
['end']
l3 =add_end()
print(l3) #
['end']
因為不變物件一旦建立,物件內部的資料就不能修改,這樣就減少了由於修改資料導致的錯誤。此外,由於物件不變,多工環境下同時讀取物件不需要加鎖,同時讀一點問題都沒有。我們在編寫程式時,如果可以設計乙個不變物件,那就盡量設計成不變物件。
python3 函式引數
python函式引數包括五種型別 位置引數 預設引數 可變引數 關鍵字引數以及命名關鍵字引數。位置引數例如 def ex y y就是位置引數 例子 def ex y print y ex 2 預設引數 可以簡化函式的呼叫,設定預設引數時,要注意 一 必選引數在前,預設引數在後 二當函式有多個引數時,...
python3函式的引數
函式的定義能簡化 的邏輯,對於函式的呼叫者來說,只需要知道如何正確的傳遞引數,以及知道函式將返回什麼值就可以了,而函式內部的複雜邏輯被封裝起來,呼叫者不必了解。呼叫函式時,傳入實參的值按照位置順序以此賦給形參。def power x,n s 1 while n n n 1s s x return s...
python3 函式的引數
函式的引數 預設引數 可變引數 關鍵字引數 命名關鍵字引數 版本 v1.0 日期 2019.03.26 python版本 3.7 引數預設值 def f1 a,b 5,c 10 return a b 2 c 3 print f1 1,2,3 print f1 100,200 print f1 100...