• 28-高级特性之作用域(2)


    1. 原理

    L:local,局部作用域,即函数中定义的变量;
    E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
    G:global,全局变量,就是模块级别定义的变量;
    B:built-in,系统固定模块里面的变量,比如int, bytearray等。
    搜索变量的优先级顺序依次是:局部作用域>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB。

    x = int(10) #python内置作用域B
    y = 2 #当前模块中的全局变量G
    def outfuction():
        outfx = 2 #外层作用域E
        def infunction():
            infx = 3 #局部作用域L
    

    2. 作用域产生的场景

    • 会引入新的作用域:module,class,def

    • 不会引入新的作用域:if,for,try--except

    • 注意:如果在外部引用局部变量,本质已经变成“在外部定义或者引用了一个新的全局变量”,如:

      x = 123 #全局G
      def test_1():
      x = 345 #局部变量x是L,屏蔽了作为G的x
      print(x) #345

      test_1() #345
      print(x, ' ') #123,这里的x是G

      def test_2():
      y = 456 #局部变量y
      print(y)

      test_2() #456
      y = 'haozhang' #等价于创造了新的全局变量y
      print(y) #haozhang
      test_2() #456

    在函数内部却要访问全局变量:用global

    x = 1
    def outfx():
        global x  #global改变了G区变量
        print(x)   #1
        x = 2
    outfx()
    print(x)   #2
    

    内部函数访问嵌套的父函数的变量:用nonlocal

    def outfx():
        x = 1 
        def infx():
            nonlocal x  #nonlocal改变了E区变量
            x = 2
            print(x) #2
        infx()
        print(x)    #2
    outfx()
    

    3. 参考文献:

    http://blog.csdn.net/ldzhangyx/article/details/49475159

  • 相关阅读:
    centos 7 安装ntp服务器
    centos 7编译安装nodejs 6.1
    修改IKAnalyzer配置
    Elasticsearch5.5.0安装head插件
    搭建ELASTICSEARCH实现中文分词搜索功能
    0426HTML基础:标签
    事件事件流
    纯css设置各行变色
    dom操作之元素的增删复制
    dom操作
  • 原文地址:https://www.cnblogs.com/LS1314/p/8504512.html
Copyright © 2020-2023  润新知