python面向对象总结

本文详细介绍了Python中函数和类的高级概念。涵盖了递归函数的定义、特性及执行过程,闭包函数的概念及内函数如何修改外函数局部变量,装饰器的原理和使用,以及构造方法`__init__`、绑定方法、非绑定方法、继承和封装等面向对象特性。通过实例分析和代码展示,帮助读者深入理解这些概念。
摘要由CSDN通过智能技术生成

Hello,大家好。本期来和大家一起系统学习一下函数、类的相关知识。

函数部分

相信小伙伴们对python函数的基础已经非常牢固了,我们就学习一下函数进阶部分。

递归函数


概念

函数的递归调用(函数嵌套调用)是的一种特殊形式,在调用一个函数的过程中又直接或者间接地调用该函数本身,称之为函数的递归调用。

递归函数的特性

1.必须有一个明确的结束条件

2.每一次递归都必须离“结果”更近一步

递归函数执行过程

递推:一层一层往下推导答案,每一次推导必须离结果更近。

回溯:依据递推的结论往回推导最初要求的答案,前一次的输出作为了后一次的输入。

示例代码:

def main(n):
    if n == 1:
        return 1
    else:
        return n + normal_recursion(n-1)
main(5)

执行过程:

5 + main(4)
5 + 4 + main(3)
5 + 4 + 3 + main(2)
5 + 4 + 3 + 2 + main(1)
5 + 4 + 3 + 3
5 + 4 + 6
5 + 10
15

题目练习:

1.求100的前n项和,用for循环和递归函数实现?

sum_num = 0
for i in range(101):
    sum_num += i
print(sum_num) # 结果5050

def total_num(n):
    if n >0:
        return n+total_num(n-1)
    else:
        return 0
print(total_num(100)) # 结果5050

2.求6的阶乘,for循环和递归函数实现?

for i in range(1,n):
    if i ==1:
       continue
    else:
        n = n*i
print(n)  # 结果720

def get_num(n):
    if n == 1:
        return n
    return get_num(n-1)*n
print(get_num(6))  # 结果720

3.打印出列表中每一个元素(列表除外),for循环和递归函数实现?

# for循环实现
l = [1,[2,[3]]]
for i in l:
    if type(i) is int:
        print(i)
    else:
        for j in i:
            if type(j) is int:
                print(j)
            else:
                for k in j:
                    if type(k) is int:
                        print(k)
#结果
1
2
3
# 递归函数实现
l = [1,[2,[3]]]
def get_num(n):
    for i in n:
        if type(i) is int:
            print(i)
        else:
            # 获取剩下的列表
            get_num(i)
get_num(l)
#结果
1
2
3

闭包函数


概念

当我们在外部函数中定义了一个内部函数,并且内部函数能够读取到外部函数内的变量,这种函数我们就称为闭包。简单来说,闭包就是能够读取外部函数内的变量的函数。

示例:

def outer(a):
    b = 10

    def inner():
        print(a + b)

    return inner


demo = outer(5)

demo()  # 15

示例讲解:

# outer是外部函数 a和b都是外函数的临时变量
def outer(a):
    b = 10

    # inner是内函数
    def inner():
        # 在内函数中 用到了外函数的临时变量
        print(a + b)

    # 外函数的返回值是内函数的引用
    return inner


'''
在这里我们调用外函数传入参数5,
此时外函数两个临时变量 a是5 b是10 ,并创建了内函数,然后把内函数的引用返回存给了demo,
外函数结束的时候发现内部函数将会用到自己的临时变量,这两个临时变量就不会释放,会绑定给这个内部函数
'''
demo = outer(5)
# 我们调用内部函数,发现内部函数能使用外部函数的临时变量
# demo存了外函数的返回值,也就是inner函数的引用,这里相当于执行inner函数
demo()  # 15

闭包中内函数修改外函数局部变量

在闭包内函数中,我们可以随意使用外函数绑定来的临时变量,但是如果我们想修改外函数临时变量数值的时候发现出问题了!

在基本的python语法当中,一个函数可以随意读取全局数据,但是要修改全局数据的时候有两种方法:

  • global 声明全局变量

  • 全局变量是可变类型数据

在闭包内函数也是类似的情况。在内函数中想修改闭包变量(外函数绑定给内函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值