python - 局部变量和全局变量的区别

标签 python

我对局部变量和全局变量之间的区别感到困惑。我知道全局变量是在函数外部声明的,而局部变量是在函数中声明的。但是,我想知道是否是这样:

def func(l):
    a = 0
    n = len(l)
    w = l[0]
    while...

我的问题是,在我作为示例编写的函数中,我知道 a 是局部变量,但其他两个呢?它们也是局部变量吗?

最佳答案

l 是您传递给函数的位置变量,w 也是如此,因为 w 的“副本” >l[0]

要拥有全局变量,您需要使用 global 关键字将该变量声明为全局变量。

x = 1
y = 2
def func(l):
    global x 
    x = 4 
    l = 5
    print("x is {0}, y is {1}".format(x,l))

func(y)
print("x is {0}, y is {1}".format(x,y))

返回:

x is 4, y is 5
x is 4, y is 2

请注意,x 现在已更改,但 y 没有更改?

请注意,列表很特殊,因为您不需要声明global关键字来添加或删除列表:

x = []

def func():
    x.append(3)
    print("x is {0}".format(x))

func()
print("x is {0}".format(x))

返回:

x is [3]
x is [3]

但是对列表的引用不是全局的,因为它们是列表的“副本”:

x = [3]
y = 1

def func():
    y = x[0]
    print("y is {0}".format(y))

func()
print("y is {0}".format(y))

返回:

y is 3
y is 1

另外,重新分配列表变量不是全局的:

x = [3]

def func():
    x = [2]
    print("x is {0}".format(x))

func()
print("x is {0}".format(x))

返回:

x is [2]
x is [3]

还要注意,总是有比声明全局变量更好的方法来做某事,因为随着代码的扩展,它会变得更加困惑。

关于python - 局部变量和全局变量的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45638126/

相关文章:

python模拟给定理论概率的实际发生次数

python - 无限递归 vs while True?

求矩阵转置的Python代码

python - 如何在 python Requests 库中使用基本的 HTTP 身份验证?

python - scipy.sparse 矩阵 : subtract row mean to nonzero elements

python - Django 信号与重写保存方法

python - Django - 使用多个数据库进行身份验证时出现全局名称错误

python - JSON 解码不适用于 Python 请求

python - Selenium WebDriverException 尝试保存屏幕截图时出错(Python 3.6)

python - Kivy Python - 带有部分的回调函数