Короче, больше pythonic способа записать, если оператор

Сбой всего остального, если у Вас есть Office 2007, можно всегда сохранять ppt как документ OOXML.

44
задан Arkady 10 August 2012 в 18:42
поделиться

6 ответов

Кратчайший из них должен быть:

bc = 'on' if c.page=='blog' else 'off'

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

98
ответ дан 26 November 2019 в 21:32
поделиться

Это:

  1. определенно короче
  2. , возможно, Pythonic (до Python 2.5, который представил спорный синтаксис X if Z else Y )
  3. , сомнительно читаемый. Помня об этих предостережениях, вот оно:

     bc = ("off", "on") [c.page == "blog"]
    

РЕДАКТИРОВАТЬ: Согласно запросу, обобщенная форма выглядит так:

   result = (on_false, on_true)[condition]

Объяснение: условие может быть любым, что оценивается как логическое. Затем он обрабатывается как целое число, поскольку он используется для индексации кортежа: False == 0 , True == 1 , который затем выбирает правильный элемент из кортежа.

65
ответ дан 26 November 2019 в 21:32
поделиться

Или вы можете использовать встроенный оператор if:

>>> cpage = 'blog'
>>> bc = 'on' if cpage == 'blog' else 'off'
>>> bc
'on'
>>> cpage = 'asdf'
>>> bc = 'on' if cpage == 'blog' else 'off'
>>> bc
'off'

В этом блоге есть небольшая запись об этой функции, а соответствующий PEP - PEP308 . Встроенный оператор if был введен в Python 2.5.

Этот оператор может быть немного менее питоническим, но вы можете использовать и / или следующим образом:

>>> cpage = 'asdf'
>>> bc = (cpage == 'blog') and 'on' or 'off'
>>> bc
'off'
>>> cpage = 'blog'
>>> bc = (cpage == 'blog') and 'on' or 'off'
>>> bc
'on'

Этот оператор чаще используется в лямбда-операторах, чем в строке сам по себе, но форма

 A and B or C

похожа на

   if A:
       return B
   else:
       return C

. Я собирался написать немного более подробное объяснение, но они охватили его лучше в Dive into Python . Они также отметили несколько предостережений, о которых вам, вероятно, следует знать.

13
ответ дан 26 November 2019 в 21:32
поделиться

Другая возможность - использовать dict, если вы можете вычислить значения вне функции, которая обращается к ним (т.е. значения статические, что также касается проблема оценки в комментариях к ответу scrible).

want_bc = {True: "on", False: "off"}
# ...
bc = want_bc[c.page == "blog"]

Я предпочитаю это и / или решения для индексации кортежей под общей рубрикой предпочтения вычислений тестированию.

5
ответ дан 26 November 2019 в 21:32
поделиться

Ну, не будучи парнем из питонов, отнеситесь к этому с большой долей скептицизма, но написав (и, с большим трудом, прочитал ) много умного кода с годами я стал сильно предпочитать читаемый код. Я понял суть того, что делал ваш исходный код, хотя я никто как парень Python. Конечно, вы могли бы это скрыть и, возможно, произвести впечатление на пару-тройку чудаков по Python, но почему?

33
ответ дан 26 November 2019 в 21:32
поделиться

Вы можете использовать,

a = b if c else d 

, но если вы используете версию Python до 2.5,

bc = c.page == "blog" and "on" or "off"

тоже может помочь.

2
ответ дан 26 November 2019 в 21:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: