经常在代码中,会遇到,有大量的写if ...else...结构的内容,但是如果大量的if else,可能会减少代码的可阅读性,那么我们是否可以有方案减少if...else...呢,答案是可以的。
一、字典方式
代码语言:javascript复制def fun1():
return "fun1"
def fun2():
return "fun 2"
def fun3():
return "fun 3"
options = {
'1': fun1,
'2': fun2,
'3': fun3
}
choice = input("Enter choice (1, 2, 3): ")
if choice in options:
result = options[choice]()
print(result)
else:
print("Invalid choice")
结果:
代码语言:javascript复制Enter choice (1, 2, 3): 1
fun1
是不是用了很少的if ...else...
二、使用策略模式
代码语言:javascript复制class fun1:
def execute(self):
return "fun 1"
class fun2:
def execute(self):
return "fun 2"
class fun3:
def execute(self):
return "fun 3"
class Context:
def __init__(self, strategy):
self.strategy = strategy
def execute_action(self):
return self.strategy.execute()
options = {
'1': fun1,
'2': fun2,
'3': fun3
}
def run(choice):
if choice in options.keys():
context = Context(options[choice]())
else:
print("Invalid choice")
print(context.execute_action())
if __name__=="__main__":
run("1")
执行结果:
这样很简单的就实现了,而且想要增加新的方案也很简单,不用增加if ...else...结果就可以实现了。
三、使用多态
代码语言:javascript复制class BaseAction:
def execute(self):
pass
class Fun1(BaseAction):
def execute(self):
return "Fun1"
class Fun2(BaseAction):
def execute(self):
return "Fun2"
class Fun3(BaseAction):
def execute(self):
return "Fun3"
# 统一调用执行方法
def exec_fun(fun):
return fun.execute()
options = {
'1': Fun1,
'2': Fun2,
'3': Fun3
}
def run(chos):
if chos in options.keys():
print(exec_fun(options[chos]()))
if __name__=="__main__":
run("1")
看下结果:
四、使用装饰器
代码语言:javascript复制def choice_val(func):
def inner(*args, **kwargs):
choice = args[0]
if choice in ('1', '2', '3'):
return func(*args, **kwargs)
else:
return "Invalid choice"
return inner
@choice_val
def run_action(choice):
actions = {
'1': "fun 1",
'2': "fun 2",
'3': "fun 3"
}
return actions[choice]
choice = "1"
result = run_action(choice)
print(result)
结果:
当然 还有其他方式可以实现减少if...else...,这里只是简单的举例。大家可以根据自己的实际的代码,进行选择适用自己的方式。