手把手教你从零开始学python 第六章--高级函数与装饰器

目录

🍔一、高级函数

🥝1、回调函数

🥝2、filter 过滤函数

🥝3、reduce函数

🍔二、函数调用过程

🍔三、装饰器


🍔一、高级函数

🥝1、回调函数

👇🏽

下面这个方法叫回调函数
这个函数设置 x , y 参数以后  再设置了一个参数fn  fn就是用作下面a1 a2调用
huidiao函数的时候  传入 jiafa函数与jianfa函数

def huidiao(x,y,fn):   
    return fn(x,y)

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

def jianfa(a,b):
    return a-b

# 原理就是 1和2传入 x,y  然后加法函数 传入fn  加法中的a,b对应1,2

a1 = huidiao(1,2,jiafa)  

a2 = huidiao(5,3,jianfa)

print(a1,a2,sep='\n')

🥝2、filter 过滤函数

👇🏽

lambda函数  已经设定了条件  要大于9的数值 
filter函数  在lambda函数的基础上  筛选 在a列表中的数值 
也就是 在a列表中 筛选出 大于9以上的数值 并且 filter的返回值是一个可迭代对象 

a = [1,5,9,11,15,18,20]

x = filter(lambda b:b>9,a)
for i in x:
    print(i)
    # 结果是下面这些
    # 11
    # 15
    # 18
    # 20

🥝3、reduce函数

👇🏽

输出结果是10
相当于是一个累加的意思
累加的过程是 x1 = 1    x2 = 2 然后 等于3   
下次 x1 = 3    x2 = 3  上次累加的2个的结果加下次的数字


from functools import reduce
# reduce函数

a = [1,2,3,4]
print(reduce(lambda x1,x2:x1+x2,a))

🍔二、函数调用过程

👇🏽

def a():
    print('a被调用')
    return 'a函数的返回值'

def b():
    print('b被调用')
    return a()

x = b()
print('x当前值是{}'.format(x))

结果是
b被调用
a被调用
x当前值是a函数的返回值

👇🏽

# 如果是这样的话是另外一种情况
def a():
    print('a被调用')
    return 'a函数的返回值'

def b():
    print('b被调用')
    return a

x = b()
print('x当前值是{}'.format(x))
# 结果是
# b被调用
# x当前值是<function a at 0x0000021F77A73E20>
# 这个x其实相当于是  a函数了已经


# 比如这样
x()
# 结果是 a被调用
# 相当于是 x已经是指向a函数了


👇🏽

# 当然也可以这样
y = b()()
print('y当前值是{}'.format(y))
# 结果是
# b被调用
# a被调用
# y当前值是a函数的返回值

🍔三、装饰器

import time

def outer(fn):
    def inner():
        start = time.time()
        fn()
        end = time.time()
        print('代码运行时间是{}'.format(end-start))
    return inner


@outer  # 这个装饰器首先会调用 outer , 接下来 把装饰的函数传递给fn  也就是 把a函数 转递给fn 注意 这个时候fn就是a函数了
def a():
    x = 0
    for i in range(10000000):
        x += i
    print(x)

a()
# 那么当我们再次调用a函数的时候 这个时候a函数 就已经变成了 inner函数 也就是 outer函数的内部函数了

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ZTLJQ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值