码迷,mamicode.com
首页 > 其他好文 > 详细

装饰器

时间:2018-11-01 20:27:37      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:装饰器   实参   附加   实现   返回   增加   *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():

print(‘in the foo‘)

bar() #函数先定义在引用 即先执行完def操作,在引用bar 或叫先声明在调用

#foo() #已经先调用了foo函数 但bar函数还没来得及定义声明
#def bar():

print(‘in the 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():

test2() #这种叫函数的调用 不叫函数嵌套

#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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!