Проблема с определением переменной при вызове функции [дубликат]Python

Программы на Python
Anonymous
Проблема с определением переменной при вызове функции [дубликат]

Сообщение Anonymous »

Я читал книгу Аллена Дауни «Думайте, Python». Я читал о вызовах функций и диаграммах стека, а также о том, что если вы определяете переменную внутри функции, ее значение не будет запоминаться вне этой функции.
Я также понял все примеры приведены в книге в главе о функциях. Однако меня смутила следующая программа:

Код: Выделить всё

def k():
print(h)

def l():
h=1
k()

l()
При запуске появляется следующая ошибка:

Код: Выделить всё

NameError: name 'h' is not defined
Перед запуском я думал, что это будет работать так, как я понимаю: вызов l создает функциональный фрейм l, а h определяется в этом функциональном фрейме, затем k вызывается в том же кадре, и также создается кадр k, но поскольку переменная h уже определена в кадре, который был вызван k, у k не должно возникнуть проблем с печатью значения h.

Теперь, изучая этот код, я выдвинул гипотезу, что переменная, если она определена внутри функции, будет строго запоминаться только в этой же функции, а не даже в функции, вызываемой внутри нее.
Но это так. ошибочность доказана следующей программой:

Код: Выделить всё

def k(h):
print(h)

def l():
h=1
k(h)

l()
Это напечатает 1 правильно. Теперь я понимаю, что во втором примере функция h принимает 1 аргумент. Но значение этого аргумента по-прежнему присваивается переменной h в вызывающей его функции, как в примере 1. Но в одном случае оно помнит, что такое h, а в другом нет.

Пожалуйста, объясните с точки зрения того, что делает Python, никаких упрощений не требуется!


Подробнее здесь: https://stackoverflow.com/questions/790 ... ction-call

Вернуться в «Python»