LINUX.ORG.RU

История изменений

Исправление mogwai, (текущая версия) :

В общем случае код выглядит примерно как:

def f(x):
 if cond1(x):
   return res1
 y = process1(x);
 if cond2(y):
   return res2
 if cond3(y):
   return res3
 z = process2(x, y)
 if cond4(x,y,z):
   return res4
 if cond5(x,y,z):
   return res5
 ...  

после убирания return получается что-то вроде

def f(x):
 if cond1(x):
   res = res1
 else:
   y = process1(x);
   if cond2(y):
     res = res2
   elif cond3(y):
     res = res3
   else:
     z = process2(x, y)
     if cond4(x,y,z):
       res = res4
     elif cond5(x,y,z):
      res = res5
 ...
 return res  

FTFY

Второе читается проще. И наглядно показывает проблему алгоритма. Ты что-то не так делаешь, если у тебя много уровней вложений «если». Ранний возврат в данном случае - накрытие мусора газеткой.

Исходная версия mogwai, :

В общем случае код выглядит примерно как:

def f(x):
 if cond1(x):
   return res1
 y = process1(x);
 if cond2(y):
   return res2
 if cond3(y):
   return res3
 z = process2(x, y)
 if cond4(x,y,z):
   return res4
 if cond5(x,y,z):
   return res5
 ...  

после убирания return получается что-то вроде

def f(x):
 if cond1(x):
   res = res1
 else:
   y = process1(x);
   if cond2(y):
     res = res2
   elif cond3(y):
     res = res3
   else:
     z = process2(x, y)
     if cond4(x,y,z):
       res = res4
     elif cond5(x,y,z):
      res = res5
 ...
 return res  

Второе читается проще. И наглядно показывает проблему алгоритма. Ты что-то не так делаешь, если у тебя много уровней вложений «если». Ранний возврат в данном случае - накрытие мусора газеткой.