标签:装饰器 实参 附加 实现 返回 增加 *args war func
装饰器 本质是函数,(装饰其他函数),就是为其他函数添加附加功能#原则 1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式
#实现装饰器知识 1.函数即变量 2.高阶函数 3.嵌套函数 装饰器=高阶函数+嵌套函数
#装饰器例子
‘‘‘‘
import time
def timmer(func):
def warapper(*args,**kwargs):
start_time=time.time()
func()
stop_time=time.time()
print("the func run time is %s" %(stop_time-start_time))
return warapper
@timmer #使用装饰器timmer
def test1():
time.sleep(3) #运行3秒
print(‘in the test1‘)
test1()
‘‘‘
#函数即变量 函数就是变量 有内存回收机制 变量名或函数名 del 内存就会回收,不del就不会回收
#函数先定义在引用
‘‘‘
def foo():
print(‘in the foo‘)
bar() #函数先定义在引用 即先执行完def操作,在引用bar 或叫先声明在调用
def bar():
print(‘in the bar‘)
foo()
#lambda匿名函数
cal = lambda x:x*3
cal(3)
print(cal(3 ))
#def foo():
#foo() #已经先调用了foo函数 但bar函数还没来得及定义声明
#def bar():
#高阶函数 1.把一个函数名当成实参传给另一个函数(在不修改被装饰函数源代码的情况下为其添加功能)
#2.返回值中包含函数名(不修改函数的调用方式)
def bar():
print(‘in the bar‘)
def test1(func): #传入bar函数名
print(func) #返回bar的内存地址
func()
test1(bar) #传入bar函数名
import time
def bar():
time.sleep(1)
print(‘in the bar‘)
def test1(func): #传入bar函数名
start_time=time.time()
func() #运行bar函数
stop_time=time.time()
print("the func run time is %s "%(stop_time-start_time))
test1(bar)
import time
def bar():
time.sleep(1)
print(‘in the bar‘)
def test2(func):
print(func)
return func
#print(test2(bar))
#t = test2(bar) #返回值传给t print把返回值输出到屏幕上
#print(t)
#t()
bar = test2(bar) #覆盖之前的bar 可以获取到bar的内存地址
bar() #可以获取到bar的内存地址 增加的新功能
‘‘‘
#嵌套函数
def foo():
print(‘in the foo‘)
def bar(): #函数的嵌套 函数里面在嵌套一个函数
print(‘in the bar‘)
bar()
foo()
#def test1():
#test1()
#作用域 从里往外
x = 0
def gran():
x = 1
def da():
x = 2
def so():
x = 3
print(x)
so()
da()
gran()
标签:装饰器 实参 附加 实现 返回 增加 *args war func
原文地址:http://blog.51cto.com/13707996/2311892