高阶函数与装饰器函数

装饰器函数:修改增加其他函数功能的函数。

1.不修改原函数的代码
2.一个装饰器函数可以给n个函数添加或修改相同的功能。

装饰器函数的实现方法:

1.它是一个嵌套函数。
2.它也是一个高阶函数,将原函数作为参数,将内部函数作为返回值。
3.将原函数替换为内部函数。原函数在内部函数中执行保留原函数的功能。

案例一:给函数增加"开始执行…“和"结束执行…”

def log_info(function):
def run(*args,**kwargs):
print(“开始执行…”)
res = function(*args,**kwargs)
print(“执行结束…”)
return res
return run

@log_info # 装饰器语法糖
def func1(n):
for i in range(0,n,2):
print(i,end=" ")
print()
return “Ok”

print(func1)

log_info(func1)(20)

有参装饰器(给无参装饰器上再加一层函数用于接收参数。)

案例二 : 执行时间测试函数。计算某函数执行n次的平均时间

import time

def run_time_test(n):
def run_time(function):
def run(*args,**kwargs):
# 1.获取当前时间戳 1970-1-1 00:00:00 (格林威治天文台时间)到现在的秒数。
start_time = time.time()
for i in range(n):
one_time = time.time()
res = function(*args,**kwargs)
print(“第{}执行的时间为:{}”.format(i+1,time.time()-one_time))
t_time = time.time() - start_time
avg_time = t_time / n
print("{}执行的总时间为:{},平均时间为:{}".format(n,t_time,avg_time))
return res
return run
return run_time

@log_info
@run_time_test(10)
def func2(n):
s = 0
for i in range(n):
for j in range(n):
for k in range(n):
s += i * j * k
return s

print(func2(150))

print(log_info(run_time_test(10)(func2))(150))

input()
input()

高阶函数:

1.可以使用函数对象作为参数的函数
2.或可以将函数作为返回值的函数

函数对象:定义好的函数,使用函数名调用(不要加括号) 将函数作为参数的高阶函数,通过传入不同的函数,可以使执行的结果完全不同结果

def add(f,x,y):
return f(x) + f(y)

print(add(lambda x:x**2,3,4))
print(add(lambda x:str(x),3,4))
print(add(lambda x:x/2 ,3,4))

内置高阶函数

map 数据映射函数
map(func,list) -> map生成器对象
将函数作用在list的每一个序列上
res = map(lambda x:x**2,range(10))
print(list(res))

map实现原理

def my_map(f,lis):
new_list = []
for i in lis:
new_list.append(f(i))
return new_list

print(my_map(lambda x:x**0.5,range(1,10)))

reduce 累计函数

from functools import reduce

print(reduce(lambda x,y:x*y,range(1,6)))
input()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值