Python深入探究(四) Python高级函数!
[TOC]
*与**的用法
常规用法
python函数传递参数的方式有两种:
位置参数(positional argument)
关键词参数(keyword argument)
*args 与 **kwargs 的区别,两者都是 python 中的可变参数:args 表示任何多个无名参数,它本质是一个 tuple
\*kwargs 表示关键字参数,它本质上是一个 dict
如果同时使用 args 和 \*kwargs 时,必须 args 参数列要在 \*kwargs 之前。
在这个例子中,rest是由所有其他位置参数组成的元组。然后我们在代码中把它当成了一个序列来进行后续的计算。
1 | def avg(first,*rest): |
下面这个函数时,所有位置参数会被放到args元组中,所有关键字参数会被放到字典kwargs中。
1 | def anyargs(*args, **kwargs): |
另外!只接受关键字参数
将要强制关键字参数放到某个*参数或者单个*后面就能达到这种效果。比如:
1 | def recv(maxsize, *, block): |
为了可读性:
1 | msg=recv(1024,False) |
当然后者的使用方式更好了
实例!
1 | for k_, v_ in kwargs.items(): |
函数注解
所谓注解,自然是区分于上述的强制约束参数类型。
1 | def add(x:int, y:int) -> int: |
:int
用在参数
->int
用在返回值
使用__annotations__属性可获得注解字典,如果存在返回值注解,则字典中有return这个key,故参数不能用return命名。
1 | >>>(add.__annotations__) |
此文章版权归秦政所有,如有转载,请注明來自原作者
Comment