Как сделать оператор if-elif-else в python более экономящим место? - PullRequest
4 голосов
/ 10 мая 2010

В моем коде много операторов if-elif-else

<code>
if message == '0' or message == '3' or message == '5' or message == '7':
   ...
elif message == '1' or message == '2' or message == '4' or message == '6' or message == '8':
   ...
else:
   ...

Можно ли отформатировать это более экономно?

Я пробовал это так:

<code>
if message == '0' or '3' or '5' or '7':
   ...
elif message == '1' or '2' or '4' or '6' or '8':
   ...
else:
   ...

Но безуспешно.

Ответы [ 2 ]

6 голосов
/ 10 мая 2010
if message in ("0", "3", "5", "7"):
    ...
elif message in ...

будет одним из способов.

Если message всегда имеет длину одного символа, вы также можете использовать

if message in "0357":
    ....

Но это также будет верно, если message == "35", поэтому предупреждение.


(EDIT)

Краткое объяснение, почему ваш подход не работал:

if message == '0' or '3' or '5' or '7':

интерпретируется как

if (message == '0') or '3' or '5' or '7':

и, следовательно, всегда успешно, потому что '3' оценивается как True.

1 голос
/ 10 мая 2010
if message in '0357' :
    ...
elif message in '12468' :
    ...
else:
    ...

В более общем смысле:

if value in [elem0, elem1, ... ]:
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...