1、函数
2、装饰器,作用;修饰别的函数,给其他函数附加新的功能
原则:
1、不能修改被装饰函数的源码
2、不能改百年被装饰函数的调用方式
应用场景:
插入日志、性能测试、处理事务
理解:
1、函数即变量---也可以作为参数/返回值
2、高阶函数---以函数作为参数/返回值的函数
3、函数嵌套---函数里面定义函数
装饰器 = 高阶函数 + 嵌套函数
import time
# 1、函数--两数相加
def add(x,y):
res = x+y
return res
add1 = add #函数即变量
print("函数即变量,add1 = ",add1(1,3))
print("add()值=%s" %(add(add1(1,1),1))) #参数
# 2、装饰器---测试一个函数运行时间
# 被装饰函数
def f():
print("i am f")
time.sleep(1)
#运行时间
def new_f():
start_time = time.time() #开始时间
f() #执行函数
end_time = time.time() #结束时间
print("耗时%s秒" % (end_time - start_time))
# 执行
new_f()
# 改为装饰器格式
def my_time(func): #参数 func 是一个函数
start_time = time.time() #开始时间
func() #执行函数
end_time = time.time() #结束时间
print("函数%s耗时%s秒" % (func.__name__,end_time - start_time)) #func.__name__是函数名,传入的参数
my_time(f)
# 装饰器
def my_time1(func):
def warpper():
start_time = time.time()
func()
end_time = time.time()
print("函数%s耗时%s秒" % (func.__name__,end_time - start_time))
return warpper #带括号 返回的是函数值,不带括号返回的是函数
n = my_time1(f) # n是函数my_time1()的返回值,该返回值是函数warpper本身 ==
f = n
print("直接执行被装饰函数,就可以执行装饰器")
f()
def my_time2(func):
def warpper():
start_time = time.time()
func()
end_time = time.time()
print("函数%s耗时%s秒" % (func.__name__,end_time - start_time))
return warpper #带括号 返回的是函数值,不带括号返回的是函数
@my_time2#---简化了步骤 f_my_time2 = my_time2(f_my_time2)
def f_my_time2():
print("i am f_my_time2")
time.sleep(3)
f_my_time2()
网友评论