python switch_Python中switch的实现

## {{{ http://code.activestate.com/recipes/410692/ (r8)

# 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.

## end of http://code.activestate.com/recipes/410692/ }}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值