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获取本机mac地址和ip地址的方法
Apr 29 Python
Python实现新浪博客备份的方法
Apr 27 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
Feb 13 Python
使用Django和Python创建Json response的方法
Mar 26 Python
python实现自主查询实时天气
Jun 22 Python
python3实现猜数字游戏
Dec 07 Python
python中 * 的用法详解
Jul 10 Python
手写一个python迭代器过程详解
Aug 27 Python
python安装scipy的步骤解析
Sep 28 Python
Python下使用Trackbar实现绘图板
Oct 27 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
Feb 20 Python
Python 中面向接口编程
May 20 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
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
2009/06/08 PHP
PHP三层结构(上) 简单三层结构
2010/07/04 PHP
解析php多线程下载远程多个文件
2013/06/25 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
2016/03/23 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
ThinkPHP防止重复提交表单的方法实例分析
2018/05/10 PHP
Laravel框架实现利用监听器进行sql语句记录功能
2018/06/06 PHP
使用PHPWord生成word文档的方法详解
2019/06/06 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
2019/10/10 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
javascript json2 使用方法
2010/03/16 Javascript
jQuery Mobile页面跳转后未加载外部JS原因分析及解决
2013/03/18 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
jquery简单图片切换显示效果实现方法
2015/01/14 Javascript
JavaScript表单验证的两种实现方法
2017/02/11 Javascript
Angular.js跨controller实现参数传递的两种方法
2017/02/20 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
template.js前端模板引擎使用详解
2017/10/10 Javascript
详解vue通过NGINX部署在子目录或者二级目录实践
2018/09/03 Javascript
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
jquery实现Ajax请求的几种常见方式总结
2019/05/28 jQuery
微信小程序实现吸顶效果
2020/01/08 Javascript
Python的动态重新封装的教程
2015/04/11 Python
Python的Django框架中的表单处理示例
2015/07/17 Python
78行Python代码实现现微信撤回消息功能
2018/07/26 Python
django解决跨域请求的问题
2018/11/11 Python
python实现QQ批量登录功能
2019/06/19 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
Python Numpy库datetime类型的处理详解
2019/07/13 Python
中医专业应届生求职信
2013/11/17 职场文书
年级组长自我鉴定
2014/02/22 职场文书
篮球社团活动总结
2014/06/27 职场文书
幼儿园家长安全责任书
2014/07/22 职场文书
好人好事演讲稿
2014/09/01 职场文书
2016年党员创先争优承诺书
2016/03/25 职场文书