Python实现类似switch...case功能

最近在使用Python单元测试框架构思自动化测试,在不段的重构与修改中,发现了大量的if...else之类的语法,有没有什么好的方式使Python具有C/C#/JAVA等的switch功能呢?

在不断的查找和试验中,发现了这个:http://code.activestate.com/recipes/410692/,并在自己的代码中大量的应用,哈哈,下面来看下吧:

下面的类实现了我们想要的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 = ‘ten‘
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(): # 默认
        print "something else!"
时间: 2024-10-14 04:18:42

Python实现类似switch...case功能的相关文章

[EXCEL]实现类似Switch case的函数功能

[EXCEL]实现类似Switch case的函数功能 如果你就10种商品的话还好说,再多就不划算了. 假设你"商品1"的价格是"价格1", 那你就在B1里入 =vlookup(A1,{"商品1","价格1";"商品2","价格2";"商品3","价格3";..."商品10","价格10"},2,0) 注意:

Python | 基础系列 ·?Python为什么没有switch/case语句?

与我之前使用的所有语言都不同,Python没有switch/case语句.为了达到这种分支语句的效果,一般方法是使用字典映射: def numbers_to_strings(argument): switcher = { 0: "zero", 1: "one", 2: "two", } return switcher.get(argument, "nothing") 这段代码的作用相当于: function(argument)

数据字典+匿名委托模拟switch/case功能

基本思想每个case的选择值作为键,处理过程做成函数委托存放进数据字典.用的时候根据之调用.下面上代码 封装的FuncSwitcher类 using System; using System.Collections.Generic; namespace Test {     class FuncSwitcher<T>     {         int count;         Dictionary<T, Delegate> FuncGather;         Delega

使用shell和python分别实现简单菜单功能--打印当前系统状态信息

哥哥我又回来啦,哈哈··好久没来写博客了,现在慢慢把以前的都补上!最近在学习python,所以会更新一些学习中遇到的问题. 今天的内容是用python实现之前学习shell的时候写的一个简单脚本的功能:选择对应的菜单项,打印当前系统的状态信息. 不罗嗦了,上代码: #!/bin/bash   User () {        echo "用户登录记录:"        echo "`last`" }   Ifcfg () {         echo "本

python技巧 switch case语句

不同于C语言和SHELL,python中没有switch case语句,关于为什么没有,官方的解释是这样的 使用Python模拟实现的方法: def switch_if(fun, x, y):    if fun == 'add':        return x + y    elif fun == 'sub':        return x - y    elif fun == 'mul':        return x * y    elif fun == 'div':       

python用字典实现switch..case类似的函数调用

python中没有swich..case,若要实现一样的功能,又不想用if..elif来实现,可以充分利用字典进行实现 主要是想要通过不同的key调用不同的方法,在学习过程中,发现不管输入的key是什么,只要字典中存在输出内容,每次都会输出,这跟自己需要的功能有出入. 通过调试后,发现问题主要出现在key值对应的value的方法名有没有带()有很大的关系,如下: 不管bb中的number填写的是多少,总是会输出123          如果把cs()改为cs,那么只有在调用2的时候才会输出123

python如何实现像shell中的case功能

我们知道在shell脚本里是支持case语句,当位置参数为空时,会提示我们怎么使用脚本 那么在python怎么实现呢?也使用case吗? python里不支持case语句,但是也有实现case的方法. 这里我们来讲讲getopt模块 介绍说是解析命令行操作 下面是getopt格式: getopt.getopt(args, shortopts, longopts=[]) args指的是当前脚本接收的参数,它是一个列表,可以通过sys.argv获得 shortopts 是短参数 啥是短参数啊? 类似

Python笔记:替代case语句的字典和匿名函数(lambda)

在linux的shell中我们习惯使用case语句来做分支处理,然而Python中却省略了这个函数,经过多方查找,发现其实case语句在C语言中是通过查对应的hash表,来进行跳转的.在Python中我们可以通过三种方法来实现这种功能.1.字典:2.lambda:3.switch类. 1.字典 dictCase={'case1':func1,'case2':func2....'caseN':funcN} #注意字典中对应的是函数名,不要圆括号. 在调用的时候使用字典的get函数来实现defaul

python 中无switch(写了几个函数代替switch)

字典的常用用途之一代替switch 在C/C++/Java语言中,有个很方便的函数switch,比如: 复制代码代码如下: public class test {            public static void main(String[] args) {          String s = "C";          switch (s){          case "A":               System.out.println(&qu