我倾向于使用这个,但它很难看:
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)
简单的!
更多条件代码:
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)
您可以使用一个简单的or,如下所示:
>>> a = None
>>> b = 1
>>> c = (a or b) # parentheses are optional
>>> c
1
Run Code Online (Sandbox Code Playgroud)
你可以使用:
a = get_something() or y
Run Code Online (Sandbox Code Playgroud)
如果get_something是True在布尔上下文,它的价值将被分配到a.否则 - y将被分配给a.