函數定義
def 函數名(參數列表):
函數體(代碼塊)
函數名就是標識符。
語句塊必須縮進,約定4個空格。
python的函數沒有return語句,隱式會返回一個None值。
定義中的參數列表稱為形式參數,只是一種符號表達,簡稱形參。
調用
函數定義,只是聲明了一個函數,它不會被執行,需要調用。
調用的方式,就是函數名加上小括號,括號內寫上參數。
調用時寫的參數是實際參數。簡稱實參。
函數參數
可變參數
位置參數 def f(x,y,z) 調用使用f(1,3,5);按照參數定義順序傳入實參。
關鍵字參數 def f(x,y,z) 調用使用f(y=1,x=3,z=5);
傳參f((1,),z=3,y=5);f(x=None,z=3,y=5);
位置參數必須在關鍵字參數之前傳入
def add(x,y): r=x+y return r print(add(3,4))
函數參數默認值
定義時,在形參后跟上一個值
def add(x=5,y=4): r=x+y return r print(add())
def add(x=5,y=4): r=x+y return r print(add(6,6))
def add(x=5,y=4): r=x+y return r print(add(6))
def add(x,y=4): r=x+y return r print(add(7)) print(add(x=2))
可變參數
一個形參可以匹配任意個參數 *;可變位置參數;
def add(*a):
sum=0
print(type(a)) #tuple
for x in a:
sum+=x
print(sum)
add(1)
add()
add(1,2,3)
關鍵字參數的可變參數 **;可變關鍵字參數
def ss(**a):
print(type(a))#dict
for x,y in a.items():
print('{}={}'.format(x,y))
ss(z=3,m=4)
#非可變參數;
def add(a):#傳入一個參數,該參數是可迭代對象 sum=0 for x in a: sum+=x return sum print(add([1,3,5])) print(add((1,2,4)))
def add(a): sum=0 print(type(a)) for x in a: sum+=x print(sum) add([1,2,3])#調用#list add((1,2,3))#調用#tuple
混合使用參數;
def xixi(a,*b,**c): print(a) print(b) for x,y in c.items(): print("{},{}".format(x,y)) xixi("ab") xixi("ab","mn","xx",i=3,u=3) #xixi("ab","mn","xx",i=3,u=3,i=4) #SyntaxError: keyword argument repeated
xixi(a=3,b=3)
#xixi(3,b=3,a=5)#xixi() got multiple values for argument 'a'
def ff(*a,x,y,**m): print(a) print(x,y) for xx,yy in m.items(): print(xx,yy) ff(77,88,x=3,y=5,) ff(x=3,y=5,) ff(x=3,y=5,m=4)
keyword-only參數
如果在一個*參數后,或者一個位置可變參數后,出現的普通參數,實際上已經不是位置參數了,而是keyword-only參數;
def ff(*a,x):
def ff(**a,x):#無效語法;keyword-only屬於keyword;
def fn(*,x,y):#x,y是keyword-only參數 print(x,y) fn(x=3,y=4) #fn(3,x=3,y=4)#報錯
def fn(a,*,x,y):#x,y是keyword-only參數 print(x,y) fn(3,x=1,y=4)
def fn(*a,x=3): print(a) print(x) fn(4) fn() fn(1,2,3,x=7)
參數規則:一般順序是普通參數、缺省參數、可變位置參數、keyword-only參數(可帶缺省值)、可變關鍵字參數;
def fn(y,*a,x=3): print(y,a,x) #fn()#報錯 fn(5) #fn(x=6)#報錯 #fn(1,x=4,4,5)#SyntaxError: positional argument follows keyword argument fn(1,3,2,x=7) #fn(1,3,y=2,x=7)#got multiple values for argument 'y' #fn(1,3,z=2,x=7)#got an unexpected keyword argument 'z'