Comments 2
Между прочим, прошу людей, глубоко понимающих семантику языка Python, разъяснить вопрос, возникающий в связи с реализацией на питоне седьмого способа. Буквально это можно сделать так:
def f (n1, n2):
global f
if n1 >= n2:
f = lambda n1, n2 : 0
print (n1)
f (n1+1, n2)
Это работающий код. Без оператора global
во второй строке он работать не будет, так как парадоксальным образом имя функции исходно не находится в её лексическом контексте. Мы получим сообщение об отсутствии значения у имени f
. Но как же тогда вообще возможен без оператора global
рекурсивный вызов в шестой строке? Ведь мы точно так же обращаемся в нём к имени f
?
Меня интересует именно объяснение этого обстоятельства с точки зрения семантики языка, а не то, как это реализовано.
Sign up to leave a comment.
Семь способов выхода из рекурсии