我已经使用 python2 多年了,甚至不知道这个特性,但函数 defs 显然支持元组解包:
>>> def foo(a, (b, c)):
... print a, b, c
...
>>> t = (2, 3)
>>> foo(1, t)
1 2 3
默认值也是允许的,尽管它们似乎是在函数调用时而不是函数定义时解包的。而且我无法弄清楚如何按名称传递一个/任何/所有打包参数,也许这是不可能的。
>>> def foo(a, ((b, c), d)=('xy', 8)):
print a, b, c, d
...
>>> foo(0)
0 x y 8
这显然不仅仅是一个奇怪的实现细节:如果您仔细阅读语法,特别是 anfpdef
是什么,您会发现函数定义是为元组解包而明确设计的。
我的问题是,为什么这是一个设计选择,什么是必要的示例用例?对我来说,这似乎是一个晦涩且容易出错的功能,它违反了 python 1、2、3、5、7、9、13、17....