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

前言

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

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

知识点

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

1.变量作用域

局部变量

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

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

scopeTest()


输出结果:

6

去掉注释的结果:

6
Traceback (most recent call last):
  File "D:\PythonDemo\test--\cycleTest.py", line 6, in <module>
    print(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():
    
    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://img-blog.csdnimg.cn/102aa32ed73340a5b07ca53fe9c58330.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rWB5rWq5ZOlLS3kupLogZTnvZHnmoTmtarmva7lhL8=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)  
链接:https://pan.baidu.com/s/1YllgwFf3aMbZLHeNyoLkUQ  
提取码:9vwh

![在这里插入图片描述](https://img-blog.csdnimg.cn/70f1a894dc964b19993a3f7cded18b4d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rWB5rWq5ZOlLS3kupLogZTnvZHnmoTmtarmva7lhL8=,size_17,color_FFFFFF,t_70,g_se,x_16#pic_center)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值