1.1 形參
在函數定義階段括號內定義的參數,稱之爲形式參數,簡稱形參,本質就是變量名。python
def func(x, y): print(x) print(y)
1.2 實參app
在函數調用階段括號內傳入的參數,稱之爲實際參數,簡稱實參,本質就是變量的值。函數
func(1,2)
2.1 位置參數
在函數定義階段,按照從左到右的順序依次定義的形參,稱之爲位置形參。ui
def func(x, y): print(x) print(y)
特色:按照位置定義的形參,都必須被傳值,多一個不行,少一個也不行。code
2.2 位置實參
在函數調用階段,按照從左到右的順序依次定義的實參,稱之爲位置實參。ip
func(1,2)
特色:按照位置爲對應的形參依次傳值。it
在調用函數時,按照key=value的形式爲指定的參數傳值,稱爲關鍵字實參。io
func(y=2, x=1)
特色:能夠打破位置的限制,但仍能爲指定的形參賦值。class
注意:
1.能夠混用位置實參和關鍵字實參,可是位置實參必須在關鍵字實參的左邊。
2.能夠混用位置實參和關鍵字實參,但不能對一個形參重複賦值。變量
func(x, y=2) func(y=2, x) # SyntaxError: positional argument follows keyword argument func(x, x=1) # NameError: name 'x' is not defined
在定義階段,就已經被賦值。
def func(x, y=10): print(x) print(y) func(2)
特色:在定義階段就已經被賦值,意味着在調用時能夠不用爲其賦值。
注意:
1.位置形參必須放在默認形參的左邊。
2.默認形參的值只在定義階段賦值一次,也就是說默認參數的值在函數定義階段就已經固定了。
m = 10 def foo(x=m): print(x) m = 111 foo() # 10
1.默認參數的值一般應該是不可變類型。
2.可變類型一般都會用到*方法打散轉化,函數體形參會用*方法得到對應數值。
# 演示形參是可變類型 def register(name, hobby, hobby_list=[]): hobby_list.append(hobby) print(f"{name} prefer {hobby}'") print(f"{name} prefer {hobby_list}") register('nash', 'read') register('tank', 'zuipao') register('jason', 'piao')
nash prefer read' nash prefer ['read'] tank prefer zuipao' tank prefer ['read', 'zuipao'] jason prefer piao' jason prefer ['read', 'zuipao', 'piao']
# 修改形參是可變類型代碼 def register(name, hobby, hobby_list=None): if hobby_list is None: hobby_list = [] hobby_list.append(hobby) print(f"{name} prefer {hobby}'") print(f"{name} prefer {hobby_list}") register('nash', 'read') register('tank', 'zuipao') register('jason', 'piao')
nash prefer read' nash prefer ['read'] tank prefer zuipao' tank prefer ['zuipao'] jason prefer piao' jason prefer ['piao']
實參的應用:取決於我的習慣
形參的應用:
1.大多數狀況的調用值同樣,就應該將該參數定義成位置形參 2.大多數狀況的調用值同樣,就應該將該參數定義成默認形參