在很多场景下,我们可能需要写大量的if else分支来进行判断,然后根据结果再进入下一步的业务逻辑。这样可能导致一个方法的行数会大大增加,增加阅读的难度,并且健壮性变差。
目前只想到了2种场景下,代替if else 的方案。
以优化下面代码为例,下面是原代码:
def slove():
number = input("please input a number, limit 0-5")
if number == "1":
time.sleep(1)
print("the number that you input is: ",1)
if number == "2":
time.sleep(1)
print("the number that you input is: ",2)
if number == "3":
time.sleep(1)
print("the number that you input is: ",3)
if number == "4":
time.sleep(1)
print("the number that you input is: ",4)
if number == "5":
time.sleep(1)
print("the number that you input is: ",5)
else:
print("a error occur ,check")
time.sleep(1)
print("program exit...")
exit(0)
第一种优化场景,判断条件为数字类型:
将每个分支拆分为一个函数。
def test1(number):
if number == "1":
print("the number that you input is: ",1)
def test2(number):
if number == "2":
print("the number that you input is: ", 2)
def test3(number):
if number == "3":
print("the number that you input is: ", 3)
def test4(number):
if number == "4":
print("the number that you input is: ", 4)
def test5(number):
if number == "5":
print("the number that you input is: ", 5)
# else:
# return
再循环这个函数列表
def slove():
number = input("please input a number, limit 0-5")
solve_list = [test1, test2, test3, test4, test5]
for func in solve_list:
func(number)
if __name__ == '__main__':
slove()
第二种场景,也是比较常见的,判断条件为字符串类型
拆分出来的函数不变,修改slove函数。
def slove2():
number = input("please input testN")
solve_list = [test1, test2, test3, test4, test5]
for func in solve_list:
# func.__name__取函数的名字
if number == func.__name__:
func(number)
if __name__ == '__main__':
slove2()
根据传入的字符串,执行对应的分支函数。
最后解释一下,拆分if else并不能提升代码的执行效率,如果业务很复杂的话,可能还会比直接写if else要低一些(因为怎么拆分还要考虑一下)。但拆分出来后,每一个分支的业务会更直观,代码整体可读性会更好。
python lambda函数