在 Python 中通过三元运算符传递函数参数

Posted

技术标签:

【中文标题】在 Python 中通过三元运算符传递函数参数【英文标题】:Pass functional arguments through ternary operator in Python 【发布时间】:2021-04-27 07:56:55 【问题描述】:

这可能是一个基本问题,因为我还在学习 Python。但是假设我想做这样的事情,

def add(a, b):
    return a + b

a, b, c, d = 1, 2, 3, 4
sum = add(a, b if b == 2 else c, d)

基本上,我试图从三元运算符内部传递多个函数参数(如果可能的话,我想要一个类似的解决方案)。此代码当前给出以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: add() takes 2 positional arguments but 3 were given

我还尝试了什么:

add((a, b) if b == 2 else (c, d)) add(*(a, b) if b == 2 else *(c, d))

【问题讨论】:

当括号变得混乱时,这表明你不应该一开始就将它塞进一行 - 损害可读性。 【参考方案1】:

问题出在函数参数中,你声明了一个带有 2 个变量的函数,但你传递了 3,我理解你将参数传递给函数,它返回参数的总和,你可以这样做

def add(*args):
   return sum(args)
a, b, c, d = 1, 2, 3, 4
value = add(a, b if b == 2 else c, d)

*不要将 sum 声明为变量,它是 python 的内置函数 *

【讨论】:

【参考方案2】:

怎么样

add(*(a, b) if b == 9 else (c, d))

类似

add(*((a, b) if b == 9 else (c, d)))

【讨论】:

【参考方案3】:
>>> add(*((a, b) if b == 2 else (c, d)))
3

正如 cmets 中所指出的,您需要这么多括号来执行此操作是一个好兆头,表明这不是构建此代码的好方法。

【讨论】:

【参考方案4】:

sum_ = add(a, b) if b==2 else add(c, d)

上面的语句等价于

sum_ = 0
if b==2:
    sum_ = add(a, b)
else:
    sum_ = add(c, d)

如果感到困惑,最好写一个完整的声明,然后尽量用 Turney 把它简单化。

另外,建议不要对变量名使用内置函数

【讨论】:

是否可以只调用一次函数并通过三元运算符传递参数,因为在单个参数的情况下是可能的? @zean_7 正如其他人已经给出的解决方案一样,您只需选择满足条件的 2 个值并将这些值作为 sum_ = add(*((a,b) if b==2 else (c,d))) 传递给函数

以上是关于在 Python 中通过三元运算符传递函数参数的主要内容,如果未能解决你的问题,请参考以下文章

Python 函数进阶-lambda匿名函数和三元运算符

python函数 | 三元运算

Python之三元运算集合函数

python 三元运算与lambda

python 三元运算符推导式递归匿名函数内置函数

004——Python 三元运算,Python函数