Python 未找到定义变量
我对Python比较陌生,尝试创建几个不同的定义,这些定义彼此运行并引用每个定义中的不同变量。有人能帮我解释一下为什么这段代码不能像这样工作,以及我需要做些什么才能让它工作 根据我的想法,它在Python 未找到定义变量,python,Python,我对Python比较陌生,尝试创建几个不同的定义,这些定义彼此运行并引用每个定义中的不同变量。有人能帮我解释一下为什么这段代码不能像这样工作,以及我需要做些什么才能让它工作 根据我的想法,它在test1定义中定义了变量testing是什么,然后它会在test2中提取变量,并在run\u this中运行 Python 2.7.9 (v2.7.9:648dcafa7e5f, Dec 10 2014, 10:10:46) [GCC 4.2.1 (Apple Inc. build 5666) (dot
test1
定义中定义了变量testing
是什么,然后它会在test2
中提取变量,并在run\u 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
>>>
Python 2.7.9(v2.7.9:648dcafa7e5f,2014年12月10日,10:10:46)
[GCC 4.2.1(苹果公司建造5666)(dot 3)]关于达尔文
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>def test1():
... 测试=1
...
>>>def test2():
... 打印测试
...
>>>def run_this():
... test1()
... test2()
...
>>>运行此()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“”,第3行,在此运行
test2中第2行的文件“”
NameError:未定义全局名称“测试”
>>>
您的测试
变量的作用域是test1()
。在Python中,函数中定义的变量是该函数的本地变量,其他函数或操作无法访问它们
当
test2()
尝试从名为testing
的变量打印时,它首先检查test2()中定义的变量。如果没有找到匹配项,Python会在脚本的其余部分查找匹配项——因为它是一种脚本语言,您可以在这两个函数之外定义测试
,在这种情况下,您将获得预期的行为。由于在全局范围内没有任何内容,Python会引发一个namererror
,让您知道它在test2()
中找不到任何名为testing
的内容您的testing
变量的范围是test1()
。在Python中,函数中定义的变量是该函数的本地变量,其他函数或操作无法访问它们
当test2()
尝试从名为testing
的变量打印时,它首先检查test2()中定义的变量。如果没有找到匹配项,Python会在脚本的其余部分查找匹配项——因为它是一种脚本语言,您可以在这两个函数之外定义测试
,在这种情况下,您将获得预期的行为。由于在全局范围内没有任何内容,Python会引发一个namererror
,让您知道它在test2()
中找不到任何名为testing
的内容。通过将testing更改为全局变量,您的代码可以轻松修复:
testing = 7
def test1():
gobal testing
testing = 5
def test2():
print(testing)
if __name__ = "__main__":
test1()
test2()
请注意,只有在执行写访问的例程中,才需要将变量声明为全局变量,因为否则将在过程退出时分配并丢失同名的局部变量。通过将测试更改为全局变量,可以轻松修复代码:
testing = 7
def test1():
gobal testing
testing = 5
def test2():
print(testing)
if __name__ = "__main__":
test1()
test2()
请注意,只有在执行写访问的例程中才需要将变量声明为全局变量,因为否则,具有相同名称的局部变量将被赋值并在过程退出时丢失。可能重复的可能重复,因此如果我将此脚本制作成一个模块,我是否可以像调用def test2()那样调用它:打印测试1。测试
?@double\u j-不太可能。看看这个问题及其最常见的答案,它是Python作用域规则的另一个很好的解释:@double_j-test1()
仍然是一个函数,test2()
仍然无法访问其中的变量。如果你在函数之外定义了测试
,它是可以访问的,但是应该尽可能避免全局变量。我现在明白了,我读了你提到的那篇文章,它更有意义!我只需要重新编写我的整个脚本…:/我完全认为定义的工作方式有点不同,但这就是为什么我仍在学习的原因。因此,如果我将此脚本制作成一个模块,那么我是否能够像def test2():print test1.testing那样调用它。看看这个问题及其最常见的答案,它是Python作用域规则的另一个很好的解释:@double_j-test1()
仍然是一个函数,test2()
仍然无法访问其中的变量。如果你在函数之外定义了测试
,它是可以访问的,但是应该尽可能避免全局变量。我现在明白了,我读了你提到的那篇文章,它更有意义!我只需要重新编写我的整个脚本…:/我完全认为定义有点不同,但这就是为什么我还在学习