代码改变世界

4-1装饰器1

2017-11-27 23:43  mmwss  阅读(91)  评论(0编辑  收藏  举报
#!/usr/bin/env python
# -*- coding:utf-8 -*-

# 系统自动回收,没有引用,自动回收。
#匿名函数 无名就会被自动回收
abc = lambda x:x*3
print(abc(2))

#装饰器:
# 定义= 函数 #装饰其他函数
# 为其他函数添加附加功能
# 装饰器 对被修饰的函数是透明的
# 不改函数源码 不改调用方式

import time

def zzz(x): #装饰器
def y(*aa,**bb):
cc=time.time()
x()
ccc=time.time()
print('装饰器统计运行时间 %s' %(ccc-cc))
return y
@zzz
def a():
time.sleep(1) #停3秒
print('in the a')
a()

#装饰器
#函数是“变量”
#高阶函数
# 把一个函数名当做实参的传给另一个函数 不修改函数,为函数加功能
# 返回值中包含函数名
#嵌套函数

#高阶函数+嵌套函数=装饰器

def bar():
print('这是bar函数')
def foo():
print('这是装饰器')
bar()
foo()
print('显示bar函数的内存地址',bar) #表示内存地址

#高阶函数
import time
def aa():
time.sleep(1) #等待1秒
print('函数A')

def bb(x):
xx=time.time() #截取开始时间
print(x) #aa的内存地址
x() #aa的内容
yy=time.time() #截取结束时间
print('运行时间%s' % (yy-xx))
bb(aa)


#返回值定义函数(不改函数调用方式)
import time
def bar():
time.sleep(3)
print('函数AAA')
def bar1(x):
print(x) #显示内存地址
return x
bar1(bar())
#a=bar1(bar());a() 等同上条

print('- - - - - - - - - - - - - - - - ')
###嵌套函数
def foo():
print('嵌套函数外,这是foo')
def bar():
print('嵌套函数内,这是bar\n\n')
bar()
foo()

#完整装饰器++++++++++
print('###完整装饰器 有缺点###')
import time

def xx(z): #装饰器
def xxx():
mm=time.time()
z()
ww=time.time()
print('这是装饰器+的功能:运行时间%s' %(ww-mm))
return xxx
@xx # aa=xx(aa) #不改变调用方式 在装饰器头部加
def aa():
time.sleep(1)
print('这是AA')

def bb():
time.sleep(1)
print('这是BB')


aa() #aa函数 头部加 装饰器 @xx
bb() #bb函数 头部没加 装饰器 @xx