Python基础——函数(三)

1.高阶函数

  • 接收函数作为参数或者将函数作为返回值返回的函数就是高阶函数

2.闭包

  • 将函数作为返回值返回就是高阶函数,也称为闭包
  • 闭包的好处
    • 通过闭包可以创建一些只有当前函数可以访问的变量
    • 将一些私有数据藏到闭包中
  • 形成闭包的条件
    • 函数嵌套
    • 将内部函数作为返回值返回
    • 内部函数必须要使用到外部函数的变量
# 将函数作为返回值返回,我们也称为闭包


def fn():
    a = 10
    # 在函数内部定义一个函数

    def fn1():
        print('我是fn1', a)   # 输出结果 我是fn1 10
    # 将内部函数作为返回值返回
    return fn1
# r是一个函数 是调用fn()后返回的函数 这个函数是在fn内部定义,并不是全局函数


r = fn()
print(r())   # 输出结果 我是None
print(a)    # 输出结果 NameError: name 'a' is not defined
# 求多个数的平均值


nums = []


def average(n):
    nums.append(n)
    return sum(nums)/len(nums)


print(average(10))   # 输出结果 10.0
print(average(200))  # 输出结果 105.0
nums = []   # 不小心修改变量
print(average(300))   # 输出结果 300
# 闭包求多个数的平均值


def make_average():
    nums = []

    def average(n):
        nums.append(n)
        return sum(nums)/len(nums)
    return average


a = make_average()
print(a(10))   # 输出结果 10.0
print(a(200))  # 输出结果 105.0
nums = []   # 不小心修改变量
print(a(300))   # 输出结果 170.0

3.装饰器的引入

  • 直接修改函数中的代码来完成需求,会产生以下问题
    • 如果修改的多,修改会比较麻烦
    • 不方便后期维护
    • 违反开闭原则
      • 程序的设计,要求对程序的扩展,关闭对程序的修改

4.装饰器的使用

  • 通过装饰器,可以再不修改原来函数的情况下来对函数进行扩展
  • 在开发过程中,我们都是通过装饰器来扩展函数功能的


def add(a, b):
    return a + b


def start_end(old):
    def new_function(*args, **kwargs):
        print('开始执行')
        result = old(*args, **kwargs)   # 调用被扩展的函数
        print('执行结束')
        return result
    return new_function


f = start_end(add)
r = f(2, 29)
print(r)
# 输出结果 
# 开始执行
# 执行结束
# 31
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值