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

Posted 流浪哥--互联网的浪潮儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了❤️Python面向对象保姆式教学❤️,新手速成精英之路!相关的知识,希望对你有一定的参考价值。

前言

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

今天,打算自己写一篇。
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

以上是关于❤️Python面向对象保姆式教学❤️,新手速成精英之路!的主要内容,如果未能解决你的问题,请参考以下文章

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

❤️万字Python基础保姆式教学❤️,小白快速入门Python!

❤️万字Python基础保姆式教学❤️,小白快速入门Python!

❤️Python异常捕获和处理❤️保姆式教学,代码异常报错也能那么和谐且个性!

❤️Python异常捕获和处理❤️保姆式教学,代码异常报错也能那么和谐且个性!

❤️怒肝三万字,史诗的保姆网络编程教学❤️