资讯专栏INFORMATION COLUMN

❤️Python面向对象保姆式教学❤️,新手速成精英之路!

Cc_2011 / 3083人阅读

前言

最近,我在群里答疑的时候,经常碰到,小伙伴,再变量,缩进,参数,方面使用错误,导致程序运行不来。

今天,打算自己写一篇。
Python 变量作用域,和生命周期。
彻底弄懂变量该怎么使用。

知识点

变量的使用,有作用域区别,也有生命周期的区别。

1.变量作用域

局部变量

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函数的变量。

全局变量 global 关键字

在我们在文件外面定义了一个变量,想通过函数操作是不是就没办法了?

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

变量生命周期

1. def函数内的变量,在函数结束后就失效了。


2. class类,变量的生命周期

先看案例:
创建一个类,之后把类里面的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

相关文章

  • 程序员这条路,选择深耕技术,还是全面学习比较好?

    摘要:前言在开发技术和应用市场完全成熟的今天,有人希望深耕技术打造出自己的一片天地,也有人想广泛学习在程序员市场中游刃有余。而这本书上千的引用论文,给我指明了一条系统学习理论的明路。 ...

    kun_jian 评论0 收藏0
  • Python异常捕获和处理❤姆式教学,代码异常报错也能那么和谐且个性!

    ?前言 代码出现异常而报错再正常不过了,但为什么要处理异常? 由于异常的存在,代码运行时会出现一大堆的红色字体提示,对于程序员还好,见红色报错见多了习惯了,但如果你开发出来的东西要给别人看,那么不懂代码的人就会一脸懵逼,对产品的印象都不太好了。 比如我们经常简单网页丢失的情况,其实是就是网页代码执行时发生了异常,但有的网页还是很个性的,提示的信息可能是比较人性化的,比如CSDN你收藏的文章被后台删...

    awesome23 评论0 收藏0
  • Python【文件操作】姆式教程❤,计算机那么多文件,你绕不过这一关的!

    ?前言 在Python写代码做项目时,我们往往需要对多个文件进行操作,在现在的源代码文件中怎么导入其他文件?怎么对其他文件进行操作?这都是经常要面临的问题,尤其是爬虫,爬到的数据放在哪里?用到的时候怎么调出来? 这就涉及到了Python的文件操作知识了,我们不可能永远都只会在一个源文件上做所有的操作,这也是必须掌握的一个知识板块。 与此同时,我的Python新手入门教程系列文章也已经快更新完了,欢...

    forsigner 评论0 收藏0
  • 保姆级教程HTML两万字笔记大总结【建议收藏】(上篇)

    摘要:标签不区分大小写,但推荐小写。标签可以嵌套,但不能交叉嵌套。标签也称为元素。比如行内标签亦可成行内元素。 ❤️HTML必备知识详解❤️ 第一部分:HTML框架简介...

    paulli3 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<