Как выйти из предложения if
какие существуют методы для преждевременного выхода из if
предложения?
бывают моменты, когда я пишу код и хочу поставить break
заявление в if
предложение, только чтобы помнить, что они могут использоваться только для циклов.
рассмотрим следующий код в качестве примера:
if some_condition:
...
if condition_a:
# do something
# and then exit the outer if block
...
if condition_b:
# do something
# and then exit the outer if block
# more code here
Я могу придумать один способ сделать это: предполагая, что случаи выхода происходят внутри вложенных операторов if, оберните оставшийся код в большой блок else. Пример:
if some_condition:
...
if condition_a:
# do something
# and then exit the outer if block
else:
...
if condition_b:
# do something
# and then exit the outer if block
else:
# more code here
проблема в том, что больше мест выхода означает больше вложенности/отступа кода.
кроме того, я мог бы написать свой код, чтобы иметь if
предложения должны быть как можно меньше и не требуют каких-либо выходов.
кто-нибудь знает хороший/лучший способ выйти из if
предложения?
если есть какие-либо связанные предложения else-if и else, я полагаю, что выход пропустит их.
9 ответов
(этот метод работает для if
s, несколько вложенных циклов и другие конструкции, которые вы не можете break
С легкостью.)
оберните код в свою функцию. Вместо break
используйте return
.
пример:
def some_function():
if condition_a:
# do something and return early
...
return
...
if condition_b:
# do something else and return early
...
return
...
return
if outer_condition:
...
some_function()
...
from goto import goto, label if some_condition: ... if condition_a: # do something # and then exit the outer if block goto .end ... if condition_b: # do something # and then exit the outer if block goto .end # more code here label .end
(на самом деле не использовать это, пожалуйста.)
while some_condition:
...
if condition_a:
# do something
break
...
if condition_b:
# do something
break
# more code here
break
вы можете эмулировать функциональность goto с исключениями:
try:
# blah, blah ...
# raise MyFunkyException as soon as you want out
except MyFunkyException:
pass
отказ от ответственности: я только имею в виду, чтобы привлечь ваше внимание возможность делать вещи таким образом, в то время как я никоим образом не поддерживаю его как разумный при нормальных обстоятельствах. Как я уже упоминал в комментарии к этому вопросу, структурирование кода во избежание византийских условностей в первую очередь предпочтительнее. :-)
может быть это?
if some_condition and condition_a:
# do something
elif some_condition and condition_b:
# do something
# and then exit the outer if block
elif some_condition and not condition_b:
# more code here
else:
#blah
if
вообще говоря, нет. Если вы гнездитесь в "если" и отрываетесь от них, вы делаете это неправильно.
однако, если необходимо:
if condition_a:
def condition_a_fun():
do_stuff()
if we_wanna_escape:
return
condition_a_fun()
if condition_b:
def condition_b_fun():
do_more_stuff()
if we_wanna_get_out_again:
return
condition_b_fun()
обратите внимание, что функции не должны быть объявлены в операторе if, они могут быть объявлены заранее ;) это было бы лучшим выбором, так как это позволит избежать необходимости рефакторинга уродливого if/then позже.
для того, что было на самом деле задано, мой подход заключается в том, чтобы поставить те if
s внутри одной петли
while (True):
if (some_condition):
...
if (condition_a):
# do something
# and then exit the outer if block
break
...
if (condition_b):
# do something
# and then exit the outer if block
break
# more code here
# make sure it is looped once
break
эффективно то, что вы описываете, - это операторы goto, которые обычно довольно сильно панорамируются. Ваш второй пример гораздо легче понять.
однако очиститель все равно будет:
if some_condition:
...
if condition_a:
your_function1()
else:
your_function2()
...
def your_function2():
if condition_b:
# do something
# and then exit the outer if block
else:
# more code here
Итак, здесь я понимаю, что вы пытаетесь вырваться из внешнего Если блок кода
if some_condition:
...
if condition_a:
# do something
# and then exit the outer if block
...
if condition_b:
# do something
# and then exit the outer if block
# more code here
один из выходов из этого заключается в том, что вы можете проверить на ложное условие во внешнем блоке if, который затем неявно выйдет из блока кода, затем вы используете блок else для вложения другого ifs в сделать что-то
if test_for_false:
# Exit the code(which is the outer if code)
else:
if condition_a:
# Do something
if condition_b:
# Do something