有时,某些功能会交换一些非常特殊的数据元组。
>>> def foo():
... return (1,2,4)
...
>>> def f(a, b, v):
... x, y, z = v
... # ...
... # suppose there are 2-4 lines of some trivial code
... # ...
... print a, b, '(', x, y, z, ')'
...
>>> f(1, 2, foo())
1 2 ( 1 2 4 )
这里的用例是它真的是临时的数据集,所以我们不想引入新的类。 (我们还假设元组本身只是一堆数据,因此通过索引访问元组的元素,如print a, b, '(', v[0], v[1], v[2], ')'
会让读者感到困惑。)
所以,无论如何。我们决定传递元组,我们想解包(解构)它们。很酷的是,您可以在函数的参数列表中解压缩参数元组,因此f
可以简化一点:
>>> def f(a, b, (x,y,z)):
... # ...
... # the same implementation
... # ...
... print a, b, '(', x, y, z, ')'
它让读者感觉更清洁。它只是一行代码,但它也是完全不必要的代码,它还使函数的签名看起来更清晰。
这种技术有任何隐藏的陷阱吗? 这是一个普遍不赞成的特征(在这种情况下,我对这个原因感兴趣)?
我使用python 2.7。谢谢!
答案 0 :(得分:5)
在Python3中,Tuple Parameter Unpacking feature is removed。按照PEP 3113:
不幸的是,Python丰富的功能签名功能的这一特性虽然在某些情况下很方便,但却导致了更多的问题。
所以不要使用它;它将使您的代码仅与Python2兼容。 避免在PEP中讨论的元组参数解包的其他原因包括