Python 全局/局部变量

标签 python global-variables local-variables

为什么这段代码有效:

var = 0

def func(num):
    print num
    var = 1
    if num != 0:
        func(num-1)

func(10)

但是这个给出了一个“赋值前引用的局部变量‘var’”错误:

var = 0

def func(num):
    print num
    var = var
    if num != 0:
        func(num-1)

func(10)

最佳答案

因为在第一段代码中,您创建了一个局部变量 var 并使用了它的值,而在第二段代码中,您使用的是局部变量 var,没有定义它。

所以,如果你想让你的第二个函数工作,你需要声明:-

global var

在使用 var 之前的函数中。

def func(num):
    print num
    var = 1  <--  # You create a local variable
    if num != 0:
        func(num-1)

而在这段代码中:

def func(num):
    print num
    var = var <--- # You are using the local variable on RHS without defining it
    if num != 0:
        func(num-1)

更新:-

但是,根据@Tim 的评论,您不应在函数中使用global 变量。而是在使用变量之前定义变量,以便在 local scope 中使用它。通常,您应该尝试将变量的范围限制local,甚至在local 命名空间limit局部变量的范围,因为这样你的代码会更容易理解。

您增加变量的范围越多,它被不需要使用的外部源使用的机会就越大。

关于Python 全局/局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13091357/

相关文章:

c# - 静态方法中的变量共享

python - 有没有办法在 Python 中指定 reduce() 累加器?

python - 为什么我的 winfo_screenwidth() 和 winfo_screenwidth() 得到一些奇怪的数字? Tkinter

python - 使用OpenGL位图字体时是否可以获取字符的宽度?

c++ - 为什么我们使用预处理器指令来定义变量?

javascript - 嵌套函数可以访问它们的范围 "above"...但是它们在哪里定义有关系吗?

python - 如何知道 python 脚本是否使用解释器的 -m 选项运行?

python - 在python中访问全局队列对象

javascript - 具有 ID 的 DOM 树元素是否成为全局属性?

c++ - 如何使用指针从不同的函数访问局部变量?