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设计模式编程中建造者模式的使用
Mar 02 Python
python中数据爬虫requests库使用方法详解
Feb 11 Python
对Python3中bytes和HexStr之间的转换详解
Dec 04 Python
利用python如何在前程无忧高效投递简历
May 07 Python
Python队列RabbitMQ 使用方法实例记录
Aug 05 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
Nov 06 Python
Tensorflow实现部分参数梯度更新操作
Jan 23 Python
Python3 字典dictionary入门基础附实例
Feb 10 Python
Python列表倒序输出及其效率详解
Mar 04 Python
Python PyQt5整理介绍
Apr 01 Python
python爬虫调度器用法及实例代码
Nov 30 Python
python pygame 愤怒的小鸟游戏示例代码
Feb 25 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
PHP 和 XML: 使用expat函数(二)
2006/10/09 PHP
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
PHP实现文件下载详解
2014/11/27 PHP
php操作xml入门之xml标签的属性分析
2015/01/23 PHP
php实现按天数、星期、月份查询的搜索框
2016/05/02 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
php5.x禁用eval的操作方法
2018/10/19 PHP
php实现每日签到功能
2018/11/29 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
JS event使用方法详解
2008/04/28 Javascript
Lazy Load 延迟加载图片的 jQuery 插件
2010/02/06 Javascript
JavaScript中的this实例分析
2011/04/28 Javascript
jQuery 计算iframe 窗口大小的方法
2014/05/13 Javascript
javascript返回顶部的按钮实现方法
2016/01/09 Javascript
Vue.js实现拖放效果的实例
2016/09/30 Javascript
2种简单的js倒计时方式
2017/10/20 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
使用puppeteer破解极验的滑动验证码
2018/02/24 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
Vue Components 数字键盘的实现
2019/09/18 Javascript
python获取外网IP并发邮件的实现方法
2017/10/01 Python
Python实现简单文本字符串处理的方法
2018/01/22 Python
python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决
2019/04/29 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
2019/08/09 Python
pytorch获取vgg16-feature层输出的例子
2019/08/20 Python
python 实现波浪滤镜特效
2020/12/02 Python
selenium携带cookies模拟登陆CSDN的实现
2021/01/19 Python
德国狗狗用品在线商店:Schecker
2017/03/17 全球购物
大学本科生的个人自我评价
2013/12/09 职场文书
绿色学校实施方案
2014/03/31 职场文书
党的作风建设心得体会
2014/10/22 职场文书
公安个人四风问题对照检查及整改措施
2014/10/28 职场文书
新教师2015年度工作总结
2015/07/22 职场文书
2015年防灾减灾工作总结
2015/07/24 职场文书