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

    一、变量作用域的含义

    变量的作用域说白了就是变量的值从哪里获取,或者说变量取值的地方

    我们在写代码过程中会用到很多变量,这些变量会出现在各种代码块中,有的出现在函数块里,有的在函数块外,例如:

    def n2():
    a = 1
    b = 2
    def n1():
    b = 3
    print(b)
    print(a)
    n1()
    n2()
    结果:
    3
    1

    在这个例子中,对于变量a,b的值,是应该先识别函数中的还是先识别函数外的呢,其实python内部在识别变量的值得时候是有顺序的,不是胡乱读取的,python内部对于获取变量的值是规定了一个顺序的。

    二、变量定义域顺序

    LEGB原则

    当你在代码里声明一个变量后,python会在LEGB四个作用域里搜索变量的值,它的搜索是有顺序的,第一步现在L也就是当前最里层局部作用域内找,如果没找到,第二步会跑到包含当前层的上一层作用域E里找,还没找到的话,第三部会去模块级的里面G里找,最后是去python里的固定模块里找。

    三、在不同作用域修改变量的值

     问题1.,既然对于变量的值的搜索有顺序,如果当前在全局里已经有变量a的值,我在局部域里想修改a的值,怎么修改呢?

     问题2.   如果变量是在上一层的函数里有值,我想在当前层函数内修改,又如何操作呢?

     问题1的解答:对于这种情况需要用到global,在重新给变量a赋值时,要先声明变量global a,

    a = 1
    def n():
    global a
    print(a)
    a = 123
    print(a)
    n()
    结果:
    1
    123

    问题2的解答:对于这种情况需要用到nonlocal,在重新给变量a赋值时,要先声明变量nonlocal a
    def n1():
    a = 1
    def n2():
    nonlocal a
    a = 2
    print(a)
    n2()
    print(a)
    n1()
    结果:
    2
    2

    四、哪些情况适用变量的作用域
    对于模块,类,函数里出现的变量就要注意了,它们会引入新的作用域,在这里如果内部
    作用域声明了变量,那么就用内部变量的值,内部如果没有声明,就会使用外部作用域的值
  • 相关阅读:
    UOJ.26.[IOI2014]Game(交互 思路)
    Good Bye 2016 F.New Year and Finding Roots(交互)
    Codeforces.835E.The penguin's game(交互 按位统计 二分)
    Codeforces.744B.Hongcow's Game(交互 按位统计)
    Codeforces.862D.Mahmoud and Ehab and the binary string(交互 二分)
    正睿OI 提高 Day1T3 ZYB玩字符串(DP)
    划分vlan
    2三层交换机实现vlan间的路由
    交换机基础-交换机远程telnet
    自动化运维环境的搭建问题处理
  • 原文地址:https://www.cnblogs.com/bianhao89757/p/10255764.html
Copyright © 2011-2022 走看看