Python基础学习(8)函数进阶-闭包/装饰器


Python基础学习(1)基本知识
Python基础学习(2)序列类型方法与数据类型转换
Python基础学习(3)进阶字符串(格式化输出)
Python基础学习(4)散列类型(无序序列)
Python基础学习(5)流程控制
Python基础学习(6)函数基础与函数参数
Python基础学习(7)函数作用域与名称空间.
Python基础学习(8)函数进阶-闭包/装饰器
Python基础学习(9)迭代器/生成器

一,闭包函数

闭: 封闭 嵌套函数

包: 对数据进行的操作函数(就是内层函数)
条件:

1.必须是一个嵌套函数
2.外层函数必须返回内层函数
3.内层函数必须操作外层函数数据
# 大胃王比赛
food = 0


# 挑战碗数
def f1():
    global food
    food += 1  # 需要修改每次吃完的次数

# print(food)
f1()
print(food)
f1()
print(food)
# 没有封闭 很容易被修改
food = 0
print(food)
语法格式:
    def 外层函数名():
        def 内层函数名():
            代码块
        return 内层函数名 # 这里的返回值是外层函数
# 闭包
def food1():
    bowl=0
    def f():
        nonlocal bowl
        bowl+=5 #  bowl=bowl+5
        return bowl
    return f

a=food1() # 获取函数里的数据内存地址
print(a()) # 内层函数第一遍运行
print(a()) # 内层函数第二遍运行
bowl=0
print(a()) # 不会变了 在给函数被多次调用的过程中 让这些私有变量能够保持起持久性
# 判断 是否是闭包函数
print(a.__closure__) # cell 是闭包
print(food1.__closure__)#不是闭包
print(f.__closure__) # 报错 内层函数是闭包 但是因为被外层函数封闭起来了 无法直接查询

二,装饰器(重要)

掌握了闭包 相当于装饰器就掌握好了

因为装饰器最基本的样子就是闭包函数

装饰器: 在不修改源代码和调用方式的情况下 给函数添加功能

器: 工具

装饰: 添加功能

开放: 扩展功能(增加功能)

封闭:对修改源代码封闭

开发一款程序 这个程序应该是可拓展 但是不能修改
要是想修改源代码 肯定这个程序就会终止运行

# 定义一个装饰器函数
def my_decorator(func):
    def wrapper():
        print("Before calling the function")
        func()
        print("After calling the function")
    return wrapper

# 使用装饰器
@my_decorator
def say_hello():
    print("Hello!")

# 调用被装饰后的函数
say_hello()
Before calling the function
Hello!
After calling the function

def 煎饼果子():
    print('我是煎饼果子')

def 火锅():
    print('我是火锅')

def 加工(f): # 准备加工的东西 f形参   哪个函数需要添加功能
    def 加料():
        f() # 加工的食材拿出来
        print('加包卫龙') # 添加的功能
    return 加料 # 原本的东西加工后的结果

装饰器是 Python 中一种强大且灵活的功能,它的作用主要包括以下几个方面:

  1. 代码复用:装饰器可以将一些通用的功能封装起来,然后应用到多个函数中,实现代码的复用,避免重复编写相同的代码。

  2. 增强函数功能:通过装饰器,可以在不修改原函数代码的情况下,为函数添加额外的功能,比如日志记录、性能统计、权限校验等。

  3. 解耦合:装饰器可以将函数的核心逻辑与其他功能进行解耦合,使得代码更加清晰、易于维护。

  4. 动态扩展:装饰器可以在运行时动态地为函数添加或修改功能,使得程序在不停止运行的情况下进行功能的扩展。

  5. 提高代码可读性:通过装饰器,可以将一些与核心逻辑无关的代码抽离出来,使得函数的功能更加清晰明了,提高代码的可读性。

  6. 面向切面编程(AOP):装饰器是实现面向切面编程的一种重要方式,可以在不修改原函数代码的情况下,为函数添加横切关注点,比如日志、事务管理等。

总的来说,装饰器是一种强大的工具,可以帮助我们实现代码复用、功能增强、解耦合、动态扩展等目的,提高代码的可维护性和可读性,是 Python 编程中常用的技术手段之一。

三,递归

递归函数: 定义一个函数 函数内部自己调用自己

并且这个操作可以停止

写递归的时候要有明确递归出口

def factorial(n):
    if n==0:
        return 1
    return n*factorial(n-1)
print(factorial(4))
  • 21
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只特立独行猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值