我想做类似于以下的事情:
def add(a, b):
#some code
def subtract(a, b):
#some code
operations = [add, subtract]
operations[0]( 5,3)
operations[1](5,3)
在Python中,是否可以像函数指针那样赋值?
我想做类似于以下的事情:
def add(a, b):
#some code
def subtract(a, b):
#some code
operations = [add, subtract]
operations[0]( 5,3)
operations[1](5,3)
在Python中,是否可以像函数指针那样赋值?
你试过了吗?你写的东西按照写的方式完美运作。在Python中,函数是一等对象。
Python没有指针,但您的代码按照原样工作。函数是一等公民对象,分配到名称,并像任何其他值一样使用。
你可以用这个来实现策略模式,例如:
def the_simple_way(a, b):
# blah blah
def the_complicated_way(a, b):
# blah blah
def foo(way):
if way == complicated :
doit = the_complicated_way
else:
doit = the_simple_way
doit(a, b)
或查找表:
def do_add(a, b):
return a+b
def do_sub(a, b):
return a-b
handlers = {
add : do_add,
sub : do_sub,
}
print handlers[op](a, b)
你甚至可以获取绑定到对象的方法:
o = MyObject()
f = o.method
f(1, 2) # same as o.method(1, 2)
只需要简单说明一下,大部分的Python运算符都已经有了在operator模块中的等效函数。