- 看源码有一些奇奇怪怪的写法,顺便把以前用的整理整理
- 首先解释*args, **kwargs这两个,先看个测试代码
def func(*args, **kwargs):
print(args)
print(kwargs)
func(1,2,3,4, a = 5, b = 6, c = 7)
输出结果如图:
解释:*args传入多个值,这些值的特点是被包装成一个元组(tuple)
,如打印的(1, 2, 3, 4),**kwargs则传入多个值,这些值的特点是被包装成一个字典(dict)
,如打印的{‘a’: 5, ‘b’: 6, ‘c’: 7}
- 函数的解释def (): -> int
先看代码:
def func(*args: int, **kwargs: str) -> float:
print(args)
print(kwargs)
return "final"
a = func(1, 2, 3, 4, a=5, b=6, c=7)
print(a)
输出结果如图:
解释:参数中的*args: int
,*args同上,但是: int
表示函数这个参数的解释,告诉后面的使用者,使用该函数传入的值应该为整形数据,但是不会进行参数校验,只是做个提示的功能而已。**kwargs: str
同理。
在后面 -> float
则表示该函数的返回值为浮点数类型,同样只是做个提示,而不校验结果,如输出为final
- 最后,这种结果常常在短小精悍的代码中出现,剩下靠自己发挥啦。