Я бы использовал
x = 'default' if not x else x
Гораздо короче, чем все ваши альтернативы, предложенные здесь, и прямо к делу. Прочитайте: «установите x в значение« по умолчанию », если x не установлено, в противном случае сохраните его как x». Однако если вам нужны None
, 0
, False
или ""
в качестве допустимых значений, вам нужно изменить это поведение, например:
valid_vals = ("", 0, False) # We want None to be the only un-set value
x = 'default' if not x and x not in valid_vals else x
Подобные вещи также просто умоляют превратиться в функцию, которую вы можете легко использовать везде:
setval_if = lambda val: 'default' if not val and val not in valid_vals else val
В этот момент вы можете использовать его как:
>>> x = None # To set it to something not valid
>>> x = setval_if(x) # Using our special function is short and sweet now!
>>> print x # Let's check to make sure our None valued variable actually got set
'default'
Наконец, если вам действительно не хватает нотации Ruby Infix, вы можете перегрузить ||=|
(или что-то подобное), следуя хаку этого парня: http://code.activestate.com/recipes/384122-infix-operators/