本文共 1107 字,大约阅读时间需要 3 分钟。
在被调用函数内赋值的变元和变量,处于该函数的“局部作用域”。在所有函数之外赋值的变量,属于“全局作用域”。处于局部作用域的变量,被称为“局部变量”。处于全局作用域的变量,被称为“全局变量”。一个变量必是其中一种,不能既是局部的又是全局的。
可以将“作用域”看成是变量的容器。当作用域被销毁时,所有保存在该作用域内的变量的值就被丢弃了。只有一个全局作用域,它是在程序开始时创建的。如果程序终止,全局作用域就被销毁,它的所有变量就被丢弃了。否则,下次你运行程序的时候,这些变量就会记住它们上次运行时的值。一个函数被调用时,就创建了一个局部作用域。在这个函数内赋值的所有变量,存在于该局部作用域内。该函数返回时,这个局部作用域就被销毁了,这些变量就丢失了。下次调用这个函数,局部变量不会记得该函数上次被调用时它们保存的值。 作用域很重要,理由如下:全局变量不能引用局部作用域的变量。
import sys, randomdef spam(): egg = 123spam()print(egg)'''egg是spam函数的局部变量,调用完后就销毁了。所以会报错。Traceback (most recent call last): File "py\dz.py", line 25, inprint(egg)NameError: name 'egg' is not defined'''
局部作用域不能使用其他局部作用域的局部变量。
def spam(): egg = 99 bacon() print(egg)def bacon(): ham = 101 egg = 0spam()#输出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
完毕!
转载地址:http://wefqb.baihongyu.com/