下面【例3-4】中的这段代码通过算术运算的符号,获取算术运算表达式 。
【例3-4.py】
1# 使用字典实现switch语句 2from __future__ import division# 导入division模块 3x = 1 4y = 2 5operator = "/" 6result = { # 定义字典 7"+" : x + y, 8"-" : x - y, 9"*" : x * y,10"/" : x / y 11}12print (result.get(operator))
【代码说明】
- 第3、4行代码定义了两个操作数x、y 。
- 第5行代码定义了操作符变量operator,该变量用于存放算术运算符 。
- 第6行代码定义了一个字典result 。该字典的key值由“+”“-”“*”“/”四则运算符组成 。value值由对应的算术表达式组成 。
- 第12行代码调用get()方法,get()的参数就是变量operator的值 。由于operator的值为“/”,因此将执行除法运算 。输出结果为0.5 。
- 创建一个switch类,该类继承自Python的祖先类object 。调用构造函数__init__()初始化需要匹配的字符串,并定义两个成员变量value和fall 。value用于存放需要匹配的字符串 。fall用于记录是否匹配成功,初始值为False,表示匹配不成功 。如果匹配成功,程序向后执行 。
- 定义一个match()方法,该方法用于匹配case子句 。这里需要考虑3种情况 。首先是匹配成功的情况,其次是匹配失败的默认case子句,最后是case子句中没有使用break中断的情况 。
- 重写__iter__()方法,定义了该方法后才能使switch类用于循环语句中 。__iter__()调用match()方法进行匹配,通过yield关键字,使函数可以在循环中迭代 。此外,调用异常StopIteration中断循环 。Python中的循环都是通过异常StopIteration中断的 。这样switch类就构造完成了 。
- 编写调用代码,在for…in…循环中使用switch类 。
【例3-5.py】
1class switch(object):# 定义switch类 2 def __init__(self, value):# 初始化需要匹配的值value 3 self.value = value 4 self.fall = False # 如果匹配到的case语句中没有break,则fall为True 5 6 def __iter__(self):# 定义__iter__()方法 7 yield self.match # 调用match方法 返回一个生成器 8 raise StopIteration# 用StopIteration 异常来判断for循环是否结束 910 def match(self, *args): # 模拟case子句的方法11 if self.fall or not args: # 如果fall为True,则继续执行下面的case子句12 # 或case子句没有匹配项,则流转到默认分支13 return True14 elif self.value in args: # 匹配成功15 self.fall = True16 return True17 else: # 匹配失败18 return False1920operator = "+"21x = 122y = 223for case in switch(operator): # switch只能用于for... in...循环中24 if case('+'):25 print (x + y)26 break27 if case('-'):28 print (x - y)29 break30 if case('*'):31 print (x * y)32 break33 if case('/'):34 print (x / y)35 break36 if case(): # 默认分支37 print ""
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Python中的时间序列数据可视化的完整指南
- Python|学python要学多久,学到什么程度才能找工作?
- Python列表边遍历边删除,怎么用才不报越界错误呢?
- Java内置条件队列应用,实现经典的生产者消费者算法
- 用Python实现蒙特卡罗模拟的详细教程
- 公务科员提副科条件是什么?
- python之最详细字符串篇
- 大神总结223个Python小例子,建议收藏
- 请停止在Python中无休止使用列表
- python中的这个库居然是一个管理文件的神器