python3 函式 必選引數與預設引數

2022-05-28 05:03:14 字數 2277 閱讀 3001

位置引數須以正確的順序傳入函式。呼叫時的數量必須和宣告時的一樣。

def

power(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: bob

gender: m

age: 7city: beijing

也可以不按順序提供部分預設引數。當不按順序提供部分預設引數時,需要把引數名寫上:

enroll('

adam

', '

m', city='

tianjin

')

輸出:

name: adam

gender: 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...