Есть ли чище или эффективнее сделать это назначение Python? - PullRequest
0 голосов
/ 17 февраля 2010

Вот код, который у меня сейчас есть:

lang = window.get_active_document().get_language()
if lang != None:
    lang = lang.get_name()

Есть ли лучший способ сделать это? Я новичок в Pythonic и мне было интересно, есть ли еще Python способ сказать «что-то равно этому, если x истинно, иначе это равно».

Спасибо.

Ответы [ 4 ]

7 голосов
/ 17 февраля 2010

Вы можете сделать lang = lang and lang.get_name() вместо оператора if.

Если lang равен None, он останется None. Если нет, то будет установлено значение lang.get_name ().

Я не уверен, что этот синтаксис делает вещи намного понятнее.

P.S. Вместо lang != None вы должны использовать not lang is None.

2 голосов
/ 17 февраля 2010
try:
    lang = window.get_active_document().get_language().get_name()
except AttributeError:
    lang = None

Преимущество здесь в том, что само окно и все три вложенных метода становятся защищенными в одном операторе.

2 голосов
/ 17 февраля 2010

Попробуйте

lang = lang.get_name() if lang else None
1 голос
/ 17 февраля 2010

Ваше решение в порядке и более ясное, чем большинство решений, предлагаемых до сих пор. Чуть более питоническим будет:

lang = window.get_active_document().get_language()
if lang:
    lang = lang.get_name()

или

lang = window.get_active_document().get_language()
if lang is not None:
    lang = lang.get_name()
...