Python3之函式的引數傳遞與引數定義
函式的引數傳遞
函式傳參方式分為兩大類,四小類
- 位置傳參
~序列傳參 - 關鍵字傳參
~字典關鍵字傳參
位置傳參
實參的對應關係與形參的對應關係是借位置來依次對應的
例項:
def mymin(a, b, c):
pass
mymin(1, 2, 3)
上邊的栗子很好的解釋了位置的對應關係,1,2,3分別對應a,b,c
說明:
~實參和形參通過位置進行傳參和匹配
~實參的個數必須與形參的個數相同
序列傳參
序列傳參是指在呼叫過程中,用 * 將序列拆解後按位置進行傳遞的傳參方式
說明:
序列傳參時,序列拆解的位置與形參一一對應
序列的位置資訊對應相應的引數位置
例項:
def myfun(a, b, c):
print('a:', a)
print('b:', b)
print('c:', c)
s1 = [1, 2, 3]
s2 = [4, 5, 6]
s3 = 'ABC'
myfun(*s1) # == myfun(s1[0],s1[1],s1[2])
myfun(*s2) # == myfun(s2[0],s2[1],s2[2])
myfun(*s3) # == myfun(s3[0],s3[1],s3[2])
由例項講解:
myfun有三個引數,所以我們也要傳遞三個引數,其中s1列表有3個元素,其實我已經寫出來了,呼叫函式傳遞引數時會在列表名前加一個 ‘ * ’ 號,表示按列表的元素位置傳參,即第一個引數傳s[0],第二個引數傳s[1],第三個引數傳s[2]。其實看例項就懂了,就不多囉嗦了
關鍵字傳參
關鍵字傳參,是隻指在傳參時,按照形參的名稱給實參賦值
實參和形參按名稱進行匹配
例項:
>>> def myfun(a, b, c):
print('a:', a)
print('b:', b)
print('c:', c)
>>> myfun(b = 23, c = 34, a = 12)
a: 12
b: 23
c: 34
雖然傳遞引數時不是按abc的順序傳遞的,但卻能各就其位,這就是關鍵字傳參的好處了吧。
說明:實參和形參按照形參名進行匹配,可以不按位置進行匹配。沒毛病
字典關鍵字傳參
字典關鍵字傳參是指實參為字典,將字典用 ** 拆解後進行關鍵字傳參的方式
說明:
- 字典的鍵名和形參名一致
- 字典的鍵名必須是字串(且為識別符號的命名方式)
- 字典的鍵名要在形參中存在
函式的綜合傳參
~函式的傳參方式,在能確定形參能唯一匹配到相應實參的情況下可以任意組合
~函式的位置傳參要先於關鍵字傳參
說明:
1. 位置傳參和序列傳參可以混合使用,也可以順序顛倒
如:
myfun(100, *[100, 200])
myfun(*[100, 200], 300)
myfun([100], 200, [300])
2. 函式的關鍵字傳參和字典關鍵字傳參可以混合使用也可以順序顛倒
如:
myfun(c=300, **{‘b’: 10, ‘a’: 20})
myfun( **{‘b’: 10, ‘c’: 20}, a = 30)
3. 位置傳參和關鍵字傳參可以混合使用,但位置傳參要先於關鍵字傳參
如:
myfun(100, c=200, b=10)
myfun(10, c=30, **{‘b’:200})
函式的預設引數
~預設引數必須自左至右依次存在,如果一個引數有預設引數,則其右側的所有引數必須有預設引數
~預設引數可以有0個或多個,甚至全部都有預設引數
例項:
def fn(a, b=10, c): # 錯誤
pass
def fn(a, b=12, c=23): # 正確
pass
函式形參的定義方式:
- 位置
- 星號元組
- 命名關鍵字
- 雙星字典
位置形參
語法:
def 函式名(形參名1,形參名2,...):
語句塊
星號元組形參
語法:
def 函式名(*元組形參名):
語句塊
作用:收集多於的位置形參
例項:
def func(a, b, *args):
print('a=',a)
print('b=',b)
print('args=',args)
func(1, 2, 3, 4, 5, 6, 7, 8, 9)
先按位置傳參:a=1, b=2, 剩下的都給 *args
列印結果:
a= 1
b= 2
args= (3, 4, 5, 6, 7, 8, 9)
命名關鍵字形參:
語法:
def 函式名(*, 命名關鍵字形參):
語句塊
或
def 函式名(*args, 命名關鍵字形參):
語句塊
作用:
強制所有的引數都必須用關鍵字傳參或字典關鍵字傳參
例項:
def fun(*, c, d):
print('c=', c)
print('d=', d)
def fun2(a, b, *, c, d): # *是位置傳參和關鍵字傳參的分隔符
print(a, b, c, d)
def fun3(a, b, *args, c, d):
print(a, b, args, c, d)
# fun(3, 4) # 出錯
fun(d=2, c=3)
fun2(1, 2, c=3, d=4)
fun3(11, 22, 33, 44, 55, c=66, d=77)
fun3(11, 22, **{'d': 4, 'c': 5})
列印結果:
c= 3
d= 2
1 2 3 4
11 22 (33, 44, 55) 66 77
11 22 () 5 4
雙星號字典形參
語法:
def 函式名(**字典形參名):
語句塊
作用:收集多餘的關鍵字傳參
例項:
def fun(**kwargs):
print('關鍵字傳參的個數:', len(kwargs))
print('kwargs=', kwargs)
fun(name='zhangsan', age=12, address='北京朝陽區')
fun(a=1, b='bbb', c=[1, 2, 3], d=True)
fun(a=100, **{'c': 300, 'd': 200})
列印結果:
關鍵字傳參的個數: 3
kwargs= {'name': 'zhangsan', 'age': 12, 'address': '北京朝陽區'}
關鍵字傳參的個數: 4
kwargs= {'a': 1, 'b': 'bbb', 'c': [1, 2, 3], 'd': True}
關鍵字傳參的個數: 3
kwargs= {'a': 100, 'c': 300, 'd': 200}
函式的引數說明:
位置形參,預設引數,星號元組形參,雙星號字典形參等可以混合使用
函式形參從左向右的順序為:
1. 位置形參
2. 星號元組形參
3. 命名關鍵字形參
4. 雙星號字典形參
例項:
def fn(a, b, *args, c, **kwargs):
print(a, b, args, c, kwargs)
fn(1, 2, 3, 4, d='d', e='e', c='c')
列印結果:
1 2 (3, 4) c {'d': 'd', 'e': 'e'}
本節完
相關文章
- 引數的定義和引數的傳遞
- 函式的引數傳遞函式
- 函式引數 引數定義函式型別函式型別
- 方法(函式)的定義與引數函式
- JavaScript函式傳遞引數JavaScript函式
- python中函式的引數傳遞Python函式
- 函式作為引數傳遞函式
- 函式引數傳遞及返回函式
- Python的函式引數傳遞:傳值?引用?Python函式
- php函式引用傳遞引數的方法PHP函式
- Python語法—函式及引數傳遞Python函式
- Golang 切片作為函式引數傳遞的陷阱與解答Golang函式
- php函式之如何用預設引數和可變長度引數方式傳遞?PHP函式
- 第 8 節:函式-函式定義和引數函式
- 如何計算PHP函式中傳遞的引數數量PHP函式
- JavaScript為事件處理函式傳遞引數JavaScript事件函式
- 引數傳遞
- 【C語言】函式的概念和函式的呼叫(引數傳遞)C語言函式
- Go 之基礎速學 (五) golang 裡函式以及函式之間引數的傳遞Golang函式
- 模型的列表定義中,使用函式時如何定義引數?模型函式
- 函式中引數傳值函式
- 引數傳遞機制之JWTJWT
- JAVA基礎之-引數傳遞Java
- Mybatis引數傳遞MyBatis
- 遞迴函式,可變引數列表遞迴函式
- 『無為則無心』Python函式 — 26、Python函式引數的傳遞方式Python函式
- setInterval 回撥函式傳引數函式
- 彙編眼中的函式呼叫引數傳遞以及全域性與區域性變數與“基址”函式變數
- 請求引數的傳遞
- Javascript 定時器呼叫傳遞引數的方法JavaScript定時器
- 給妹子講python-S01E20函式引數的傳遞與修改Python函式
- React事件傳遞引數React事件
- 路由元件傳遞引數路由元件
- 二級指標,二維陣列函式引數傳遞指標陣列函式
- Day10 函式基礎+函式三種定義形式 + 函式的返回值、物件和引數 + 可變長引數函式物件
- 函式呼叫引數變數傳值的問題函式變數
- 『無為則無心』Python函式 — 29、Python變數和引數傳遞Python函式變數
- javascript忍者祕籍-第三章 函式定義與引數JavaScript函式