我是python的初学者并且有一个问题,对我来说非常困惑。 如果我先定义一个函数但在函数内我必须使用一个在下面另一个函数中定义的变量,我可以这样做吗?或者我如何将另一个函数的返回值导入函数? 例如:
def hello(x,y):
good=hi(iy,ix)
"then do somethings,and use the parameter'good'."
return something
def hi(iy,ix):
"code"
return good
答案 0 :(得分:5)
函数hello
和hi
的范围完全不同。他们没有任何共同的变数。
请注意,调用hi(x,y)
的结果是某个对象。您可以在函数good
中使用名称hello
保存该对象。
good
中名为hello
的变量是一个不同的变量,与函数good
中名为hi
的变量无关。
它们拼写相同,但存在于不同的命名空间中。为了证明这一点,在两个函数之一中更改good
变量的拼写,你会发现事情仍然有效。
编辑。后续行动:“那么如果我想在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
。
d。在hi
中,会发生某些事情并且good
绑定到某个对象,例如3.1415926
。
即在hi
中,执行return
;将对象标识为hi
的值。在这种情况下,对象由good
命名,并且是对象3.1415926
。
F。 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
的程序或脚本都可以得到答案。
答案 1 :(得分:3)
如果要从函数内部向全局命名空间定义变量,从而使其可以被此空间中的其他函数访问,则可以使用global关键字。这是一些例子
varA = 5 #A normal declaration of an integer in the main "global" namespace
def funcA():
print varA #This works, because the variable was defined in the global namespace
#and functions have read access to this.
def changeA():
varA = 2 #This however, defines a variable in the function's own namespace
#Because of this, it's not accessible by other functions.
#It has also replaced the global variable, though only inside this function
def newVar():
global varB #By using the global keyword, you assign this variable to the global namespace
varB = 5
def funcB():
print varB #Making it accessible to other functions
结论:函数中定义的变量保留在函数的命名空间中。它仍然可以访问全局命名空间以进行只读,除非使用全局关键字调用该变量。
全球这个词并不完全是全球性的,因为它最初可能看起来像。它实际上只是指向您正在使用的文件中最低命名空间的链接。无法在另一个模块中访问全局关键字。
作为一个温和的警告,一些人可能认为这不是“好习惯”。
答案 2 :(得分:2)
你的示例程序是有效的,因为'good'的两个实例是不同的变量(你碰巧两个变量都具有相同的名称)。以下代码完全相同:
def hello(x,y):
good=hi(iy,ix)
"then do somethings,and use the parameter'good'."
return something
def hi(iy,ix):
"code"
return great
答案 3 :(得分:2)
有关python范围规则的更多详细信息,请访问:
答案 4 :(得分:1)
“hello”函数不介意你调用尚未定义的“hi”函数,前提是你没有尝试实际使用“hello”函数,直到定义了这两个函数之后