Есть ли способ выполнить назначение, только если назначенное значение не равно 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 для выполнения sh, без двойного доступа к x
или get_value()
и без создания переменных?
Другими словами, скажем, =??
- это Оператор Python аналогичен оператору C# null coalesce . В отличие от C# ??=
, наш вымышленный оператор проверяет, является ли правая сторона None
:
x = 1
y = 2
z = None
x =?? y
print(x) # Prints "2"
x =?? z
print(x) # Still prints "2"
Такой оператор =??
будет делать именно то, что задает мой вопрос.