zoukankan      html  css  js  c++  java
  • Python——变量的作用域

    原创声明:本文系博主原创文章,转载及引用请注明出处。

    1. 在编程语言中,变量都有一定的作用域,用来限定其生命周期,且不同类型的变量作用域不同。

      在Python中解释器引用变量的顺序(优先级)为:当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量 

    2. 在局部作用域中引用外部变量时(即比当前局部作用域块更大时),如果需要修改局部作用域以外的变量,需要显式声明为global变量。

      在python3中引入了nonlocal关键字,用来区分全局变量和非局部变量,即有: global > nonlocal > local

      1) global关键字用来在函数或其他局部作用域中使用全局变量。但是如果不修改全局变量也可以不使用global关键字;

      2) nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量。

    3. 在python2中要实现nonlocal的功能,参考:https://blog.csdn.net/chaoguo1234/article/details/81278013

    4. 函数定义了本地作用域,而模块定义的是全局作用域。如果想要在函数内定义全局作用域,需要加上global修饰符。

    5. 变量名解析:LEGB原则

      当在函数中使用未认证的变量名时,Python搜索4个作用域:

      • L:本地作用域,函数内部声明但没有使用global的变量;
      • E:上一层结构中def或者lambda的本地作用域;
      • G:全局作用域,函数中使用global声明的变量或在模块层声明的变量
      • B:内置作用域,即python的内置类和函数等。

      并且在第一处能够找到这个变量名的地方停下来。如果变量名在整个的搜索过程中都没有找到,Python就会报错。

      补充说明:

        上面的变量规则只适用于简单对象,当出现引用对象的属性时,则有另一套搜索规则:属性引用搜索一个或多个对象,

        而不是作用域,并且有可能涉及到所谓的"继承"。

    6. python中在模块层面定义的变量(无需global修饰),如果在函数中没有再定义同名变量,可以在函数中当做全局变量使用。

    【参考资料】

    1. https://www.cnblogs.com/z360519549/p/5172020.html
    2. https://blog.csdn.net/chaoguo1234/article/details/81278013
    3. https://blog.csdn.net/carolzhang8406/article/details/6855525
    4. https://www.cnblogs.com/summer-cool/p/3884595.html
  • 相关阅读:
    CSS选择器
    CSS框模型
    AJAX
    HTML 表单
    二叉树
    词嵌入、word2vec
    双向、深层循环神经网络
    20201012----每天都在进步吗?
    20201012--环境搭建
    20201011--记录一下
  • 原文地址:https://www.cnblogs.com/oddcat/p/11224454.html
Copyright © 2011-2022 走看看