fangpsh's blog

Python Switch 多次调用小问题

大家都知道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。