python中的变量的作用_Python中的变量作用域

python中变量作用域包括:

L (Local) 局部作用域,函数内部声明但没有使用global的变量

E (Enclosing) 闭包函数外的函数中,def或者lambda的本地作用域

G (Global) 全局作用域,函数中使用global声明的变量或在模块层声明的变量

B (Built-in) 内建作用域,python的内置类和函数等

当在函数中使用未认证的变量名时,将依照L->E->G->B的顺序搜索。

Python除了def/class/lambda 外,其他如: if/elif/else/  try/except  for/while并不能改变其作用域。定义在他们之内的变量,外部还是可以访问。

1.变量在函数内部第一次出现,且在=左边,则为局部变量,作用在函数内部。

1 num = 100

2 deffunc():3 num = 200 #局部变量

4 print(num)5

6 func() #输出200

7 print(num) #输出100

1 num = 100

2 deffunc():3 num = num + 200 #报错UnboundLocalError: local variable 'num' referenced before assignment,说明num是局部变量,在赋值前就被引用了

4 print(num)5

6 func()

2.变量在函数内部第一次出现是在=右边,或作为函数参数,且之前已经定义了全局变量,那这里就是对全局变量的引用。

1 num = 100

2 deffunc():3 new = num + 200

4 print(new)5

6 func() #输出300

7 print(num) #输出100

1 num = 100

2 deffunc():3 print(num)4

5 func() #输出100

3.如果需要在函数内部引用并修改全局变量,则需使用global关键字。

1 num = 100

2 deffunc():3 globalnum4 num = 'abc'

5 print(num)6

7 func() #输出abc

8 print(num) #输出abc

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

1 #利用闭包返回一个计数器函数,每次调用它返回递增整数

2 defcreateCounter():3 i =04 defcounter():5 nonlocal i6 i += 1

7 returni8 returncounter9

10

11 #测试:

12 counterA = createCounter() #返回counter()代码块及变量i=1

13 print(counterA(), counterA(), counterA(), counterA(), counterA()) #1 2 3 4 5 每次执行counterA()时,就是执行counter()代码块,改变i的值

14 counterB = createCounter() #返回counter()代码块及变量i=1

15 if [counterB(), counterB(), counterB(), counterB()] == [1, 2, 3, 4]:16 print('测试通过!')17 else:18 print('测试失败!')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

欧拉公式——真正的宇宙第一公式

来源:数学中国欧拉公式是数学里最令人着迷的公式之一,它将数学里最重要的几个常数联系到了一起:两个超越数:自然对数的底e,圆周率π;两个单位:虚数单位i和自然数的单位1,以及数学里常…

SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件

我们这一一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件。然后再使用阿里巴巴提供的开源连接池druid,这个连接池的好处我就不说了,集合了所有连接池的好处,并且还提供了监…

python提取部分字符串三参数_python3 字符串属性(三)

maketrans 和 translate的用法(配合使用)下面是python的英文用法解释maketrans(x, yNone, zNone, /)Return a translation table usable for str.translate().If there is only one argument, it must be a dictionary mapping Unicodeordinals (integers) or characters to Un…

java实现qq抢红包_Java实现抢红包功用

用多线程模仿多人一起抢红包。服务端将玩家发出的红包保存在一个行列里,然后用Job守时将红包信息推送给玩家。每一批玩家的抢红包恳求,其实操作的都是从行列中弹出的第一个红包元素,但当时的红包数量为空的时分,主动弹出下一个红包…

芯片里面100多亿个晶体管是如何安装上去的?

来源:金属加工如今随着芯片制程的不断提升,芯片中可以有100多亿个晶体管,如此之多的晶体管,究竟是如何安上去的呢?1当芯片被不停地放大,里面宛如一座巨大的城市。这是一个Top-down View 的SEM照片&#xff…

[CEOI2008] order

题目描述 有N个工作,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来完成,你可以通过购买或租用机器来完成。 现在给出这些参数,求最大利润 输入输出格式 输入格式: 第一行给出 N…

response.end后抛了异常_(七)异常处理

