python基础学习(十):函数(下)

在这里插入图片描述

1. 高阶函数

  • 含义:接收函数作为参数,或者将函数作为返回值的都是高阶函数
  • 示例
lst = [1,2,3,4,5,6,7,8,9,10]
# 定义一个函数,用来检查偶数
def fn2(i):
    if i % 2 == 0:
        return True
# 定义一个函数,用来检查数字是否大于5
def fn3(i):
    if i > 5:
        return True
    return False

def fn(func,lst):
    new_list = []
    for n in lst:
        if func(n):
            new_list.append(n)
    return new_list
# 当我们使用一个函数作为参数时,实际上就是将一段代码传递到了目标函数
print(fn(fn2,lst))
[2, 4, 6, 8, 10]

2. 匿名函数

  • 含义:匿名函数就是不需要显式的指定函数名
    • 匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果
  • lambda 函数表达式是专门用来创建一些简单的函数,它是函数的另一种创建方式
    • 语法:lambda 参数列表: 返回值
  • 示例
print((lambda a,b:a + b)(1,2))
3

3. 闭包

  • 含义:在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包,简而言之, 闭包的特点就是内部函数引用了外部函数中的变量
  • 闭包的好处:
    • 通过闭包可以创建一些只有当前函数才能访问的变量
    • 可以将一些私有数据藏到闭包中
  • 形成闭包的条件:
    • 函数嵌套
    • 将内部函数作为返回值返回
    • 内部函数必须使用到外部函数的变量
  • 示例
# 求列表中元素的平均值
def make_average():
    nums = []
    def average(n):
        nums.append(n)
        return(sum(nums) / len(nums))
    return average
average = make_average()
print(average(10))
nums = [] # 不会对函数产生影响
print(average(120))
10.0
65.0

4. 装饰器的引入

  • 我们可以直接通过修改函数中的代码来完成一些需求,但是存在一些问题
    • 如果修改的函数多,修改起来比较麻烦
    • 不方便后期的维护
    • 会违反开闭幕原则(ocp):程序的设计,要求开发对程序的扩展,但要关闭对程序的修改
  • 装饰器实际上就是为了给某程序增添功能,但该程序已经上线或已经被使用,那么就不能大批量的修改源代码,这样是不科学的也是不现实的,因此就产生了装饰器,使得其满足:
    • 不能修改被装饰的函数的源代码
    • 不能修改被装饰的函数的调用方式
    • 满足1、2的情况下给程序增添功能

5. 装饰器的使用

  • 通过装饰器,可以在不修改原来函数的情况下对函数进行扩展
  • 在开发中,我们都是通过装饰器来扩展函数的功能
  • 示例一
def fn():
    print('我是fn函数....')

def add(a,b):
    r = a + b
    return r
    
def start_end(old)def new_function():
        print('开始执行....')
        result = old(*args,**kwargs)
        print('执行结束....')
        return result
    return new_function

f = start_end(fn)
f()
f2 = start_end(add)
r = f2(123,456)
print(t)
开始执行....
我是fn函数....
执行结束....
开始执行....
执行结束....
579
  • 示例二
def start_end(old)def new_function():
        print('开始执行....')
        result = old(*args,**kwargs)
        print('执行结束....')
        return result
    return new_function

@start_end
def speak():
    print('同学们好好复习')

speak()
开始执行....
同学们好好复习
执行结束....
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值