[Python] Работа с функциями, у которых есть параметры
От: na1s  
Дата: 10.06.10 13:13
Оценка:
Как можно работать с функциями, мне надо сохранить в список некоторые функции, а потом их вызвать.
Т.е. хотелось бы сохранить функцию с введенными параметрами, а потом вызвать.

Как это могло бы выглядеть:
l = []
l.append(run(1)) # это сохранение фунции c параметром 1, а не сохранение результата вызова
for command in l:
l()
Можно ли как-то сделать подобное в Python?
Re: [Python] Работа с функциями, у которых есть параметры
От: neFormal Россия  
Дата: 10.06.10 13:21
Оценка: 8 (2)
Здравствуйте, na1s, Вы писали:

N>Как это могло бы выглядеть:

N>l = []
N>l.append(run(1)) # это сохранение фунции c параметром 1, а не сохранение результата вызова
N>for command in l:
N> l()
N>Можно ли как-то сделать подобное в Python?

можно сохранить раздельно:
l = []
l.append( (run, (1,) ) )
for command in l:
    command[0](*command[1])
...coding for chaos...
Re: [Python] Работа с функциями, у которых есть параметры
От: Гест Украина https://zverok.github.io
Дата: 10.06.10 13:22
Оценка:
Здравствуйте, na1s, Вы писали:

N>Как можно работать с функциями, мне надо сохранить в список некоторые функции, а потом их вызвать.

N>Т.е. хотелось бы сохранить функцию с введенными параметрами, а потом вызвать.

N>Как это могло бы выглядеть:

N>l = []
N>l.append(run(1)) # это сохранение фунции c параметром 1, а не сохранение результата вызова
N>for command in l:
N> l()
N>Можно ли как-то сделать подобное в Python?

Это называется currying. В питоне есть, например, модуль functional, который этот currying не слишком грациозно, но предоставляет.
Re: [Python] Работа с функциями, у которых есть параметры
От: Temoto  
Дата: 10.06.10 13:23
Оценка:
N>Как можно работать с функциями, мне надо сохранить в список некоторые функции, а потом их вызвать.
N>Т.е. хотелось бы сохранить функцию с введенными параметрами, а потом вызвать.

N>Как это могло бы выглядеть:

N>l = []
N>l.append(run(1)) # это сохранение фунции c параметром 1, а не сохранение результата вызова
N>for command in l:
N> l()
N>Можно ли как-то сделать подобное в Python?

Python все выражения вычисляет энергично, поэтому вам нужно явно создать функцию без аргументов, которая вернёт нужный результат, а потом вызвать её.

L = []
L.append(lambda:run(1))

Может быть, ещё будет интересно применить functools.partial:

L.append(partial(run, 1))


for command in L:
command()

Можно сохранять функции и параметры отдельно, не создавая промежуточной нулларной функции:

L.append( (run, (1,), {}) ) # в список L добавили один элемент — тупл (func, args, kwargs), где args это тупл из одного элемента 1. Как видите, когда аргументы строят "на лету", а не берут из каких-то готовых имён, это выглядит более уродливо, чем промежуточная функция.

for func, args, kwargs in L:
func(*args, **kwargs)
Re: [Python] Работа с функциями, у которых есть параметры
От: Daevaorn Россия  
Дата: 10.06.10 13:24
Оценка:
Здравствуйте, na1s, Вы писали:

N>Как можно работать с функциями, мне надо сохранить в список некоторые функции, а потом их вызвать.

N>Т.е. хотелось бы сохранить функцию с введенными параметрами, а потом вызвать.

N>Как это могло бы выглядеть:

N>l = []
N>l.append(run(1)) # это сохранение фунции c параметром 1, а не сохранение результата вызова
N>for command in l:
N> l()
N>Можно ли как-то сделать подобное в Python?

Да, можно. Это называется -- карринг. Делается либо средствами языка, либо с помощью хелпера partial -- http://docs.python.org/library/functools.html#functools.partial
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.