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