2016-01-21 2 views
2

Существует очень распространенное предложение, которое я использую снова и снова в Python, который чувствует себя «слишком длинным», и я надеюсь, что есть более Pythonic путь к напишите:Лучший способ написать: a = b, если a - None else a

a = b if a is None else a 

Есть ли лучший способ написать это?

ответ

6

Типичный ярлык для этого

a = a or b 

Хотя, это будет только проверить, если a вычисляет False, так 0, False, None, '' и т.д. все будет вызывать a быть установлен в b

2

Вы могли бы сделать ...

if a is None: 
    a = b 

Мне кажется немного чище для меня, и вам не нужно назначать переменную себе.

+3

Тест 'None' обычно использует' is', а не равенство. – TigerhawkT3

+0

Справедливая точка, я обновил свой ответ –

-1

Попытка

a = a or b 

Python выполняет оценку короткого замыкания, так что если a имеет значение True (любое ненулевое целое или с плавающей точкой, непустые списки, непустые dicts, и т.д.), значение a - это возврат и be не оценивается. Однако, если a == None, он оценивается как False, поэтому интерпретатор должен также оценить b. Если b оценивается в True, тогда он будет возвращен в качестве ответа. Есть несколько случаев, на которые следует обратить внимание, как упоминалось в другом ответе.

+5

Вместо того, чтобы рассказывать всем о заполнении, вы можете рассказать всем, почему попытка решить эту проблему. Тогда вам не придется рассказывать всем об отступе. –

+0

Я чувствую запах 'SyntaxError'. – Zizouz212

1

Стандартный подход к короткому замыканию, как:

a = a or b 

Однако это опасно, если его только None, что вы считаете, необходимо заменить. Например, если вы хотите сохранить значения a, например False, тогда этот подход не будет делать то, что вам нужно.

Более короткая фраза, чем ваш оригинал, но довольно уродливый, является

a = [a, b][a is None] 

Это не будет recommmended, и может вызвать некоторые галлюциногенный для читателей, но общий подход до введения синтаксиса inline if ... else ...

Смежные вопросы