English 中文(简体)
在Python中的函数指针
原标题:
  • 时间:2008-11-21 01:09:28
  •  标签:

我想做类似于以下的事情:

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模块中的等效函数。





相关问题
热门标签