7

在 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 社区为此使用的词汇是什么?有没有令人信服的理由不使用它?

4

3 回答 3

8

它被称为元组参数解包,并在 Python 3.0 中被删除。

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

于 2016-02-25T00:31:15.293 回答
2

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

于 2016-02-25T00:31:52.500 回答
0

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

Python 2 代码

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 中删除此语法的原因。

于 2019-11-09T09:42:06.880 回答