python中的函数指针

t3r*_*rse 2 python function-pointers

我想做类似以下的事情:

def add(a, b):
    #some code

def subtract(a, b):
    #some code

operations = [add, subtract]
operations[0]( 5,3)
operations[1](5,3)
Run Code Online (Sandbox Code Playgroud)

在python中,是否可以分配类似函数指针的东西?

Joe*_*ley 17

你试过吗?你写的东西和写的一样.函数是Python中的第一类对象.


Ned*_*der 6

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)
Run Code Online (Sandbox Code Playgroud)

或查找表:

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)
Run Code Online (Sandbox Code Playgroud)

您甚至可以获取绑定到对象的方法:

o = MyObject()
f = o.method
f(1, 2) # same as o.method(1, 2)
Run Code Online (Sandbox Code Playgroud)