Оцените несколько переменных в одном выражении "если"?

Скажем, у меня есть куча переменных, которые либо 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 будут происходить в моем коде. Есть ли способ, которым я могу выполнить эту оценку с помощью более чистого синтаксиса (например, первого примера)?

Ответы

Ответ 2

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

# 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

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

if var1 and var2 and var3 and var4:
     do stuff

Ответ 4

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

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

Ответ 5

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

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

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

if ListObjectsEqualTo((var1, var2, var3, var4), False):
    # do stuff

Ответ 6

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

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()

Ответ 7

>>> not any([False, False])
True
>>> not any([True, False])
False
>>> 

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

Ответ 8

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