函数进阶
args和kwargs
在定义函数时,如果你不确定调用者会传多少个参数,就可以使用 *args 和 **kwargs。
简单理解:
*args:接收多个位置参数**kwargs:接收多个关键字参数
*args
*args 会把多余的位置参数收集成一个元组。
输出结果:
所以可以用它来写一个支持任意数量参数的求和函数:
**kwargs
**kwargs 会把多余的关键字参数收集成一个字典。
输出结果:
可以继续遍历这个字典:
输出结果:
一起使用
*args 和 **kwargs 可以一起使用:
输出结果:
需要注意顺序,*args 要写在 **kwargs 前面:
总结
偏函数 partial
partial 中文一般叫 偏函数,它来自 functools 模块。
它的作用很简单:先固定函数的一部分参数,得到一个新的函数。
基本用法
比如有一个打招呼函数:
正常调用时,每次都要传两个参数:
如果你经常都说“你好”,就可以用 partial 先把第一个参数固定住:
输出结果:
此时 say_hello 就是一个新函数,它只需要传 name,因为 word 已经被提前固定成了 "你好"。
再看一个例子
比如有一个加法函数:
如果你想得到一个“专门加 10”的函数:
这里的 add_ten(5),本质上相当于:
固定关键字参数
partial 也可以固定关键字参数。
输出结果:
和普通函数的区别
不用 partial,也可以自己写一个新函数:
这当然没问题。
partial 的好处是:当你只是想简单固定几个参数时,不需要再额外写一层函数,代码会更简洁。
总结
partial 可以把一个参数较多的通用函数,变成一个参数更少的专用函数。
简单记:

