Python: передача функции с параметрами как параметр [дубликат]

Этот вопрос уже имеет ответ здесь:

def lite(a,b,c):
    #...

def big(func): # func = callable()
    #...


#main
big(lite(1,2,3))

как сделать это?
каким образом передать функцию с параметрами к другой функции?

23
задан Mike 27 February 2010 в 13:04
поделиться

4 ответа

Почему бы не сделать:

big(lite, (1, 2, 3))

?

Тогда вы можете сделать:

def big(func, args):
    func(*args)
38
ответ дан 29 November 2019 в 01:40
поделиться
import functools

#main
big(functools.partial(lite, 1,2,3))
7
ответ дан 29 November 2019 в 01:40
поделиться

Подобная проблема обычно решается двумя способами:

  1. С помощью лямбды… но тогда переданная функция будет ожидать один аргумент, такой большой ( ) необходимо изменить
  2. Именованные функции вызывают исходные функции с аргументами. Обратите внимание, что такая функция может быть объявлена ​​внутри другой функции, а аргументами могут быть переменные.

См. Пример:

#!/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()
3
ответ дан 29 November 2019 в 01:40
поделиться

Не таким образом, вы передаете большое значение, возвращаемое функцией lite ().

Вы должны сделать что-то вроде:

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))
0
ответ дан 29 November 2019 в 01:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: