浅谈python中的全局变量和局部变量~

在被调用函数内赋值的变元和变量,处于该函数的“局部作用域”。在所有函数之外赋值的变量,属于“全局作用域”。处于局部作用域的变量,被称为“局部变量”。处于全局作用域的变量,被称为“全局变量”。一个变量必是其中一种,不能既是局部的又是全局的。
可以将“作用域”看成是变量的容器。当作用域被销毁时,所有保存在该作用域内的变量的值就被丢弃了。只有一个全局作用域,它是在程序开始时创建的。如果程序终止,全局作用域就被销毁,它的所有变量就被丢弃了。否则,下次你运行程序的时候,这些变量就会记住它们上次运行时的值。一个函数被调用时,就创建了一个局部作用域。在这个函数内赋值的所有变量,存在于该局部作用域内。该函数返回时,这个局部作用域就被销毁了,这些变量就丢失了。下次调用这个函数,局部变量不会记得该函数上次被调用时它们保存的值。
作用域很重要,理由如下:

  • 全局作用域中的代码不能使用任何局部变量;
  • 但是,局部作用域可以访问全局变量;
  • 一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量。
  • 如果在不同的作用域中,你可以用相同的名字命名不同的变量。也就是说,可以有一个名为spam 的局部变量,和一个名为spam 的全局变量。(不建议)

全局变量不能引用局部作用域的变量。

import sys, random
def spam():
    egg = 123
spam()
print(egg)
'''egg是spam函数的局部变量,调用完后就销毁了。所以会报错。
Traceback (most recent call last):
  File "py\dz.py", line 25, in <module>
    print(egg)
NameError: name 'egg' is not defined'''

局部作用域不能使用其他局部作用域的局部变量。

def spam():
    egg = 99
    bacon()
    print(egg)

def bacon():
    ham = 101
    egg = 0

spam()
#输出99

全局变量可以在局部作用域中读取。

def spam():
    print(egg)
egg = 42    #全局变量
spam()
print(egg)
#输出42 42

使用global语句让局部作用域对全局变量进行写的操作。
(不用global而直接在局部作用域对全局变量进行写的操作会报错)

def spam():
    global egg
    egg = 'spam'
egg = 'global'
spam()
print(egg)    #输出spam

完毕!

猜你喜欢

转载自blog.csdn.net/codedz/article/details/81182968