在函数签名中放置 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 中删除此语法的基本原理。
在 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 中删除此语法的基本原理。