在函数签名中放置 python 个元组

placing python tuples in function signature

在 python 中有一个有趣且非常有用的工具,您可以使用它在函数签名上对来自元组的值进行模式匹配。

def first((a, b)):
    return a

x = (4, 9)
first(x)
li = [(5, 4), (8, 9)]
map(first, li)

def second(a, b):
    # does not work the same way
    return b

我没有看到任何关于使用它的文献。 python 社区为此使用的词汇是什么?是否有令人信服的理由不使用它?

叫做tuple parameter unpacking and was removed in Python 3.0

正如@zondo 所说,出于兼容性原因,您可能不想使用它。我自己仍然偶尔在 Python 2 中使用它。您会在我的第一个 link 的 PEP 中找到反对它的理由,但请记住,这些是它从语言中删除的原因,并且我认为这至少部分是因为它让 Python 制造商的事情变得更容易,这不一定是你或我避免它的理由。

在 Python2 中,太棒了。但是,它在 Python3 中是无效语法,因此出于向前兼容性的原因我不推荐它。

接受的答案没有说明如何解决这个问题,所以让我把它拼出来。

Python2码

def fun(a, (b, c), d):
    print("a {0} b {1} c {2} d {3}".format(a, b, c, d))

可以重构为

def fun(a, _args, d):
    b, c = _args
    print("a {0} b {1} c {2} d {3}".format(a, b, c, d))

这也是有效的 Python 3 代码。

这样称呼它

fun(1, [2, 3], 4)

链接的 PEP-3113 对此进行了更详细的解释,并提供了为什么在 Python 3.0 中删除此语法的基本原理。