Из чего виды методов существуют для того, чтобы преждевременно выйти if
пункт?
Существуют времена, когда я пишу код и хочу поместить a 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 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, я полагаю, что выход перескочил бы через них.
(этот метод работает для , если
, несколько вложенных петель и другие конструкции, которые вы не можете откровенно
.) .)
код в своей собственной функции. Вместо разрыва
, используйте возврат
.
Пример:
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()
...
Вообще говоря, не. Если вы устанавливаете «IFS» и ломаете от них, вы делаете это неправильно.
Однако, если вы должны:
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()
Примечание, функции не должны быть объявлены в заявлении, если они могут быть объявлены заранее;) Это будет лучший выбор, поскольку он избегает нуждающегося в рефакторе уродливый, если / потом позже.
Вы можете эмулировать функциональность GoTo с исключениями:
try:
# blah, blah ...
# raise MyFunkyException as soon as you want out
except MyFunkyException:
pass
Отказ от ответственности: Я хочу привлечь к вашему вниманию возможности этого способа делать то, что ни в коем случае я не могу одобрить это как разумно под нормально обстоятельства. Как я уже говорил в комментарии к вопросу, структурирующий код, чтобы избежать византийских условных условий, в первую очередь предпочтительнее. : -)
while some_condition:
...
if condition_a:
# do something
break
...
if condition_b:
# do something
break
# more code here
break
Может быть это?
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
-121--842314- Эффективно то, что вы описываете, это операторы 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
-121--842317- 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
(Не используйте это, пожалуйста)
Может быть, это?
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
Эффективно то, что вы описываете, - это операторы 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