使用Python实现Switch/Case语句是一种常见的需求,本文将提供两个不同的示例来说明如何实现。
示例一:使用字典实现Switch/Case语句
在Python中没有内置的Switch/Case语句,但是可以使用字典及函数的方式来实现同样的功能。
比如,我们要实现一个简单的计算器,支持加、减、乘、除操作。可以使用以下代码实现:
def add(x, y): return x + y
def sub(x, y): return x - y
def mul(x, y): return x * y
def div(x, y): return x / y
switch = {
'+': add,
'-': sub,
'*': mul,
'/': div,
}
operator = input('请输入运算符(+, -, *, /): ')
if operator in switch:
x = float(input('请输入第一个数字: '))
y = float(input('请输入第二个数字: '))
print(switch[operator](x, y))
else:
print('不支持的运算符')
在这个计算器中,我们首先定义了四个支持运算的函数 add、sub、mul、div。接着,我们使用一个字典 switch 来存储运算符及其对应的函数。最后,用户输入运算符,我们检查该运算符是否支持,如果支持,则继续输入两个数字,并输出计算结果。
示例二:使用类和装饰器实现Switch/Case语句
第二种实现方式是使用类和装饰器。这种方式会更加模块化,便于扩展。
首先,我们定义一个 Switch 类,该类中包含一个字典 switch,用来存储 Case 对象。Case 对象包含一个条件和一个执行的函数。我们使用装饰器 @Switch.case 来向 Switch 实例中添加新的 Case 对象。
以下是示例代码:
class Switch:
class Case:
def __init__(self, condition):
self.condition = condition
self.fn = None
def __call__(self, fn):
self.fn = fn
return self
def __init__(self):
self.switch = {}
def case(self, condition):
case = Switch.Case(condition)
self.switch[condition] = case
return case
def default(self, fn):
self.default_fn = fn
return fn
def __call__(self, condition, *args, **kwargs):
case = self.switch.get(condition, None)
if case:
return case.fn(*args, **kwargs)
else:
return self.default_fn(*args, **kwargs)
# 示例:判断曜日
week_teller = Switch()
@week_teller.case('Sunday')
def _(x):
print('Today is Sunday.')
@week_teller.case('Monday')
def _(x):
print('Today is Monday.')
@week_teller.case('Tuesday')
def _(x):
print('Today is Tuesday.')
@week_teller.case('Wednesday')
def _(x):
print('Today is Wednesday.')
@week_teller.case('Thursday')
def _(x):
print('Today is Thursday.')
@week_teller.case('Friday')
def _(x):
print('Today is Friday.')
@week_teller.case('Saturday')
def _(x):
print('Today is Saturday.')
@week_teller.default
def _(x):
print('Unknown day.')
today = input('请输入星期几: ')
week_teller(today)
在这个例子中,我们定义了一个 Switch 类,其中包含两个内部类:Case 和 Default。Case 类中包含条件和对应的处理函数,Default 类中包含默认的处理函数。我们使用装饰器 @Switch.case 和 @Switch.default 来添加新的 Case 和 Default。
在这个示例中,我们定义了一个星期的判断程序。首先我们实例化了一个 Switch 对象,并使用 @Switch.case 每个星期设置一个处理函数。最后我们使用输入的星期调用 Switch 对象即可。
这种方式的好处是可以将不同条件的代码处理分离到不同的函数中,便于维护和扩展。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现switch/case语句 - Python技术站