Объем функций hello
и hi
совершенно различен. У них нет общих переменных.
Обратите внимание, что результатом вызова hi(x,y)
является некоторый объект. Вы сохраняете этот объект с именем good
в функции hello
.
Переменная с именем good
в hello
является другой переменной, не связанной с переменной с именем good
в функции hi
.
Они пишутся одинаково, но существуют в разных пространствах имен. Чтобы доказать это, измените написание переменной good
в одной из двух функций, вы увидите, что все по-прежнему работает.
Edit. Продолжение: «так что мне делать, если я хочу использовать результат функции hi
в функции hello
?»
Ничего необычного. Посмотрите на hello
внимательно.
def hello(x,y):
fordf150 = hi(y,x)
"then do somethings,and use the variable 'fordf150'."
return something
def hi( ix, iy ):
"compute some value, good."
return good
Некоторые сценарии оценивают hello( 2, 3)
.
Python создает новое пространство имен для оценки hello
.
В hello
, x
привязан к объекту 2
. Привязка выполняется в положении заказа.
В hello
, y
привязан к объекту 3
.
В hello
Python оценивает первый оператор, fordf150 = hi( y, x )
, y
равен 3, x
равен 2.
а. Python создает новое пространство имен для оценки hi
.
б. В hi
, ix
привязан к объекту 3
. Привязка выполняется по порядку позиций.
с. В hi
, iy
привязан к объекту 2
.
д. В hi
что-то происходит, и good
привязан к какому-либо объекту, скажем 3.1415926
.
е. В hi
выполняется return
; идентифицируя объект как значение для hi
. В этом случае объект называется good
и является объектом 3.1415926
.
ф. Пространство имен hi
отбрасывается. good
, ix
и iy
исчезают. Однако объект (3.1415926
) остается значением оценки hi
.
В hello
Python завершает первый оператор, fordf150 = hi( y, x )
, y
равен 3, x
равен 2. Значение hi
равно 3.1415926
.
а. fordf150
привязан к объекту, созданному путем оценки hi
, 3.1415926
.
В hello
Python переходит к другим операторам.
В какой-то момент something
привязан к объекту, скажем, 2.718281828459045
.
В hello
выполняется return
; идентифицируя объект как значение для hello
. В этом случае объект называется something
и является объектом 2.718281828459045
.
Пространство имен отбрасывается. fordf150
и something
исчезают, как и x
и y
. Однако объект (2.718281828459045
) остается значением вычисления hello
.
Какая бы программа или скрипт не назывался hello
, получает ответ.