如何使接受元组输入的Python函数?

科林·麦克

在Python 2中,此函数定义有效:

def sv( (L, R) ):
    return L ^ R

但是,在Python 3中,左第二个括号返回了语法错误。我不知道为什么?

如何指示Python接受元组作为输入?

亚当·史密斯

函数参数作为单个变量名称给出,因此您可以执行以下操作:

def sv(l_r):
    l, r = l_r
    return l ^ r

如果要确保这是一个元组,可以使用类型注释和mypy

from typing import Tuple
def sv(l_r: Tuple[int, int]) -> int:
    l, r = l_r
    return l ^ r

但是,这可能不是您想要的。接受两个参数,如果您要传递一个元组,请使用splat运算符*

def sv(l, r):
    return l ^ r

tup = (1, 2)
result = sv(*tup)

请注意,与其他某些语言不同,Python通常不将这种模式匹配作为语言功能来支持(想到了Haskell)。您想要在Haskell中做的是:

sv :: Bits a => (a, a) -> a
sv (l, r) = l `xor` r  -- Note the pattern match here on `(l, r)`

-- contrast with a two-argument function:

sv' :: Bits a => a -> a -> a
sv' l r = l `xor` r

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章