在python中进行条件赋值的最佳方法

cri*_*aig 16 python

我倾向于使用这个,但它很难看:

a = (lambda x: x if x else y)(get_something())
Run Code Online (Sandbox Code Playgroud)

所以我写了这个函数:

def either(val, alt):
    if val:
        return val
    else:
        return alt
Run Code Online (Sandbox Code Playgroud)

所以你可以这样做:

a = either(get_something(), y)
Run Code Online (Sandbox Code Playgroud)

是否有内置函数(类似于T-SQL中的ISNULL)?

Mar*_*tos 35

or运营商你想要做什么:

get_something() or y
Run Code Online (Sandbox Code Playgroud)

事实上,它是可链接的,就像COALESCE(并且不同ISNULL).以下表达式求值为转换为True的最左侧参数.

A or B or C
Run Code Online (Sandbox Code Playgroud)

  • 只是为了记录,如果你要链接`和`运算符,它将评估最右边的参数,如果所有参数都转换为True,或者转换为False的最左边的参数,如果有的话转换为False. (3认同)

Phy*_*win 7

简单的!

更多条件代码:

a = b if b else val
Run Code Online (Sandbox Code Playgroud)

对于您的代码:

a = get_something() if get_something() else val
Run Code Online (Sandbox Code Playgroud)

这样你就可以执行像这样的复杂条件:

a = get_something() if get_something()/2!=0 else val
Run Code Online (Sandbox Code Playgroud)

  • 除了这会调用两次“get_something”。 (6认同)

mik*_*iku 5

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

>>> a = None
>>> b = 1
>>> c = (a or b) # parentheses are optional
>>> c
1
Run Code Online (Sandbox Code Playgroud)


Mic*_*ski 5

你可以使用:

a = get_something() or y
Run Code Online (Sandbox Code Playgroud)

如果get_somethingTrue在布尔上下文,它的价值将被分配到a.否则 - y将被分配给a.