pytho传参kwargs
python代码中有很多类似的用法,第一次接触的时候还是有很多疑惑的,为了方便记忆,因此梳理了一下。
# 使用模型进行推理
with torch.no_grad():
outputs = model(**encoded_texts)对于一个dict类型的变量**encoded_texts是取出value的值,而不考虑键。
def test_func(**kwargs):
a = kwargs["a"]
b = kwargs["b"]
print(a) # [1, 2, 3]
print(b) # hello test
dct = {"a": [1, 2, 3], "b": "hello test"}
test_func(**dct)函数传参的时候简化传参形式,无需指定参数名。
python 函数的参数传递 *args和 **kwargs
知识点:
- 在函数调用时,*会以单个元素的形式解包一个元祖,使其成为独立的参数。
- 在函数调用时,**会以键/值对的形式解包一个字典,使其成为独立的关键字参数。
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}
```到此这篇关于pytho传参kwargs的文章就介绍到这了,更多相关pytho传参kwargs内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论