最近,我在群里答疑的时候,经常碰到,小伙伴,再变量,缩进,参数,方面使用错误,导致程序运行不来。
今天,打算自己写一篇。
Python 变量作用域,和生命周期。
彻底弄懂变量该怎么使用。
变量的使用,有作用域区别,也有生命周期的区别。
python能够影响变量作用域的代码段是def、class、lamda。
def scopeTest(): localValur = 6 print(localValur)scopeTest()# print(localValur) #去除注释这里会报错,因为localValur是本地变量
输出结果:
6
去掉注释的结果:
6Traceback (most recent call last): File "D:/PythonDemo/test--/cycleTest.py", line 6, in <module> print(localValur) #去除注释这里会报错,因为localValur是本地变量NameError: name "localValur" is not defined
if/elif/else、try/except/finally、for/while 并不能涉及变量作用域的更改,也就是说他们的代码块中的变量,在外部也是可以访问的。
for i in range(3): localValur=i+1 passprint(i)print(localValur)
输出结果:
23
变量搜索路径是:本地变量->全局变量。
def scopeTest(): var = 6 print(var) # def innerFunc(): print(f"var:{var}") #注意这里 innerFunc()var = 5print(var)scopeTest()print(var)
输出结果:
56var:65
①def函数里面的变量,不能和文件里面的变量共用
②def函数可以嵌套使用,并且内部def函数,可以使用外部def函数的变量。
在我们在文件外面定义了一个变量,想通过函数操作是不是就没办法了?
value=100def scopeTest(): # global value value +=1print(value)scopeTest()print(value)
没进行声明的时候,是这样的输出结果:
100Traceback (most recent call last): File "D:/PythonDemo/test--/cycleTest.py", line 8, in <module> scopeTest() File "D:/PythonDemo/test--/cycleTest.py", line 5, in scopeTest value +=1UnboundLocalError: local variable "value" referenced before assignment
去掉注释:
value=100def scopeTest(): global value value +=1print(value)scopeTest()print(value)
这个时候,函数里面,修改的结果,也会影响到文件了,输出结果:
100101
先看案例:
创建一个类,之后把类里面的index值改成有序值
class classTest: index=0 arr=[]add=classTestfor i in range(5): add.index=iarr.append(add)for cc in arr: print(cc.index)
输出结果:
44444
为什么结果都会变成4?因为这里的变量add的数据类型是一个type类。
print(type(add))
<class "type">
数组里面的值是跟着 ‘type’ 对象改变的,add 的生命周期,从声明起就一直没有变化。
正确写法:
class classTest:index=0for i in range(5): add = classTest() print(type(add)) add.index=i arr.append(add)for cc in arr: print(cc.index)
显示结果:
<class "__main__.classTest"><class "__main__.classTest"><class "__main__.classTest"><class "__main__.classTest"><class "__main__.classTest">01234
这个时候,我们的结果就正确了。add的生命周期,在每一次创建的时候,就是一个新变量。
知识点虽然少,但是他的重要性,无可替代,很多看似解决不了的错误,依靠基础知识都可以解决。
很多博主都在推荐功能的使用,我更强调基础的训练。
推荐一本书,确保基础不掉队。
链接:https://pan.baidu.com/s/1YllgwFf3aMbZLHeNyoLkUQ
提取码:9vwh
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/121421.html
摘要:前言在开发技术和应用市场完全成熟的今天,有人希望深耕技术打造出自己的一片天地,也有人想广泛学习在程序员市场中游刃有余。而这本书上千的引用论文,给我指明了一条系统学习理论的明路。 ...
?前言 代码出现异常而报错再正常不过了,但为什么要处理异常? 由于异常的存在,代码运行时会出现一大堆的红色字体提示,对于程序员还好,见红色报错见多了习惯了,但如果你开发出来的东西要给别人看,那么不懂代码的人就会一脸懵逼,对产品的印象都不太好了。 比如我们经常简单网页丢失的情况,其实是就是网页代码执行时发生了异常,但有的网页还是很个性的,提示的信息可能是比较人性化的,比如CSDN你收藏的文章被后台删...
?前言 在Python写代码做项目时,我们往往需要对多个文件进行操作,在现在的源代码文件中怎么导入其他文件?怎么对其他文件进行操作?这都是经常要面临的问题,尤其是爬虫,爬到的数据放在哪里?用到的时候怎么调出来? 这就涉及到了Python的文件操作知识了,我们不可能永远都只会在一个源文件上做所有的操作,这也是必须掌握的一个知识板块。 与此同时,我的Python新手入门教程系列文章也已经快更新完了,欢...
摘要:标签不区分大小写,但推荐小写。标签可以嵌套,但不能交叉嵌套。标签也称为元素。比如行内标签亦可成行内元素。 ❤️HTML必备知识详解❤️ 第一部分:HTML框架简介...
阅读 3528·2021-11-24 09:38
阅读 3069·2021-11-15 11:37
阅读 756·2021-11-12 10:36
阅读 3496·2021-10-21 09:38
阅读 3204·2021-09-28 09:36
阅读 2385·2021-09-22 16:01
阅读 4825·2021-09-22 15:09
阅读 1187·2019-08-30 15:55