有没有办法只在分配的值不是 None 时才进行分配,否则什么都不做?
我们当然可以这样做:
x = get_value() if get_value() is not None
但这将读取该值两次。我们可以将它缓存到一个局部变量中:
v = get_value()
x = v if v is not None
但现在我们为一件简单的事情做了两个陈述。
我们可以写一个函数:
def return_if_not_none(v, default):
if v is not None:
return v
else:
return default
然后做
x = return_if_not_none(get_value(), x)
.但是肯定已经有一个 Python 习惯用法可以实现这一点,而无需访问 x
或 get_value()
两次并且不创建变量?换句话说,让我们说
=??
是类似于 C# null coalesce operator 的 Python 运算符.不像 C# ??=
,我们虚构的运算符检查右侧是否为 None
:x = 1
y = 2
z = None
x =?? y
print(x) # Prints "2"
x =?? z
print(x) # Still prints "2"
这样的
=??
运算符(operator)将完全按照我的问题进行操作。
最佳答案
在python 3.8中你可以做这样的事情
if (v := get_value()) is not None:
x = v
基于 Ryan Haining 解决方案更新,见评论
关于python - 一个类轮到 "assign if not None",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59780089/