【问题标题】:Best way to do conditional assignment in python在 python 中进行条件赋值的最佳方法
【发布时间】:2011-10-05 23:47:14
【问题描述】:

我经常使用这个,但它很丑:

a = (lambda x: x if x else y)(get_something())

所以我写了这个函数:

def either(val, alt):
    if val:
        return val
    else:
        return alt

所以你可以这样做:

a = either(get_something(), y)

这个有内置函数吗(类似于 T-SQL 中的 ISNULL)?

【问题讨论】:

    标签: python


    【解决方案1】:

    我已向另一位用户提供了此问题的答案。在这里查看:

    Answer to similar question

    要在此处快速响应,请执行以下操作:

    x = true_value if condition else false_value
    

    【讨论】:

      【解决方案2】:

      我也在使用(a,b)[condition based on the value of a] 表单,将get_something() 调用的结果保存到a,在极少数情况下最好在这里展示:http://mail.python.org/pipermail/python-list/2002-September/785515.html

      ...
      a=0     b=None     a or b => None      (a,b)[a is None] => 0
      a=()    b=None     a or b => None      (a,b)[a is None] => ()
      ...
      

      【讨论】:

      • 我明白了。如果您想检查a 以了解更具体的情况,这将是。但是你需要两行,所以我会选择a = x if condition else y,这样更易​​读。不过有趣的语法。从来没有见过这样的东西:)
      • @crizCraig:添加了一个简短的例子
      【解决方案3】:

      简单!

      更多条件代码:

      a = b if b else val
      

      对于您的代码:

      a = get_something() if get_something() else val
      

      这样你就可以做这样的复杂条件:

      a = get_something() if get_something()/2!=0 else val
      

      【讨论】:

      • 除此之外调用get_something 两次。
      • 可以将 get_somthing 放入一个变量中。仅使用 OR,您无法设置条件。
      • 因为内置的or 运算符更简单,并且不会计算表达式两次。 OP 知道三元条件,buy 寻找更简单的东西。
      • +1 这是我一直在寻找的答案。或者不为我剪掉它。
      【解决方案4】:

      你可以使用:

      a = get_something() or y
      

      如果get_something 在布尔上下文中为True,则其值将分配给a。否则 - y 将分配给 a

      【讨论】:

        【解决方案5】:

        您可以使用简单的or,如下所示:

        >>> a = None
        >>> b = 1
        >>> c = (a or b) # parentheses are optional
        >>> c
        1
        

        【讨论】:

          【解决方案6】:

          or 操作符做你想做的事:

          get_something() or y
          

          事实上,它是可链接的,就像COALESCE (和ISNULL 不同)。以下表达式的计算结果是最左边的参数,该参数转换为 True。

          A or B or C
          

          【讨论】:

          • 谢谢。哈,我实际上是在尝试这样做,但是在尝试“a = 0 or None”时忽略了它,并且控制台什么也没打印。但是在此之后尝试“a is None”会给出“True”,而且我还是想要“None or 0”功能(迟到了):) 顺便说一句,感谢您的快速回答。
          • 仅作记录,如果您要链接 and 运算符,它将评估为最右边的参数,如果所有参数都转换为 True,或者最左边的参数转换为 False,如果任何转换为​​ False。
          • "a = 0 or None" 当然控制台不会打印任何内容,您将0 or None 的结果分配给a,并将None 分配给它们的变量在控制台中显示时不会自动显示None。您必须专门使用reprstrprint。或者类似的东西。
          猜你喜欢
          • 1970-01-01
          • 2023-03-17
          • 1970-01-01
          • 1970-01-01
          • 2022-11-01
          • 1970-01-01
          • 2023-03-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多