Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 未找到定义变量_Python - Fatal编程技术网

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

我对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 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()
仍然无法访问其中的变量。如果你在函数之外定义了
测试
,它是可以访问的,但是应该尽可能避免全局变量。我现在明白了,我读了你提到的那篇文章,它更有意义!我只需要重新编写我的整个脚本…:/我完全认为定义有点不同,但这就是为什么我还在学习