gpt4 book ai didi

Python 参数解包

转载 作者:太空宇宙 更新时间:2023-11-03 14:17:45 25 4
gpt4 key购买 nike

有时,一些函数会交换一些非常特殊的数据元组。

>>> 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。谢谢!

最佳答案

在 Python3 中,Tuple Parameter Unpacking feature is removed .根据 PEP 3113:

Unfortunately this feature of Python's rich function signature abilities, while handy in some situations, causes more issues than they are worth.

所以不要使用它;它将使您的代码仅与 Python2 兼容。PEP 中讨论的避免元组参数解包的其他原因包括

  • 内省(introspection)问题
  • 移除后不会失去能力
  • 规则的异常(exception)
  • 无意义的错误消息
  • 很少使用

关于Python 参数解包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31797662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com