形參:定義階段纔有的形參,形式參數,沒有什麼用,可是具備意義,只是佔個位置,方便調用。app
實參:調用階段纔有的實參,實際的參數,具備具體的值函數
在函數定義的階段括號內定義的參數,稱之爲形式參數,簡稱形參,本質就是變量名。ui
def func(x,y):#定義階段纔有的形參 print(x) print(y) print(func(1,2)) #調用階段纔有的實參 #輸出: 1 2 None
在函數調用階段括號內傳入的參數,稱之爲實際參數,簡稱實參,本質就是變量的值。code
位置形參:一個一個的寫形參,就叫位置形參it
位置實參:一個一個的寫形參,就叫位置實參io
位置形參和位置實參要從左到右一一對應。class
在函數定義階段,按照從左到右的順序依次定義的形參,稱之爲位置參數。變量
def func(x,y): print(x) print(y) print(func(1,2))
==注意:==按照位置定義的參數都必須被傳值,多一個不行少一個也不行。總結
在函數調用階段,按照從左到右的順序依次定義的實參,稱之爲位置實參。
fun(1,2)
特色:按照位置爲對應的形參依次傳值。
在調用函數時,按照key=value的形式爲指定的參數傳值,稱爲關鍵之實參。
==調用的時候,能夠打破位置實參必須和位置形參一一對應的傳值的規定==
def func(x,y): print(x) print(y) print(func(x=1,y=2)) #輸出: 1 2 None
特色:能夠打破位置的限制,但仍能爲指定的形參賦值。
注意:
def func(x,y): print(x) print(y) print(func(1,2)) print(func(x, y=2))# 會報錯NameError: name 'x' is not defined print(func(y=2,x))#會報錯SyntaxError: positional argument follows keyword argument print(func(x,x=1))#報錯NameError: name 'x' is not defined #輸出: 1 2 None
在定義階段,就已經被賦值
==默認形參必須放在位置形參的後面==
def func(x,y=10): print(x) print(y) func(2) #輸出: 2 10 # fun(1,2) #輸出: 1 2
特色:在定義階段就已經被賦值,意味着在調用的時候能夠不用爲其賦值。
注意:
m = 10 def foo(x=m): print(x) m=111 print(foo()) #輸出: 10 None
默認參數的值一般應該是不可變類型
def register(name,hobby,hobby_list=[]): hobby_list.append(hobby) print(name,hobby) print(name,hobby_list) register('chen','read') register('python','zuopao') register('shui','pioa') #輸出: chen read chen ['read'] python zuopao python ['read', 'zuopao'] shui pioa shui ['read', 'zuopao', 'pioa']
def register(name,hobby,hobby_list=None): if hobby_list is None: hobby_list = [] hobby_list.append(hobby) print(name,hobby) print(name,hobby_list) register('chen','read') register('python','zuopao') register('shui','pioa') #輸出: chen read chen ['read'] python zuopao python ['zuopao'] shui pioa shui ['pioa']
實參的應用:取決於我的的習慣
形參的做用: