Python基础——认识函数(三)

Python基础——认识函数(三)

1.高阶函数

  • 接收函数作为参数,或者将函数作为返回值返回的函数就是高阶函数
# 高阶函数
# 接收函数作为参数,或者将函数作为返回值返回的函数就是高阶函数
def fun_1(a, b):
    # 函数一:计算a,b的和
    c = a + b
    return c

# 接收函数作为参数的高阶函数
def fun_2(fun, n, a, b):
    # 函数二:计算n倍fun(a,b)的值
    d = n * fun(a, b)
    return d

result1 = fun_2(fun_1, 2, 3, 7)
print(result1)                   #20

# 将函数作为返回值返回的高阶函数
def fun_3(a,b):
    return fun_1(a,b)

result2 = fun_3(2,5)
print(result2)                   #7

2.闭包

  • 将函数作为返回值也是高阶函数我们也称为闭包
  • 闭包的好处
    • 通过闭包可以创建一些只有当前函数能访问的变量
    • 可以将一些私有数据藏到闭包中
  • 行成闭包的条件
    • 函数嵌套
    • 将内部函数作为返回值返回
    • 内部函数必须要使用到外部函数的变量
# 闭包
# 创建一些只有当前函数能访问的变量,可以将一些私有数据藏到闭包中
def my_fun(a, b):
    c = 10
    #内部定义了函数,形成函数嵌套
    def in_fun(a, b, c):
        # 用到了外部变量a,b
        # c只能由in_fun函数访问,不能从函数外访问
        d = (a + b) * c
        return d
    # 将函数作为返回值返回
    return in_fun(a, b, c)

print(my_fun(2, 5))  # 70

3.装饰器的引入

  • 我们可以直接通过修改函数中的代码来完成需求,但是会产生以下一些问题
    • 如果修改的函数多,修改起来会比较麻烦
    • 不方便后期的维护
    • 这样做会违反开闭原则(ocp)
      • 程序的设计,要求开发对程序的扩展,要关闭对程序的修改
# 装饰器的引入
# def my_fun(*num):
#     #求和函数
#     s = 0
#     for i in num:
#         s += i
#     return s
# print(my_fun(1,2,3,4,5,6,7))       #28

# 修改函数,实现新功能
def fun(*num):
    #连乘函数
    s = 1
    for i in num:
        s *= i
    return s
print(fun(1,4,5,6))             #120
# 在内部进行了修改,违反ocp原则

4.装饰器的使用

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

my_fun()            #我是函数!

# 在不修改原函数的情况下拓展函数
def new_fun(fun):
    print('Hello!')
    fun()
    print('执行结束了!')

new_fun(my_fun)
# Hello!
# 我是函数!
# 执行结束了!

# 但是这样修改多个函数呢?不可能一个一个的添加啊
# 于是,修饰器来了
def your_fun(func):
    def my_fun(*num):
        func(*num)
    return my_fun

@your_fun
def func(a,b):
    c = a+b
    print('求和函数:')
    print("结果为:",c)
func(5,2)
# 求和函数:
# 结果为: 7

# 多层修饰器
def his_fun(func):
    def my_fun(*args, **kwargs):
        print('他的函数:')
        func(*args, **kwargs)
        print('2333')
    return my_fun

def her_fun(func):
    def my_fun(*args, **kwargs):
        print('她的函数:')
        func(*args, **kwargs)
        print('2333333')
    return my_fun

@his_fun
@her_fun
def func(a,b,c):
    print(a,b,c)

func(7,8,9)
# 他的函数:
# 她的函数:
# 7 8 9
# 2333333
# 2333
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值