大家都知道Python 中没有Switch 关键词,如果写一堆if-elif-else 非常不美观,通常的做法是使用字典,今天遇到一个小问题,如下:
class Recource(object):
def do(self, provider, action):
return {
'aliyun':{
'create': self.__create__(),
'update': self.__update__(),
...
},
'aws': ...
}[provider][action]
写完测试一下,发现字典里面每个函数都会被执行一遍,发现自己傻逼了,但是一时不知道该如何解决,Google 下找到了解决方式: Pythonic switch within class,
class Recource(object):
def do(self, provider, action):
return {
'aliyun':{
- 'create': self.__create__(),
- 'update': self.__update__(),
+ 'create': lambda: self.__create__(),
+ 'update': lambda: self.__update__(),
...
},
'aws': ...
- }[provider][action]
+ }[provider][action]()
原来如此,lambda 定义一个匿名函数,这个对象指向具体函数对象的地址,类似jump table。
又一次面向Stack Overflow 编程 :P。