Каков синтаксис для ввода функции def с несколькими вложенными функциями? - PullRequest
0 голосов
/ 22 января 2019

Я изучаю Python прямо сейчас, и я просто пытаюсь разобраться со всеми вариантами синтаксиса.

В настоящее время единственное, что я не могу найти в Google, это что делать, если я по какой-то причине хочу определить функцию, которая содержит несколько других определений.

Хотя я понимаю, что делать, если внутри большего определения есть только 1 определение (val = f () (3,4) возвращает 7, если вы исключите второе определение ниже), я не знаю, как правильно использовать функция ниже.

Если это возможно, каков синтаксис функции def с произвольным количеством определенных функций внутри нее?


Код:

def f():
    def x(a,b):
        return a + b
    return x
    def y(c,d):
        return c + d
    return y

 val = f()(3,4)(5,6)
 print(val)

Я ожидал, что приведенное выше вернет либо (7,11), либо 11. Однако он возвращает 'int object not callable'

1 Ответ

0 голосов
/ 22 января 2019

Когда вы пишете val = f()(3,4)(5,6), вы хотите, чтобы f возвращал функцию, которая также возвращает функцию; сравните с более простым многострочным вызовом:

t1 = f()
t2 = t1(3,4)
val = t2(5,6)

Функция f определяет и возвращает , также должна определить и вернуть функцию, которая может быть вызвана с 2 аргументами. Итак, как сказал @jonrsharpe, вам нужно больше вложенности:

def f():
    def x(a, b):
        def y(c, d):
            return c + d
        return y
    return x

Теперь f() создает функцию с именем x, а f()(3,4) создает функцию с именем y (игнорируя ее аргументы 3 и 4 в процессе), а f()(3,4)(5,6) оценивает (в конечном итоге) до 5 + 6.

...