Форум сайта python.su
2
Собственно изучаю Питон по книге Лутца, возникло пару вопросов
исходный код, как написано в книге:
def f1(): X = 88 def f2(): print(X+12) return f2 act = f1() act()
def f1(): X = 88 def f2(): print(X+12) return f2 f1()

def f1(): X = 88 def f2(): print(X+12) return X act = f1() act()
Отредактировано bs0d (Фев. 1, 2014 21:51:01)
Офлайн
2
час убил на понимание сего кода, видимо по своей же невнимательности
оказалось, что код
act = f1()
жестко… осознание сего приема придет не скоро, а в практике вообще не представляю где смогу энто применять
Офлайн
857
>>> def f1(): ... X = 88 ... def f2(): ... print(X + 12) ... return f2 ... >>> f1()() 100 >>>
Офлайн
2
py.user.next
мерсирую. такие варианты встречал в книге. но пока не совсем понял логику работы такой конструкции, в мозгу еще не отложилось
Офлайн
bs0d
если вызвать `f1()`, то она вернет `return f2`, т.е. имя функции написанной на 2 строчки выше, но НЕестественно, но эта строка f2 идет не как функция, а как переменная(python bleat the best), т.е если мы выведем f(), то у нас ничего не будет (т.к. мы не вызвали функцию, а лишь получили ее имя), далее просто для экономии строк пишем f2()().
вот так думаю понятнее будет
_f2 = f1() _f2()
Офлайн
19
мерсирую. такие варианты встречал в книге. но пока не совсем понял логику работы такой конструкции, в мозгу еще не отложилосьРазбирайтесь что такое декораторы и с чем их едят

Офлайн
857
PanovSergeyдекораторы - отдельная тема; в данном случае речь идёт про замыкания
Разбирайтесь что такое декораторы
bs0d
а в практике вообще не представляю где смогу энто применять
>>> def adder(n): ... return lambda x: n + x ... >>> add3 = adder(3) >>> add5 = adder(5) >>> >>> list(map(add3, [1, 5, 9])) [4, 8, 12] >>> list(map(add5, [1, 5, 9])) [6, 10, 14] >>>
Офлайн
19
декораторы - отдельная тема; в данном случае речь идёт про замыканиясогласен замыкание более правильно, просто декоратор как способ применения пришел первым в голову
Офлайн