Почему приведенный ниже код Python не выдает ошибку?

Как строка 3 вообще выполняется, хотя функция two() определена ниже one(), что делает ее вне области видимости?!

def one():
    temp = "I am Aditya"
    return two
    
def two(temp):
        return "Hello "+temp

x = one
print(x()("Akshay"))

Выход : Привет, Акшай

Ни один из этих кодов не выполняется, поскольку вы не вызываете ни одну из функций. Вот почему нет ошибки.

AKX 12.05.2023 12:39

Если вы вызовете one() после определения two(), вы не увидите никаких ошибок, потому что two будут доступны из глобальной области видимости. Однако, если вы вызовете one() между двумя определениями (т. е. перед определением two()), вы получите NameError, потому что two() еще не существует.

DarkKnight 12.05.2023 12:45

Вы хотели написать return two(temp)?

Friedrich 12.05.2023 15:36

Отвечает ли это на ваш вопрос? Разница между областью действия модуля и областью действия функции

bad_coder - on strike 12.05.2023 17:22

Извините, я разместил неполный вопрос. Но я до сих пор не понимаю, как вывод. Как функция two() возвращается даже после того, как она выходит за рамки?

Aditya Mutharia 13.05.2023 09:38
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
5
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема

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. Надеюсь, ты понял. Ваше здоровье :)

Вы многое мне прояснили... Большое спасибо!

Aditya Mutharia 13.05.2023 09:41

Другие вопросы по теме