Как правильно заключить условия в Python? - PullRequest
0 голосов
/ 26 апреля 2020

Недавно я смотрел видео о хороших методах программирования, где ведущий много говорил об опасности использования голых условных выражений , в основном некапсулированных условных выражений. Примером является то, что что-то вроде этого предположительно предпочтительнее, чем условие, явно записанное в операторе if.

foo = 3 <= len(bar) < 7 and some_other_condition
if foo:
    do_something
    (...)

С этой информацией было бы логично применить его к циклам while таким же образом.

foo = 3 < len(bar) < 7 and some_other_condition
while foo:
    do_something
    update(some_other_condition)
    (...)

Проблема здесь в том, что условное выражение было определено вне тела элемента while l oop, и оно не обновляется, даже если условие явно изменяется внутри l oop.

Другой вариант - определить функцию, которая заботится об условном выражении, и вызывать ее каждый раз, когда вы выполняете итерацию. Но это (по крайней мере для меня) кажется ненужной сложностью ради, казалось бы, чистого кода. Нет ли способа сделать это, чтобы не требовалось определять внутреннюю функцию для каждого сложного условия?

def foo(x):
    return 3 < len(x) < 7 and some_other_condition

while foo(bar):
    do_something
    update(some_other_condition)
    (...)

Мне не удалось найти что-либо в inte rnet в topi. c. Итак, имея это в виду, я спрашиваю вас, каков правильный способ инкапсуляции условных выражений в Python?

1 Ответ

2 голосов
/ 26 апреля 2020

Не совсем ясно, что эта техника предпочтительна, не говоря уже о полезности или желательности. Если ничего другого, вы превращаете одну возможность превратить опечатку в две.

Просто напишите

while 3 < len(x) < y and some_other_condition:
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...