将python元组放在函数签名中

时间:2016-02-25 00:24:18

标签: python python-2.7 pattern-matching tuples 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社区用于此的词汇是什么?是否有令人信服的理由不使用它?

3 个答案:

答案 0 :(得分:6)

它被称为tuple parameter unpacking并且是removed in Python 3.0

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

答案 1 :(得分:2)

在Python2中,这太棒了。然而,它在Python3中是无效的语法,因此我不建议将其用于前向兼容性原因。

答案 2 :(得分: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中删除此语法的理由。