Есть ли в питоне какое-нибудь выражение, похожее на рубиновое ||=

Я наткнулся на интересное выражение в Ruby:

a ||= "new"

Это означает, что если a не определено, "новое" значение будет присвоено a; в противном случае a будет таким же, как есть. Это полезно при выполнении некоторых запросов к БД. Если значение установлено, я не хочу запускать еще один запрос к БД.

Поэтому я попробовал подобный подход в Python :

a = a if a is not None else "new"

. Это не удалось. Я думаю, что это потому, что вы не можете сделать «a = a» в Python, если a не определено.

Итак, решения, которые я могу предложить, это проверка локальных переменных ()и глобальных переменных ()или использование выражения try...except:

myVar = myVar if 'myVar' in locals() and 'myVar' in globals() else "new"

или

try:
    myVar
except NameError:
    myVar = None

myVar = myVar if myVar else "new"

Как мы видим, решения не столь элегантны. Поэтому я хотел бы спросить, есть ли лучший способ сделать это?

5
задан Conan 20 July 2012 в 07:09
поделиться