我对Python很陌生并试图创建几个不同的定义,这些定义相互运行并引用每个定义中的不同变量。有人可以帮助我,为什么这个代码不能像这样工作,我需要改变什么才能使它工作?
根据我的想法,它定义了变量testing
在test1
定义中的含义,然后它会在test2
中提取并在run_this
中运行。 ..
Python 2.7.9 (v2.7.9:648dcafa7e5f, Dec 10 2014, 10:10:46)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def test1():
... testing = 1
...
>>> def test2():
... print testing
...
>>> def run_this():
... test1()
... test2()
...
>>> run_this()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in run_this
File "<stdin>", line 2, in test2
NameError: global name 'testing' is not defined
>>>
答案 0 :(得分:4)
您的testing
变量的范围限定为test1()
。在Python中,函数内部定义的变量是该函数的本地变量 - 没有其他函数或操作可以访问它们。
当test2()
尝试从名为testing
的变量进行打印时,它首先检查test2()
中定义的变量。如果找不到匹配项,Python会在脚本的其余部分查找匹配项 - 因为它是一种脚本语言,您可以在两个函数之外定义testing
,在这种情况下,您可以#&# 39; d得到你期待的行为。由于全局范围内没有任何内容,Python会引发NameError
,让您知道它无法在testing
内找到任何名为test2()
的内容。
答案 1 :(得分:1)
通过将测试更改为全局变量,可以轻松修复代码:
testing = 7
def test1():
gobal testing
testing = 5
def test2():
print(testing)
if __name__ = "__main__":
test1()
test2()
请注意,只有在执行写访问的例程中才需要将变量声明为全局变量,因为否则将在过程出口处分配和丢失具有相同名称的局部变量。