这里有新鲜出炉的 Python 入门, 程序狗速度看过来!
Python 编程语言
Python 是一种面向对象, 解释型计算机程序设计语言, 由 Guido van Rossum 于 1989 年底发明, 第一个公开发行版发行于 1991 年. Python 语法简洁而清晰, 具有丰富和强大的类库. 它常被昵称为胶水语言, 它能够把用其他语言制作的各种模块 (尤其是 C/C++) 很轻松地联结在一起.
本篇文章主要介绍了 python 中 Switch/Case 实现的示例代码, 小编觉得挺不错的, 现在分享给大家, 也给大家做个参考. 一起跟随小编过来看看吧
学习 Python 过程中, 发现没有 switch-case, 过去写 C 习惯用 Switch/Case 语句, 官方文档说通过 if-elif 实现. 所以不妨自己来实现 Switch/Case 功能.
使用 if...elif...elif...else 实现 switch/case
可以使用 if...elif...elif..else 序列来代替 switch/case 语句, 这是大家最容易想到的办法. 但是随着分支的增多和修改的频繁, 这种代替方式并不很好调试和维护.
方法一
通过字典实现
def foo(var):
return {
'a': 1,
'b': 2,
'c': 3,
}.get(var,'error') #'error'为默认返回值, 可自设置
方法二
通过匿名函数实现
def foo(var,x):
return {
'a': lambda x: x+1,
'b': lambda x: x+2,
'c': lambda x: x+3,
}[var](x)
方法三
通过定义类实现
参考 Brian Beck 通过类来实现 Swich-case
#This class provides the functionality we want.You only need to look at#this
if you want to know how this works.It only needs to be defined#once,
no need to muck around with its internals.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#The following example is pretty much the exact use -
case of a dictionary,
#but is included
for its simplicity.Note that you can include statements# in each suite.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 ():
#
default,
could also just omit condition or 'if True'print "something else!"#No need to
break here,
it 'll stop anyway
# break is used here to look as much like the real thing as possible, but
# elif is generally just as good and more concise.
# Empty suites are considered syntax errors, so intentional fall-throughs
# should contain 'pass '
c = 'z '
for case in switch(c):
if case('a '): pass # only necessary if the rest of the suite is empty
if case('b '): pass
# ...
if case('y '): pass
if case('z '):
print "c is lowercase!"
break
if case('A '): pass
# ...
if case('Z '):
print "c is uppercase!"
break
if case(): # default
print "I dunno what c was!"
# As suggested by Pierre Quentel, you can even expand upon the
# functionality of the classic '
case ' statement by matching multiple
# cases in a single shot. This greatly benefits operations such as the
# uppercase/lowercase example above:
import string
c = 'A '
for case in switch(c):
if case(*string.lowercase): # note the * for unpacking as arguments
print "c is lowercase!"
break
if case(*string.uppercase):
print "c is uppercase!"
break
if case(' ! ', ' ? ', '.'): # normal argument passing style also applies
print "c is a sentence terminator!"
break
if case(): # default
print "I dunno what c was!"
# Since Pierre's suggestion is backward - compatible with the original recipe,
#I have made the necessary modification to allow
for the above usage.
查看 Python 官方: PEP 3103-A Switch/Case Statement
发现其实实现 Switch Case 需要被判断的变量是可哈希的和可比较的, 这与 Python 倡导的灵活性有冲突. 在实现上, 优化不好做, 可能到最后最差的情况汇编出来跟 If Else 组是一样的. 所以 Python 没有支持.
来源: http://www.phperz.com/article/18/0131/360922.html