【发布时间】:2016-07-19 05:17:00
【问题描述】:
我已经使用 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
这显然不仅仅是一个奇怪的实现细节:如果你仔细阅读grammar,特别是fpdef 是什么,你会发现函数定义是为元组解包而明确设计的。
我的问题是,为什么这是一个设计选择,什么是必要的示例用例?对我来说,这似乎是一个晦涩且容易出错的功能,它违反了 python 1、2、3、5、7、9、13、17....的禅宗。
【问题讨论】:
标签: python function grammar python-2.x argument-unpacking