在函数签名中放置python元组

在函数签名中放置python元组,python,python-2.7,pattern-matching,tuples,function-signature,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社区在这方面使用的词汇是什么?有没有令人信服

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

它被称为并被称为


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

在Python2中,这很好。但是,它在Python3中是无效的语法,因此出于向前兼容的原因,我不建议使用它。

公认的答案没有说明如何解决这个问题,所以让我详细说明一下

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))
这也是有效的Python3代码

就像

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

链接更详细地解释了这一点,并提供了为何在Python 3.0中删除此语法的基本原理。

使用元组函数参数不是有效的语法。(至少在Python3中是这样),如果是的话,它将出现在中。第二个函数定义根本不使用元组。您在那里指定了两个独立的函数位置参数。@AndrewJenkins,但Python 2仍然有它。但是没有Python 3解决方案吗?