Python 重构重复的if语句
我的代码如下所示:Python 重构重复的if语句,python,if-statement,refactoring,Python,If Statement,Refactoring,我的代码如下所示: var1 = do_something_1() if param == 'A': var1 = do_something_A_1() var2 = do_something_2(var1) if param == 'B': var2 = do_something_B_1() var3 = do_something_3(var2) if param == 'A': var3 = do_something_A_2() var4 = do_someth
var1 = do_something_1()
if param == 'A':
var1 = do_something_A_1()
var2 = do_something_2(var1)
if param == 'B':
var2 = do_something_B_1()
var3 = do_something_3(var2)
if param == 'A':
var3 = do_something_A_2()
var4 = do_something_4(var3)
if param == 'A':
var4 = do_something_A_3()
def func(param):
"""
:param 'A' or 'B' or 'C'
"""
if param == 'A':
var1 = do_something_1()
var1 = do_something_A_1()
var2 = do_something_2(var1)
var3 = do_something_3(var2)
var3 = do_something_A_2()
var4 = do_something_4(var3)
var4 = do_something_A_3()
var5 = do_something_5(var4)
elif param == 'B':
var1 = do_something_1()
var2 = do_something_2(var1)
var2 = do_something_B_1()
var3 = do_something_3(var2)
var4 = do_something_4(var3)
var5 = do_something_5(var4)
elif param == 'C':
var1 = do_something_1()
var2 = do_something_2(var1)
var3 = do_something_3(var2)
var4 = do_something_4(var3)
var5 = do_something_5(var4)
return var5
我想知道是否有办法重构这段代码中的
if
语句。三元表达式+元组赋值怎么样
var1, var2, var3, var4, var5 = \
(do_something_1(), do_something_2(), do_something_3(), do_something_4(), do_something_5()) if param == 'A'
else \
(do_something_A_1(), do_something_A_2(), do_something_A_3(), do_something_A_4(), do_something_A_5())
它不仅可以让您不用评估将要丢弃的东西(假设您对副作用不感兴趣),还可以让您不用重新评估同一个表达式。您可以这样做(对于python 2.5及更高版本)
如果你在三种可能的情况下都清楚地说明,比如:
var1 = do_something_1()
if param == 'A':
var1 = do_something_A_1()
var2 = do_something_2(var1)
if param == 'B':
var2 = do_something_B_1()
var3 = do_something_3(var2)
if param == 'A':
var3 = do_something_A_2()
var4 = do_something_4(var3)
if param == 'A':
var4 = do_something_A_3()
def func(param):
"""
:param 'A' or 'B' or 'C'
"""
if param == 'A':
var1 = do_something_1()
var1 = do_something_A_1()
var2 = do_something_2(var1)
var3 = do_something_3(var2)
var3 = do_something_A_2()
var4 = do_something_4(var3)
var4 = do_something_A_3()
var5 = do_something_5(var4)
elif param == 'B':
var1 = do_something_1()
var2 = do_something_2(var1)
var2 = do_something_B_1()
var3 = do_something_3(var2)
var4 = do_something_4(var3)
var5 = do_something_5(var4)
elif param == 'C':
var1 = do_something_1()
var2 = do_something_2(var1)
var3 = do_something_3(var2)
var4 = do_something_4(var3)
var5 = do_something_5(var4)
return var5
你可以换这个
var1 = do_something_1()
if param == 'A':
var1 = do_something_A_1()
与
你似乎把c型三元组和Python的三元组混在一起了:-)不,半途而废。再试一次。嗯。。。我想我需要一个解释,只是检查一下,一切似乎都很好。它的形式是
。。。如果…:代码>当我评论时。else
出现在它之后。不管怎样,现在一切都好了,我正在删除否决票(尽管我很想保留它以供您使用Ruby[只是开玩笑])。哦。是 啊一开始我没有注意到,但在评论后一秒钟就重新编辑了)对于您的代码,有没有避免重复的方法?