Как строка 3 вообще выполняется, хотя функция two() определена ниже one(), что делает ее вне области видимости?!
def one():
temp = "I am Aditya"
return two
def two(temp):
return "Hello "+temp
x = one
print(x()("Akshay"))
Выход : Привет, Акшай
Если вы вызовете one() после определения two(), вы не увидите никаких ошибок, потому что two будут доступны из глобальной области видимости. Однако, если вы вызовете one() между двумя определениями (т. е. перед определением two()), вы получите NameError, потому что two() еще не существует.
Вы хотели написать return two(temp)?
Отвечает ли это на ваш вопрос? Разница между областью действия модуля и областью действия функции
Извините, я разместил неполный вопрос. Но я до сих пор не понимаю, как вывод. Как функция two() возвращается даже после того, как она выходит за рамки?






Проблема
def one():
temp = "I am Aditya"
return two
Переменные, определенные в функции one(), содержатся только внутри области действия функции.
Когда python достигает строки return two, вы думаете, что python вызовет ошибку, потому что two не существует внутри области видимости функции.
Однако, если переменная не найдена, python затем поднимется на 1 уровень в глобальную область видимости, в которой существует объект two, и тогда все будет в порядке.
Если вы попытаетесь вызвать one() до определения def two(): , вы получите ошибку.
Если вы попытаетесь вызвать one() после того, как def two(): определено, нет проблем. Чтобы понять почему, читайте ниже.
Объяснение фона
В питоне все является объектом. Функция — это «объект», переменная temp — тоже объект класса str и т. д.
def two(temp):
return "Hello "+temp
if __name__ == '__main__':
print(two)
print(two('sam'))
Если вы запустите код, вы увидите это
<function two at 0x10ace2020>
Hello sam
[Finished in 51ms]
Объект two является функцией. Использование print() на объекте покажет вам указатель ссылки на этот объект.
Вы должны использовать круглые скобки two() для выполнения функции. Затем вы выполните код для возврата Hello sam
Чтобы ответить на ваш вопрос, вам нужно более глубокое понимание того, как работает python. Надеюсь, ты понял. Ваше здоровье :)
Вы многое мне прояснили... Большое спасибо!
Ни один из этих кодов не выполняется, поскольку вы не вызываете ни одну из функций. Вот почему нет ошибки.