无论是以类为基础的面相对象编程,还是单纯函数内部变量的定义,变量的作用域始终是Python学习中一个必须理解掌握的环节,下面我们从局部变量和全局变量开始全面解析Python中变量的作用域,需要的朋友可以参考下
理解全局变量和局部变量
1.定义的函数内部的变量名如果是第一次出现, 且在=符号前,那么就可以认为是被定义为局部变量。在这种情况下,不论全局变量中是否用到该变量名,函数中使用的都是局部变量。例如:
num = 100 def func(): num = 123 print num func() 12345
输出结果是123。说明函数中定义的变量名num是一个局部变量,覆盖全局变量。再例如:
num = 100 def func(): num += 100 print num func() 12345
输出结果是:UnboundLocalError: local variable ‘num’ referenced before assignment。提示错误:局部变量num在赋值前被应用。也就是说该变量没有定义就被错误使用。由此再次证明这里定义的是一个局部变量,而不是全局变量。
2.函数内部的变量名如果是第一次出现,且出现在=符号后面,且在之前已被定义为全局变量,则这里将引用全局变量。例如:
num = 100 def func(): x = num + 100 print x func() 12345
输出结果是200。如果变量名num在之前没有被定义为全局变量,则会出现错误提示:变量没有定义。例如:
def func(): x = num + 100 print x func() 1234
输出结果是:NameError: global name ‘num’ is not defined。
3.函数中使用某个变量时,如果该变量名既有全局变量也有局部变量,则默认使用局部变量。例如:
num = 100 def func(): num = 200 x = num + 100 prinx x func() 123456
输出结果是300。
4.在函数中将某个变量定义为全局变量时需要使用关键字global。例如:
num = 100 def func(): global num num = 200 print num func() print num 1234567
输出结果分别是200和200。这说明函数中的变量名n