
本文为阅读 《Python Tricks: The Book》一书的 3.5 Function Argument Unpacking 的笔记与扩充理解。函数参数拆解是定义可变参数(VarArgs) *args
和 **kwargs
的反向特性。
*args
和 **kwars
是函数可定义一个形参来接收传入的不定数量的实参。
而这里的函数参数拆解是形参定义多个,在调用时只传入一个集合类型对象(带上 * 或 ** 前缀),如 list
, tuple
, dict
, 甚至是 generator
, 然后函数能自动从集合对象中取得对应的值。
如果能理解下面赋值时的参数拆解和 Python 3.5 的新增 *
**
操作,那么于本文讲述的特性就好理解了。
唯一的不同时作为参数的集合传入函数时必须前面加上 *
或 **
, 以此宣告该参数将被拆解,而非一个整体作为一个函数参数。加上 *
或 **
与 Java 的 @SafeVarargs
有类似的功效,最接近的是 Scala 的 foo(Array[String]("d", "e") : _*)
写法。参见:Java 和 Scala 调用变参的方式 阅读全文 >>