Как можно работать с функциями, мне надо сохранить в список некоторые функции, а потом их вызвать.
Т.е. хотелось бы сохранить функцию с введенными параметрами, а потом вызвать.
Как это могло бы выглядеть:
l = []
l.append(run(1)) # это сохранение фунции c параметром 1, а не сохранение результата вызова
for command in l:
l()
Можно ли как-то сделать подобное в Python?
Re: [Python] Работа с функциями, у которых есть параметры
Здравствуйте, 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] Работа с функциями, у которых есть параметры
Здравствуйте, 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] Работа с функциями, у которых есть параметры
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] Работа с функциями, у которых есть параметры
Здравствуйте, na1s, Вы писали:
N>Как можно работать с функциями, мне надо сохранить в список некоторые функции, а потом их вызвать. N>Т.е. хотелось бы сохранить функцию с введенными параметрами, а потом вызвать.
N>Как это могло бы выглядеть: N>l = [] N>l.append(run(1)) # это сохранение фунции c параметром 1, а не сохранение результата вызова N>for command in l: N> l() N>Можно ли как-то сделать подобное в Python?