Что такое функция внутри функции в django/python
Я хочу знать, какова основная идея функции внутри функции в djanggo?, что-то вроде этого примера.
def partition_by_mod(base):
def func(n):
return n % base
return staticmethod(func)
когда я вызываю эту функцию следующим образом test = partition_by_mod(8), поэтому мне интересно, откуда берется "n".
спасибо ~
что такое основная идея функция внутри функции в djanggo?
Это то же самое, что и функция, определенная в любом другом месте, но она доступна по имени только внутри внешней функции, и она закрывает переменные (такие как base
) области видимости, в которой она определена, так что они косвенно доступны тому, кто вызывает функцию. Ваш конкретный пример можно заменить на лямбду:
def partition_by_mod(base):
return staticmethod(lambda n: n % base)
когда я вызываю эту функцию следующим образом test = partition_by_mod(8), поэтому мне интересно, откуда берется "n".
Аргумент предоставляется кодом, который фактически вызывает функцию. Обратите особое внимание на то, что
staticmethod(func)
не вызывает func
, а передает func
себя в качестве аргумента, предположительно с мыслью, что staticmethod
вызовет его. Иногда это называют "функцией обратного вызова". Вызов функции можно распознать по списку аргументов в круглых скобках, который требуется даже при нулевых аргументах. Если и когда staticmethod
вызовет функцию, staticmethod
обязан предоставить необходимый аргумент.