Python - порядок условий в операторе IF с оператором AND - PullRequest
1 голос
/ 17 июня 2020

Является ли хорошей практикой полагаться на порядок выражений, когда у нас есть несколько операторов and?

Точнее, у меня есть строка (иногда строка может быть None), и в зависимости от ее длины мне нужны некоторые действия. Подходит ли следующий код?

import os

mystr = os.getenv('MYSTR_ENV_VAR')

if mystr and len(mystr)>10:
    print('do sth')
else:
    print('do sth else')

Обратите внимание, что когда mystr равно None, код len(mystr) при выполнении вызовет ошибку. Поэтому я полагаюсь на оператор if, чтобы сначала убедиться, что mystr не пуст или None, а затем оценить длину. Этот код работает, и если он безопасен, logi c подходит для моих нужд. Это правильный c способ Pythoni сделать это?

Ответы [ 2 ]

2 голосов
/ 17 июня 2020

Python лениво вычисляет логические условия. Таким образом, ваш код безопасен, поскольку оператор if сначала проверит существование вашей строки.

From docs :

Выражение x and y сначала вычисляет x; если x ложно, возвращается его значение; в противном случае вычисляется y и возвращается результирующее значение.

Выражение x or y сначала вычисляет x; если x истинно, возвращается его значение; в противном случае y вычисляется и возвращается результирующее значение.

0 голосов
/ 17 июня 2020

Проверьте документы для Python 3.x , операторы поддерживают короткое замыкание, т.е. если первое выражение не проходит тест if в составном тесте and, последующие тесты не выполняются. 't вычислено

Для or

Это оператор короткого замыкания, поэтому он оценивает только второй аргумент, если первый является ложным.

Для and

Это оператор короткого замыкания, поэтому он оценивает второй аргумент, только если первый верен.

...