前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python中变量的作用域

Python中变量的作用域

作者头像
py3study
发布2020-01-19 17:29:49
1.1K0
发布2020-01-19 17:29:49
举报
文章被收录于专栏:python3

一、变量作用域的含义

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

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

代码语言:javascript
复制
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,

代码语言:javascript
复制
a = 1
def n():
    global a
    print(a)
    a = 123
    print(a)
n()
结果:
1
123        

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

四、哪些情况适用变量的作用域
对于模块,类,函数里出现的变量就要注意了,它们会引入新的作用域,在这里如果内部
作用域声明了变量,那么就用内部变量的值,内部如果没有声明,就会使用外部作用域的值
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/05/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档