童年原是一生最美妙的阶段,那时的孩子是一朵花,也是一颗果子,是一片懵懵懂懂的聪明,一种永远不息的活动,一股强烈的欲望。——巴尔扎克
现在位置:首页 > 资源宝库 > 技术教程 > ❤️Python面向对象保姆式教学❤️,新手速成精英之路!

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

绿色资源网  技术教程  2021-9-29  126  0评论
    <link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-1a85854398.css">

前言

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

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

知识点

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

1.变量作用域

局部变量

python能够影响变量作用域的代码段是def、class、lamda。

def scopeTest():
    localValur = 6
    print(localValur)

scopeTest()
# print(localValur) #去除注释这里会报错,因为localValur是本地变量

输出结果:

6

去掉注释的结果:

6
Traceback (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
    pass

print(i)
print(localValur)

输出结果:

2
3

变量搜索路径是:本地变量->全局变量。

def scopeTest():
    var = 6
    print(var)  #

    def innerFunc():
        print(f"var:{var}")  #注意这里

    innerFunc()

var = 5
print(var)
scopeTest()
print(var)

输出结果:

5
6
var:6
5

局部变量总结:

①def函数里面的变量,不能和文件里面的变量共用
②def函数可以嵌套使用,并且内部def函数,可以使用外部def函数的变量。

全局变量 global 关键字

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

value=100
def scopeTest():
    # global value
    value +=1

print(value)
scopeTest()
print(value)

没进行声明的时候,是这样的输出结果:

100
Traceback (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 +=1
UnboundLocalError: local variable 'value' referenced before assignment

去掉注释:

value=100
def scopeTest():
    global value
    value +=1

print(value)
scopeTest()
print(value)

这个时候,函数里面,修改的结果,也会影响到文件了,输出结果:

100
101

变量生命周期

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


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

先看案例:
创建一个类,之后把类里面的index值改成有序值

class classTest:
    index=0

arr=[]

add=classTest
for i in range(5):
    add.index=i
arr.append(add)

for cc in arr:
    print(cc.index)

输出结果:

4
4
4
4
4

为什么结果都会变成4?因为这里的变量add的数据类型是一个type类。

print(type(add))
<class 'type'>

数组里面的值是跟着 ‘type’ 对象改变的,add 的生命周期,从声明起就一直没有变化。

正确写法:

class classTest:
index=0

for 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'>
0
1
2
3
4

这个时候,我们的结果就正确了。add的生命周期,在每一次创建的时候,就是一个新变量。

结语

知识点虽然少,但是他的重要性,无可替代,很多看似解决不了的错误,依靠基础知识都可以解决。

很多博主都在推荐功能的使用,我更强调基础的训练。


推荐一本书,确保基础不掉队。

在这里插入图片描述
链接:https://pan.baidu.com/s/1YllgwFf3aMbZLHeNyoLkUQ
提取码:9vwh

在这里插入图片描述

            <link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-d7a94ec6ab.css" rel="stylesheet">
评论一下 分享本文 联系站长
绿色资源网
看完文章就评论一下!
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论