拓展:switch实现
参考中谷教育 python视频:switch
switch语句用于编写多分支结构的程序,类似于if ... elif ...else语句。
switch语句表达的分支结构比if...elif...else语句表达的更清晰,代码的可读性更高
但是,python并没有提供switch语句 !!
python可以通过字典实现switch语句的功能,实现方法分为两步:
——首先定义一个字典。
——其次,调用字典里的get()获取响应的表达式。
通过字典调用函数:
{1:case1,2:case2}.get(x,lambda *arg,**key:)() 这语句比较难理解。通过例子来说明:
switch语句表达的分支结构比if...elif...else语句表达的更清晰,代码的可读性更高
但是,python并没有提供switch语句 !!
python可以通过字典实现switch语句的功能,实现方法分为两步:
——首先定义一个字典。
——其次,调用字典里的get()获取响应的表达式。
通过字典调用函数:
{1:case1,2:case2}.get(x,lambda *arg,**key:)() 这语句比较难理解。通过例子来说明:
简单的计算器:
用if语句判断加减乘除
#计算器至少涉及4种运算,+ - * /
#引入一个模块,解决运算的数据类型问题
from __future__ import division
def jia(x,y):
return(x + y)
def jian(x,y):
return(x - y)
def cheng(x,y):
return(x * y)
def chu(x,y):
return(x / y)
def operator(x,o,y):
if o == '+':
print(jia(x,y))
elif o == '-':
print(jian(x,y))
elif o == '*':
print(cheng(x,y))
elif o == '/':
print(chu(x,y))
else:
pass
operator(2,'/',4)
如果进行除法运算,先得判断是否加,减,乘之后再判断 除,实际上前三次判断是多余的。并不是直接根据我们给的符号进行运算,而是做了几次判断后才运算,如果符号不是加减乘除范围内,那么代码会做四次判断,结果才到pass
switch实现是类似于这样:我们事先把四个条件摆在这里,当你传回来的值符合哪个条件的时候直接执行就可以了
switch实现是类似于这样:我们事先把四个条件摆在这里,当你传回来的值符合哪个条件的时候直接执行就可以了
from __future__ import division
def jia(x,y):
return(x + y)
#jia = lambda x,y : x + y
def jian(x,y):
return(x - y)
#jian = lambda x,y : x - y
def cheng(x,y):
return(x * y)
# cheng = lambda x,y : x * y
def chu(x,y):
return(x / y)
#chu = lambda x,y : x / y
#定义一个字典
operator = {'+' : jia, '-' : jian,'*' : cheng, '/' : chu}
#(operator['+'](3,2)) 等同于 jia(3,2)
#取字典里的值用get()
print(operator['/'](3,2))
这里省去了if的判断环节,只是把值告诉字典,然后去取值做运算。 也可以增加一个函数:
from __future__ import division
jia = lambda x,y : x + y
jian = lambda x,y : x - y
cheng = lambda x,y : x * y
chu = lambda x,y : x / y
#定义一个字典
operator = {'+' : jia, '-' : jian,'*' : cheng, '/' : chu}
#(operator['+'](3,2)) 等同于 jia(3,2)
#print(operator['/'](3,2))
#取字典里的值用get()
def f(x,o,y):
print(operator.get(o)(x,y))
f(3,'/',2)
当然按照{1:case1,2:case2}.get(x,lambda *arg,**key:)() 这个形式,还可以改为:
from __future__ import division
jia = lambda x,y : x + y
jian = lambda x,y : x - y
cheng = lambda x,y : x * y
chu = lambda x,y : x / y
def f(x,o,y):
print({'+' : jia, '-' : jian,'*' : cheng, '/' : chu}.get(o)(x,y))
f(3,'/',2)
当然当然,还可以简化为这样:
from __future__ import division
x = 3
y = 2
operator = '/'
result = {
'+' : x + y,
'-' : x - y,
'*' : x * y,
'/' : x / y
}
print(result.get(operator))
当然当然当然当然,还可以这样简化:
from __future__ import division
def f(x,o,y):
print({'+' : x+y, '-' : x-y,'*' : x*y, '/' : x/y}.get(o))
f(3,'/',2)