Python 函数的参数传递 *args和 **kwargs

知识点:

  1. 在函数调用时,*会以单个元素的形式解包一个元祖,使其成为独立的参数。
  2. 在函数调用时,**会以键/值对的形式解包一个字典,使其成为独立的关键字参数。

 

def f(a,*args):
    print(args)

f(1,2,3,4)
​```
输出为:(2, 3, 4)
​```

虽然传入1,2,3,4,但是解包为(1),(2,3,4),其中a是1,args是剩下的。

 

在python中,当*和**符号出现在函数定义的参数中时,表示任意数目参数。*arg表示任意多个无名参数,类型为tuple;**kwargs表示关键字参数,为dict,使用时需将arg放在*kwargs之前,否则会有“SyntaxError: non-keyword arg after keyword arg”的语法错误。

再看看**kwargs的参数传递的例子

def f(**kargs):
    print(kargs)
    
f(a=1,b=2) # 实际传入参数是两个,但是给包裹在一起
​```output:
{'a': 1, 'b': 2}
​```

def person(name,age,**kw):
    print('name:',name,'age:',age,'other:',kw)
# 传入4个参数,自动将后两位  拼接到成字典
person('Adam', 45, gender='M', job='Engineer')

​```output
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
​```

 

再看看*args 和 **kwargs混合的例子

def h(a,*args,**kwargs):
    print(a,args,kwargs)

h(1,2,3,x=4,y=5)
# 丢进去不确定参数的包裹:1,2,3,x=4,y=5
# 解包:1                    -a
# 解包:(2,3)               -*args
# 解包:{'x': 4, 'y': 5}     -**kwargs
​```output
1 (2, 3) {'x': 4, 'y': 5}
​```

 

 

 

 

posted on 2024-03-13 17:34  星河赵  阅读(66)  评论(0编辑  收藏  举报

导航