Python的四种作用域及调用顺序

↑ 关注 + 星标 ~ 从此不迷路,后台回复【礼包】送你Python自学资料

作用域又可以被称为命名空间,指变量起作用的范围。Python变量作用域可以分为四种,分别为局部作用域、嵌套作用域、全局作用域、内置作用域。

作用域

英文

简写

局部作用域

Local

L

嵌套作用域

Enclosed

E

全局作用域

Global

G

内置作用域

Built-in

B

四种作用域中变量的调用顺序采取“就近原则”,即为 LEGB

局部作用域#

指某个函数内部的范围。每次执行函数时都会创建的新命名空间,同一函数不同时间运行其作用域相互独立,不同函数内部可以使用同一变量名。局部作用域内声明的变量名在函数外也可以使用,程序运行过程中两者互不干扰。

Copy`def myfun():    a = 0  # 局部变量    a += 1    print("myfun a = ", a)def myfun2():    a = [1, 2, 3] # 局部变量    a = [i + 1 for i in a]    print("myfun2  a = ", a)a = 'Hello Python'  # 此处a为全局变量myfun()myfun2()print("函数外 a = ", a)输出结果:myfun a =  1myfun2  a =  [2, 3, 4]函数外 a =  Hello Python` 

嵌套作用域#

嵌套一般是指一个函数嵌套另一个函数的情况,外层函数包含变量的作用范围称为嵌套作用域;
也可以指一个类中包含多个函数时的情况。

1Copy`# 1.函数嵌套:def myfun(i):    a = [1, 2, 3] #  a 所在范围为嵌套作用域    def add():        a.append(i)        return a    return addtest = myfun(4)print(test())输出结果:[1, 2, 3, 4]`  2 3Copy`# 2.类中包含多个函数class test:    b = 1    def __init__(self):        self.a = 0    def myfun2(self):        self.a += 1        print("a = ", self.a)        self.b += 1        print("b = ", self.b)test = test()test.myfun2()输出结果:a =  1b =  2` 

全局作用域#

全局作用域范围指的是在一个.py文件内部,在模块顶部声明即可成为全局作用域。
全局作用域中的变量在函数中一般是不可更改的,例如整数,字符等,但对于列表和字典来说可以更改。如想引用并改变全局变量,可使用global关键字。

1Copy`# 整数,字符串等不可更改a = 1  # a为全局变量def myfun():    a = 2  # 局部变量    a += 1    print("函数中 a = ", a)myfun()print("函数外 a = ", a)输出结果:函数中 a =  3函数外 a =  1`  2 3Copy`# 列表,元组等可更改a = [1, 2, 3]b = {'语文': 98, "数学": 101}def myfun():    a.append(4)    b.update({"英语": 103})    print("函数中 a = ", a)    print("函数中 b = ", b)myfun()print("函数外 a = ", a)print("函数外 b = ", b)输出结果:函数中 a =  [1, 2, 3, 4]函数中 b =  {'语文': 98, '数学': 101, '英语': 103}函数外 a =  [1, 2, 3, 4]函数外 b =  {'语文': 98, '数学': 101, '英语': 103}`  4 5Copy`# 利用global关键字 引用全局变量a = 1def myfun():    global a  # 使用a之前用global    a += 1    print("函数中 a = ", a)myfun()print("函数外 a = ", a)输出结果:函数中 a =  2函数外 a =  2` 

内置作用域#

内置作用域是python事先定义的内置模块,例如built-in 模块内的变量,程序启动之后由python虚拟机自动加载,在程序的任何地方都可以使用,例如print函数,随着解释器存在或消亡。

总结

python的四种所用域及其调用顺序,当使用某一变量时,首先在函数内部进行搜索(局部作用域 L),搜索不到便到上层函数或类中进行查找(嵌套作用域 E),再查找不到便到更上层模块中进行查找(全局作用域 G),还查找不到则进入预先定义的(内置作用域 B)中查找,查找不到报错。

作者: Kristine 出处:

https://www.cnblogs.com/wangxue574/p/12366748.html

免费福利

1

给大家发个福利吧,不要钱的那种~~~

2

追剧,还在付费去广告吗?来试试免费的吧~

3

极客卸载,还你干净电脑

猜你喜欢

1. Django 配置JWT认证方式

2.  Django ORM 查询表中某列字段值

  1. Django中的session的使用

喜欢就点个在看再走吧

本文分享自微信公众号 - BigYoung小站(bigyoungs)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

JS核心原理理解闭包

前置概念在正式看闭包之前,我们先来学习一下前置知识,那就是JS中的作用域,我们知道,在ES5之中,作用域分为两种:全局作用域和函数作用域,随着ES6的到来,新增了块级作用域,想更好的理解闭包,那么搞清楚作用域是首要条件全局作用域我们知道,对于变量而言,我们一般会分成两类:全局变量和局部变量,一般定义在最外围环境的为全局变量,定义在函数当中的为局部变量,在we

一篇文章带你了解JavaScript作用域

在JavaScript中,对象和函数也是变量。在JavaScript中,作用域是你可以访问的变量、对象和函数的集合。JavaScript有函数作用域:这个作用域在函数内变化。一、本地JavaScript变量一个变量声明在JavaScript函数内部,成为函数的局部变量。局部变量有局部作用域:它们只能在函数中访问。JS://codeherecann

为你解惑JS作用域和作用域链知识

原文链接:变量作用域一个变量的作用域(scope)是程序源代码中定义这个变量的区域。全局变量拥有全局作用域,在JavaScript代码中的任何地方都是可以访问的。然而在函数内声明的变量只能在函数体内访问,它们是局部变量,作用域是局部性的。函数参数也是局部变