@
ayanamist 见笑了,我也是python新手,只是对几个概念有耳闻而已。
楼主的情景该是猜到一些。是不是这样呢:在一个类里放很多函数,留一个函数作对外的接口,根据输入的不同分派一个不同的函数。回去想了下,使用反射也未尝不是一个好方法。要扩展,只需要往类里添加一个函数即可,比起一堆if else自是灵活的多了。
但是,这个类是不会变得很大呢。再者,用户输入那个“动态函数”名字要是Object的函数怎么办?虽不是什么大问题,估计也是会抛异常的。
前面说到lambda有点不准确,个人比较倾向于这样理解,即把可作为值传递的函数即lambda,或者说“匿名函数”。比如python允许这样
def func1(x):
return x+1
f=func1
f(1)
函数是一等公民,这一来就可以方便的传递行为。而原先的类可以简单的重构一下,只保留几个简单的接口:
class Dispatcher:
def __init__(self):
self.actions = {}
def bind(self, cmd, func):
self.action[cmd] = func
def exec(self, cmd, *args):
f = self.action[cmd]
if f: f(*args)
这一来就可以把那些函数挪到类的外面,以后要扩展的话,只要额外import一个文件即可。
d = Dispacher()
def hello():
# do something
d.bind("hello", hello)
def sayya():
# do something
d.bind("sayya", sayya)
ps: 其实Decorator也是python的一个函数式特征, @
chuangbo 同学的方法很pythonic,也很喜欢 :)