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 相关文章推荐
Django静态资源URL STATIC_ROOT的配置方法
Nov 08 Python
在Python中操作日期和时间之gmtime()方法的使用
May 22 Python
Python标准库笔记struct模块的使用
Feb 22 Python
对命令行模式与python交互模式介绍
May 12 Python
python中plot实现即时数据动态显示方法
Jun 22 Python
python+flask实现API的方法
Nov 21 Python
Python3.7 新特性之dataclass装饰器
May 27 Python
python实现两个dict合并与计算操作示例
Jul 01 Python
python打印直角三角形与等腰三角形实例代码
Oct 20 Python
解决springboot yml配置 logging.level 报错问题
Feb 21 Python
Python reversed反转序列并生成可迭代对象
Oct 22 Python
深度学习小工程练习之垃圾分类详解
Apr 14 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
抓取YAHOO股票报价的类
2009/05/15 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
微信access_token的获取开发示例
2015/04/16 PHP
php打造智能化的柱状图程序,用于报表等
2015/06/19 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
2016/01/12 PHP
PHP使用http_build_query()构造URL字符串的方法
2016/04/02 PHP
php无法连接mysql数据库的正确解决方法
2016/07/01 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
2013/03/29 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
ListBox实现上移,下移,左移,右移的简单实例
2014/02/13 Javascript
jQuery实现加入购物车飞入动画效果
2015/03/14 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
2015/12/09 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
2018/01/30 Javascript
Angular HMR(热模块替换)功能实现方法
2018/04/04 Javascript
vue-cli项目无法用本机IP访问的解决方法
2018/09/20 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
2020/04/24 Javascript
Vue自定义全局弹窗组件操作
2020/08/11 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
python去掉字符串中重复字符的方法
2014/02/27 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
python实现石头剪刀布程序
2021/01/20 Python
tensorflow使用range_input_producer多线程读取数据实例
2020/01/20 Python
介绍一下Make? 为什么使用make
2016/07/31 面试题
Python面试题集
2012/03/08 面试题
工程概预算专业毕业生求职信
2013/10/04 职场文书
物业管理计划书
2014/01/10 职场文书
图书馆志愿者活动总结
2014/06/27 职场文书
小学教研工作总结2015
2015/05/13 职场文书
《赵州桥》教学反思
2016/02/17 职场文书
python实现简易名片管理系统
2021/04/11 Python