Оценить несколько переменных в одном операторе «если»? - PullRequest
15 голосов
/ 29 февраля 2012

Скажем, у меня есть куча переменных, которые True или False. Я хочу оценить набор этих переменных в одном операторе if, чтобы увидеть, все ли они False примерно так:

if var1, var2, var3, var4 == False:
    # do stuff

За исключением того, что это не работает. Я знаю, что могу сделать это:

if var1 == False and var2 == False and var3 == False and var4 == False:
    # do stuff

Но это довольно уродливо, особенно если в моем коде часто встречаются операторы if. Есть ли способ, которым я могу сделать эту оценку с более чистым синтаксисом (как в первом примере)?

Ответы [ 8 ]

34 голосов
/ 29 февраля 2012

Вы не должны никогда не проверять логическую переменную с == True (или == False) .Вместо этого либо напишите:

if not (var1 or var2 or var3 or var4):

или используйте any (а в связанных с этим проблемах его двоюродный брат all):

if not any((var1, var2, var3, var4)):

или используйте транзитивные сравнения Python :

if var1 == var2 == var3 == var4 == False:
7 голосов
/ 29 февраля 2012

Как насчет этого:

# if all are False
if not any([var1, var2, var3, var4]):
    # do stuff

или:

# if all are True
if all([var1, var2, var3, var4]):
    # do stuff

Их легко прочитать, поскольку они написаны простым языком.

3 голосов
/ 29 февраля 2012

if all(not v for v in (var1, var2, var3, var4)):

Это для "всех ложных" ответвлений. Для "все верно", просто сделайте if all((var2, var2, var3, var4)):.

3 голосов
/ 29 февраля 2012

Вы можете сделать:

if var1 and var2 and var3 and var4:
     do stuff
1 голос
/ 29 февраля 2012
>>> not any([False, False])
True
>>> not any([True, False])
False
>>> 

Используйте ключевое слово any () .

1 голос
/ 29 февраля 2012

Вы можете сделать:

if var1 == var2 == var3 == var4 == False:
  do_stuff()

Но, если переменные оцениваются как true или false, вы также можете сделать это:

if var1 and var2 and var3 and var4:
  do_stuff()

или

if all([var1, var2, var3, var4]):
  do_stuff()
1 голос
/ 29 февраля 2012

А как насчет пользовательской функции?

function ListObjectsEqualTo(myList, toValue):
    for i in myList:
        if i != toValue:
            return False
    return True

Теперь вы можете использовать ее

if ListObjectsEqualTo((var1, var2, var3, var4), False):
    # do stuff
0 голосов
/ 29 февраля 2012

Вы можете использовать if var1 == var2 == var3 == False:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...