目录
🍔一、高级函数
🥝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函数的内部函数了