(七)异常处理异常异常的体系结构java.lang.Throwable|-----java.lang.Error:一般不便携针对性的代码进行处理|-----java.lang.Exception:可以进行异常的处理|-----编译时异常(checked|-----IOException|-----FileNotFoundException|-----Clas…

java xy x y_为什么该语句在Java中不起作用x ^ = y ^ = x ^ = y;

小编典典您的陈述大致相当于这种扩展形式:x x ^ (y y ^ (x x ^ y));与C语言不同,在Java中,保证二进制运算符的左操作数在右操作数之前进行求值。评估如下:x x ^ (y y ^ (x x ^ y))x 1 ^ (y 2 ^ (x 1 ^ 2))x 1 ^ (y 2 ^…

AI+视频分析:实时监测无处不在的安全风险

来源丨Forbes作者丨Louis Columbus编译丨科技行者纵观2020年运营层面的诸多挑战,公共事业企业已经意识到对其所运营的物理及网络安全体系进行360度全方位审视的重要意义。最近,由Gartner发布的调查报告显示,94%的北美CIO认为,对偏…

大数据第一期

一 、大数据的技术体系 有几个部分组成: 六层 数据可视化 (Cboard , Echart) 五层 数据分析(数据仓库(Hive),数据挖掘(SparkStreming),OLAP&…

python 绘图的背景颜色不要_matplotlib自定义添加 “哆啦A梦”背景图,这个操作真牛逼!...

为什么需要加星标?由于微信公众号出现了 “乱序” 排列的状况,也就是说:文章不会按照 “时间顺序” 推送给你。那么朋友们就不能第一时间,收到我的干货。因此希望您抽出一分钟,完成如下三步。数据分析与统计学之美原创…

台积电2nm工艺重大突破!

来源:万物智能视界根据最新报道,台积电已经在2nm工艺上取得一项重大的内部突破,虽未披露细节,但是据此乐观预计,2nm工艺有望在2023年下半年进行风险性试产,2024年就能步入量产阶段。台积电还表示&#xff0…

png文件合并_png格式图片和jpg格式图片有什么区别?

两个格式的图片群文件有一定的相似之处,png是无损压缩,可以在PS中重新编辑。.jpg格式是一种压缩的图片文件,不能再次编辑,而且在解析度上也是不如.png格式。具体介绍如下:1、png是无损压缩,png即可移植网络…

sql 列集合

STUFF((SELECT ,CAST( TYZ_Bh as varchar(10)) FROM #1 where 片区划分江东 for xml path()),1,1,) 转载于:https://www.cnblogs.com/kunlunmountain/p/8796499.html

java获取s3对象url_java-如何通过SDK设置S3对象的内容类型?

我正在尝试使用AWS Api设置多个对象的内容类型,并向它们添加’content-encoding:gzip’标头.这是我这样做的代码:for (S3ObjectSummary summary : objs.getObjectSummaries() ){String key summary.getKey();if (! key.endsWith(".gz"))conti…

python环境变量的配置_python基础教程-第一讲-带你进入python的世界

python是一门非常流行的语言,在前段时间网上流传的地产大佬潘石屹宣布要开始学习Python编程,这着实让python又火了一把,但确实反映出python的火热程度 。在2019年12月的世界编程语言排行榜中,python排名第三。2019年12月语言排行榜…

python 多分类情感词典_基于情感词典的文本情感分类

基于情感词典的文本情感分类传统的基于情感词典的文本情感分类,是对人的记忆和判断思维的最简单的模拟,如上图。我们首先通过学习来记忆一些基本词汇,如否定词语有“不”,积极词语有“喜欢”、“爱”,消极词语有“讨厌…

java单终端登陆_配置终端服务单一登录

配置终端服务单一登录配置终端服务单一登录单一登录是一种身份验证方法,允许具有域帐户的用户使用密码或智能卡登录一次,然后,不再要求其提供凭据即可访问远程服务器。若要在终端服务中实现单一登录功能,请确保满足下列要求&#…

Mybatis逆向工程的pojo实现序列化接口代码

情景如下,这两天在做一个分布式的项目,使用了Alibaba的dubbo作为通信工具,zookeeper作为register,由于dubbo是基于socket协议的,所以在进行pojo传输的时候报了异常,因为pojo没有实现序列化接口,…

重磅!2020年全球高被引科学家名单出炉!

来源:科睿唯安、青塔英国伦敦时间11月18日,科睿唯安公布了2020年度“高被引科学家”名单。入榜这份备受期待的名单的自然科学家和社会科学家均发表了多篇高被引论文, 其被引频次位于同学科前1%,彰显了他们在同行之中的重要学术影响…