Python 函数定义
本文详细介绍了 Python 函数声明和定义的各种方式,有些在阅读标准库函数和开源代码时经常会遇到,特此整理总结一下。
类型建议符
类型建议符(Type Hints)是 Python 3.5 新增的功能,在 typing
模块中实现。可以通过 冒号 和 箭头 来表示函数的参数类型和返回值类型,主要起到 注释 的作用。
- 冒号:函数参数的类型建议符
- 箭头:函数返回值的类型建议符
Python 运行时不强制执行函数和变量类型注解(实际使用中违反了也不会报错),但这些注解可用于类型检查器、IDE、静态检查器等第三方工具。
typing 模块的常用类型:
- Union:并集,
Union[X, Y]
表示要么 X 类型、要么 Y 类型。 - Optional:可选,等同于
Union[X, None]
,表示可以为 None。
示例:类型建议符的使用
1 |
|
Ellipsis 对象(…):语义上表示省略,可以在 Type Hints 中做占位符使用。
关键字参数
如果你有一些具有许多参数的函数,而你又希望只对其中的一些进行指定,那么你可以通过 关键字 而非 位置 来给这些参数赋值。这样做有两大优点:
- 不再需要考虑参数的顺序,函数的使用将更加容易。
- 可以只对需要指定的参数赋值,只要其它的参数都具有默认参数值。
示例:关键字参数的使用
1 |
|
可变参数
在 Python 函数定义中,使用 *args
星号参数或 **kwargs
双星号参数声明参数列表可接受任意数量的参数,统称为可变参数。
函数定义时
*args
表示可接受任意个(包含0个)位置参数,当函数调用时,所有未匹配的位置参数(Positional Arguments)会被组成一个 tuple 对象,局部变量 args 指向此 tuple 对象。**kwargs
表示可接受任意个(包含0个)关键字参数,当函数调用时,所有未匹配的关键字参数(Keyword Arguments)会被组成一个 dict 对象,局部变量kwargs 指向此 dict 对象。
函数调用时
*var
表示解包 tuple 对象中的每个元素作为函数调用时传入的位置参数。**var
表示解包 dict 对象中的每个元素作为函数调用时传入的关键字参数。
注:元组解包 是完全独立的一个功能,在未定义可变参数的函数上也可以使用。
示例:可变参数的使用
1 |
|
限定参数
从 Python 3.8 开始,函数参数中允许出现 /
和 *
号,分别表示 限定位置参数 和 限定关键字参数(也称作命名关键字参数)。/
用来指明在其前面的参数必须使用位置参数而非关键字参数的形式,*
单独出现在参数中表示其后面的参数必须为关键字参数形式。
示例一:限定参数的使用
1 |
|
示例二:综合应用
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!