python中函数的进阶

递归

返回值能够作为参数传递

!!!函数的内部自己调用自己

!!!必须有出口

1,2,3数字的累加和

def sum_number(num):
    if num == 1:
        return 1
    result = num + sum_number(num - 1)
    return result


if __name__ == "__main__":
    print(sum_number(3))

递归必须有停止条件

递归必须改变其状态并向停止条件靠近

递归必须递归地调用自己

闭包

概念:在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包

构成条件:

在函数嵌套(函数里面在定义函数)的前提下

内部函数使用了外部函数的变量(还包括外部函数的参数)

外部函数返回了内部函数的函数名

def outer(name1):
    print(f"{name1}:在吗")

    def inner(name2):
        print(f"{name2}:我不在")

    return inner


if __name__ == "__main__":
    func = outer("张三")
    func("小红")    

闭包能够保护我们的数据

修改外部函数变量

def outer():
    num = 10

    def inner():
        nonlocal num  # 声明使用外部函数变量num不重新定义
        num = 100

    print(f"调用inner之前:{num}")
    inner()
    print(f"调用inner之后:{num}")
    return inner


if __name__ == "__main__":
    func = outer()
    func()

装饰器

定义:装饰器是python的一个重要部分。简单地说:他们是不改变函数功能的基础上,给函数增加一些功能,他们有助于让我们的代码更简短,也更有范儿。

装饰器的本质也是一个闭包函数

def outer(game):
    def inner(username, password):
        print("开启外挂")
        data = game(username, password)  # 被装饰的函数
        print("关闭外挂")
        return data

    return inner


@outer  # 一旦艾特这个play_war3就会放在game中,函数代码会放在game()中
def play_war3(username, password):
    print(f"username:{username},password:{password}\n---登录成功")
    print("欢迎来到艾泽拉斯")
    return "获得无尽之刃"


@outer
def play_cs():
    print("follow me B塞")


if __name__ == "__main__":
    print(play_war3(123456, 123456))
    # play_cs()
    demo = outer(play_war3)
    demo(123456, 123456)

如果想看这个的整体运行过程,请读者自行复制代码,放在pycharm中,用debug自行查看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值