5

我想做类似以下的事情:

def add(a, b):
    #some code

def subtract(a, b):
    #some code

operations = [add, subtract]
operations[0]( 5,3)
operations[1](5,3)

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

4

3 回答 3

22

你试过了吗?你写的和写的完全一样。函数是 Python 中的一等对象。

于 2008-11-21T01:30:33.960 回答
7

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)
于 2008-11-21T02:14:12.483 回答
1

请注意,大多数 Python 运算符已经在operator模块中具有等效功能。

于 2009-03-31T05:23:18.690 回答