【问题标题】:Pass functional arguments through ternary operator in Python在 Python 中通过三元运算符传递函数参数
【发布时间】:2023-03-03 08:00:23
【问题描述】:

这可能是一个基本问题,因为我还在学习 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))

【问题讨论】:

  • 当括号变得混乱时,这表明你不应该一开始就将它塞进一行 - 损害可读性。

标签: python python-3.x function arguments conditional-operator


【解决方案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))) 传递给函数
        猜你喜欢
        • 2017-03-24
        • 1970-01-01
        • 2016-12-21
        • 2019-07-10
        • 1970-01-01
        • 2021-06-25
        • 2021-10-02
        • 2020-08-02
        • 2018-04-03
        相关资源
        最近更新 更多