找不到定义变量

时间:2015-02-18 08:06:19

标签: python

我对Python很陌生并试图创建几个不同的定义,这些定义相互运行并引用每个定义中的不同变量。有人可以帮助我,为什么这个代码不能像这样工作,我需要改变什么才能使它工作?

根据我的想法,它定义了变量testingtest1定义中的含义,然后它会在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
>>> 

2 个答案:

答案 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()

请注意,只有在执行写访问的例程中才需要将变量声明为全局变量,因为否则将在过程出口处分配和丢失具有相同名称的局部变量。