def lite(a,b,c):
#...
def big(func): # func = callable()
#...
#main
big(lite(1,2,3))
как это сделать?
как передать функцию с параметрами другой функции?Python: передача функции с параметрами в качестве параметра
def lite(a,b,c):
#...
def big(func): # func = callable()
#...
#main
big(lite(1,2,3))
как это сделать?
как передать функцию с параметрами другой функции?Python: передача функции с параметрами в качестве параметра
Почему бы не сделать:
big(lite, (1, 2, 3))
?
Тогда вы можете сделать:
def big(func, args):
func(*args)
import functools
#main
big(functools.partial(lite, 1,2,3))
Не так, вы передаете в большой возвращаемого значения функции облегченной().
Вы должны сделать что-то вроде:
def lite(a, b, c):
return a + b + c
def big(func, arg):
print func(arg[0], arg[1], arg[2])
big(lite, (1, 2, 3))
Это то, что нужно для распаковки кортежей - см. Мой ответ. – Skilldrick
Аналогичная проблема обычно решается двумя способами:
Смотрите пример:
#!/usr/bin/python
def lite(a,b,c):
return "%r,%r,%r" % (a,b,c)
def big(func): # func = callable()
print func()
def big2(func): # func = callable with one argument
print func("anything")
def main():
param1 = 1
param2 = 2
param3 = 3
big2(lambda x: lite(param1, param2, param3))
def lite_with_params():
return lite(param1,param2,param3)
big(lite_with_params)
main()
вы можете даже сделать 'большой (облегченный, 1, 2, 3) и' Защиту большой (Func, * арг): FUNC (* арг) ' –
Это приятно, если вы можете (и хотите) изменить 'big', а' lite' имеет фиксированную подпись. Но часто один или оба являются внешними. В этом случае метод Тедди ('partial') гораздо более общий. – Mark