Python 函数引用全局变量

一、LEGB规则:

python对四个命名空间分别作一个字典(键值对),以判断变量属于哪个命名空间。

1.L :局部命名空间。
2.E :外部函数命名空间。
3.G :全局命名空间。
4.B :内置模块命名空间

二、函数内使用外部变量的问题

(1) 单纯引用全局变量

  1.  a = 5
     def func():
        b = a +1
        print(a)    #直接引用全局变量a,无需global
     func()
    

(2) 对全局变量赋值

函数内出现赋值语句,则作为局部变量

  1. c = 999
    def func():
      c = 5
      print(id(c))
    func()
    
    print(id(c))  
    
    #1785653297520
    #1785654340048    
    #地址改变了,函数内的变量c是局部变量  
    
  2. a = 5
    def func():
      global a
      a = a + 1 
     #函数内出现赋值语句,则函数内a是新创建的局部变量,但是后面引用局部变量a未赋值,为防止此类问题,则需要global
    

(3) 创建全局变量同名的局部变量

  1.    a = 5
       def func():
         a = 6  
         print(a)     #实际上创建局部变量a,覆盖全局变量a,无需global
       func()
    
posted @ 2022-05-01 20:36  南唐周七呀  阅读(445)  评论(0)    收藏  举报