указатели на функции в питоне - PullRequest
2 голосов
/ 21 ноября 2008

Я хотел бы сделать что-то вроде следующего:

def add(a, b):
    #some code

def subtract(a, b):
    #some code

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

Можно ли в python назначить что-то вроде указателя на функцию?

Ответы [ 3 ]

17 голосов
/ 21 ноября 2008

Вы пробовали это? То, что вы написали, работает именно так, как написано. Функции являются первоклассными объектами в Python.

4 голосов
/ 21 ноября 2008

В 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)
1 голос
/ 31 марта 2009

Просто заметьте, что большинство операторов Python уже имеют эквивалентную функцию в модуле operator .

...