Python Switch Case三种实现方法代码实例


Posted in Python onJune 18, 2020

Python没有switch语句,只能通过模拟来对应实现:

方法一:使用dictionary

**values = {
value1: do_some_stuff1,
value2: do_some_stuff2,
...
valueN: do_some_stuffN,
}
values.get(var, do_default_stuff)()

根据需求可以自行更改参数内容,灵活运用

def add(x,y): 
  print x+y 
def minus(x,y): 
  print x-y 
def multiply(x,y): 
  print x*y 
def div(x,y): 
  print x/y 
def fun_case_list(key,arg1,arg2):
  operator = {
  '+':add,
  '-':minus,
  '*':multiply,
  '/':div
  }
  if operator.has_key(key):
    return operator.get(key)(arg1,arg2)
  else:
    return 'No [%s] case in dic'%key #or do other func
if __name__ == "__main__":
  fun_case_list('*',3,5)
  fun_case_list('l',3,4)

或者你可以自己造一个类来实现:

class switch_case(object):
  def case_to_function(self,case,arg1,arg2):
    func_name = 'case_func_'+str(case)
    try:
      method = getattr(self,func_name)
      return method(arg1,arg2)
    except AttributeError:
      return 'No func found in case list,do default action here'
  def case_func_add(self,arg1,arg2):
    temp = arg1 + arg2
    return temp
  def case_func_minus(self,arg1,arg2):
    temp = arg1 - arg2
    return temp
  def case_func_multiply(self,arg1,arg2):
    temp = arg1 * arg2
    return temp
  def case_func_div(self,arg1,arg2):
    temp = arg1 / arg2
    return temp
func = 'minus'
case = switch_case()
print case.case_to_function(func,2,5)


#或者是构造属性去送参数,看个人喜好
class switch_case(object):
  def __init__(self, case, arg1, arg2):
    self.case = str(case)
    self.arg1 = arg1
    self.arg2 = arg2
  def case_to_function(self):
    func_name = 'case_func_'+str(self.case)
    try:
      method = getattr(self,func_name)
      return method()
    except AttributeError:
      return 'No func found in case list,do default action here'
    
  def case_func_add(self):
    temp = self.arg1 + self.arg2
    return temp
  def case_func_minus(self):
    temp = self.arg1 - self.arg2
    return temp
  def case_func_multiply(self):
    temp = self.arg1 * self.arg2
    return temp
  def case_func_div(self):
    temp = self.arg1 / self.arg2
    return temp

func = 'minxus'
case = switch_case(func,2,5)
print case.case_to_function()

方法二:使用lambda

result = {
'a': lambda x: x * 5,
'b': lambda x: x + 7,
'c': lambda x: x - 2
}[value](x)

方法三:Brian Beck提供了一个类 switch 来实现switch的功能

class switch(object):
  def __init__(self, value):
    self.value = value
    self.fall = False
  def __iter__(self):
    """Return the match method once, then stop"""
    yield self.match
    raise StopIteration
  def match(self, *args):
    """Indicate whether or not to enter a case suite"""
    if self.fall or not args:
      return True
    elif self.value in args: # changed for v1.5, see below
      self.fall = True
      return True
    else:
      return False

v = 'two'
for case in switch(v):
  if case('one'):
    print 1
    break
  if case('two'):
    print 2
    break
  if case('ten'):
    print 10
    break
  if case('eleven'):
    print 11
    break
  if case(): # default, could also just omit condition or 'if True'
    print "something else!"
    # No need to break here, it'll stop anyway

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python批量导出导入MySQL用户的方法
Nov 15 Python
安装Python的web.py框架并从hello world开始编程
Apr 25 Python
python从sqlite读取并显示数据的方法
May 08 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
May 24 Python
Python排序搜索基本算法之希尔排序实例分析
Dec 09 Python
Python爬取附近餐馆信息代码示例
Dec 09 Python
python matplotlib 注释文本箭头简单代码示例
Jan 08 Python
Python决策树和随机森林算法实例详解
Jan 30 Python
Django 视图层(view)的使用
Nov 09 Python
Python sklearn KFold 生成交叉验证数据集的方法
Dec 11 Python
使用Python下载抖音各大V视频的思路详解
Feb 06 Python
使用Python的开发框架Brownie部署以太坊智能合约
May 28 Python
Python3开发环境搭建详细教程
Jun 18 #Python
Python collections.defaultdict模块用法详解
Jun 18 #Python
python实现批量命名照片
Jun 18 #Python
pandas之分组groupby()的使用整理与总结
Jun 18 #Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
Jun 18 #Python
Python调用shell cmd方法代码示例解析
Jun 18 #Python
Python如何自动获取目标网站最新通知
Jun 18 #Python
You might like
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
基于PHP对XML的操作详解
2013/06/07 PHP
php查询mssql出现乱码的解决方法
2014/12/29 PHP
Yii基于数组和对象的Model查询技巧实例详解
2015/12/28 PHP
thinkPHP内置字符串截取函数用法详解
2016/11/15 PHP
PHP CURL与java http使用方法详解
2018/01/26 PHP
PHP面向对象类型约束用法分析
2019/06/12 PHP
jquery动态改变onclick属性导致失效的问题解决方法
2013/12/04 Javascript
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
javascript中mouseover、mouseout使用详解
2015/07/19 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
3种不同的ContextMenu右键菜单实现代码
2016/11/03 Javascript
Javascript 使用ajax与C#获取文件大小实例详解
2017/01/13 Javascript
nodejs中sleep功能实现暂停几秒的方法
2017/07/12 NodeJs
限时抢购-倒计时的完整实例(分享)
2017/09/17 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
vue服务端渲染缓存应用详解
2018/09/12 Javascript
使用FormData实现上传多个文件
2018/12/04 Javascript
稍微学一下Vue的数据响应式(Vue2及Vue3区别)
2019/11/21 Javascript
谈谈我在vue-cli3中用预渲染遇到的坑
2020/04/22 Javascript
python自动格式化json文件的方法
2015/03/11 Python
Python3.2中Print函数用法实例详解
2015/05/19 Python
python 简单的多线程链接实现代码
2016/08/28 Python
Python实现发送QQ邮件的封装
2017/07/14 Python
python绘制直线的方法
2018/06/30 Python
python url 参数修改方法
2018/12/26 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
Keras中的多分类损失函数用法categorical_crossentropy
2020/06/11 Python
从python读取sql的实例方法
2020/07/21 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
2021/01/30 Python
基于HTML5 Canvas:字符串,路径,背景,图片的详解
2013/05/09 HTML / CSS
预备党员思想汇报1000字
2014/10/07 职场文书
人事任命通知
2015/04/20 职场文书
2019教师的学习计划
2019/06/25 职场文书
2019请假条的基本格式及范文!
2019/07/05 职场文书