小编F1r*_*yte的帖子

为什么python会以变量的方式运行?

我一直试图理解为什么python会以这种方式运行,在下面的代码块中.我做了我的研究,但找不到一个好的答案所以我来到这里看看是否有人可以指出我正确的方向或提供一个很好的澄清.我知道它与一些旧的ALGOL原理有关,但我不完全理解它.

var = 5

def func1():
    print(var)
func1()

def func2():
    var = 8
    print(var)
func2()

def func3():
    print(var)
    var = 8
func3()
Run Code Online (Sandbox Code Playgroud)

此代码的输出如下:

5
8
UnboundLocalError:赋值前引用的局部变量'var'

我理解为什么我们得到输出'5'和'8'.但是使用'func3()',我期待输出'5'.看起来,解释器认为我想在函数中打印局部'var'而不是全局'var'.所以它抛出了这个错误.

或者,如果在函数内部的某处定义了变量,则该函数将默认为局部变量,而不是具有相同名称的全局变量.

但是为什么python会这样表现呢?我不抱怨,我只是想了解一些事情......

我如何在函数中使用预定义的全局变量,然后在同一函数内定义一个具有相同名称的局部变量,而不更改全局变量的值?(当然是在python中)

在此先感谢大家.你是个很棒的人!:)

Edit_1:感谢每一个人给出了很好的答案.我完全理解在函数中使用预定义的全局变量是一个坏的和不切实际的想法,然后在同一个函数内定义一个具有相同名称的局部变量.我只是从理论的角度思考它,因为我在大学讲座中看到过它.XD我找不到一个用例,在这个用例中最好也是这样!

Edit_2:我已经阅读了PEP8,我知道明确比隐含更好.:) 这是真的.否则代码会混淆并导致错误.那个问题只是我试图理解的一些无用且不切实际的大学理论.

Edit_3:现在我完全理解为什么会发生这种情况以及这里发生了什么.感谢Randall Valenciano将这个链接提供给一个能够很好地解释它的博客.

会发生什么是该函数被解释为一个整体,而不是一行一行.因此,在解释函数时,任何已定义变量的变量声明都会移动到函数的顶部.因此,当我们打印'var'时,该函数正在使用本地声明的变量,该变量尚未分配任何值,然后解释器会抱怨它并抛出错误.

再次感谢大家!:)你对我有很大的帮助!现在我终于明白了幕后发生了什么.

python python-3.x python-3.5 python-3.6

7
推荐指数
2
解决办法
223
查看次数

标签 统计

python ×1

python-3.5 ×1

python-3.6 ×1

python-3.x ×1