python 嵌套函数、闭包装饰器、装饰器例子
2017-08-17 00:05
447 查看
十、python 嵌套函数、闭包装饰器、装饰器例子
python的函数可以嵌套定义
闭包:能够保留函数定义时的环境信息嵌套函数的定义:
内部函数用到咯外部函数中的变量
外部函数返回内部函数
def outer():
def inner():
...
return inner
----------------------------------------------------------
#闭包,一定是嵌套函数(函数也是对象)
def f(x):
y = 100
def inner(z):
return x * y + z
return inner
a10 = f(10)
a20 = f(20)
print a10(29),a20(29)
------------------------------------------------
装饰器
不带参数装饰器:decorator(f)(*args,**kwags)
@decorator
def f():
...
带参数装饰器:
decorator(name)(f)(*args,**kwags)
@decorator(name)
def f():
...
-----------------------------装饰器例子--------------------
-----------------------------日志装饰器----------------------------
import time
#想打印方法被调用的详细信息日志(开始时间、结束时间等)
def f(x,y):
return x+y
def f1(x,y):
print 'calling f2',x,y
start = time.clock()
z = x+y #相当于把方法中的业务拿下来,修改很麻烦,难适合任意函数
end = time.clock()
print 'start at:',start,'end at:',end
return z
print f(10,20)
print f1(10,20)
#使用装饰器来做。装饰器是用闭包来做的
def log(func): #func是被装饰函数的名称。无参数的装饰器
def wrapper(*args, **kwargs): #装饰器要适用所有的函数所以参数定义用任意的
print '~' * 40
start = time.clock()
res = func(*args,**kwargs)
end = time.clock()
print 'calling', func.__name__
print 'start at:',start,' end at:',end
return res
return wrapper
def logEx(name): ##带参数的装饰器,三层嵌套。
def wrapper(func):
def wrapper1(*args,**kwargs):
print '~' * 40
start = time.clock()
res = func(*args, **kwargs)
end = time.clock()
print name, ' calling ', func.__name__, args
print 'start at:', start, ' end at:', end
return res
return wrapper1
return wrapper
@log #装饰器一定要在使用函数之前调用;同时这个是不带参数的装饰器
def f(x,y):
return x+y
@logEx('aidon')
def f2(x,y):
return x*y
print f(20,30)
print f2(20,30)
---------------------------------------------------------------
-------------------------------------------------
##身份认证装饰器
def authorize(func):
def wrapper(*args,**kwargs):
if True:
print 'welcome'
return func(*args,**kwargs)
else:
print 'faild'
return wrapper
@logEx('aidon')
@authorize
def f2(x,y):
return x*y
print f2(20,30)
---------------------------------------------------
相关文章推荐
- python闭包和装饰器的例子
- Python的高级特性7:闭包和装饰器
- 详解python中闭包和装饰器
- 一段关于python 闭包的例子
- Python的闭包和装饰器
- python——高阶函数——闭包 装饰
- python 闭包、注入、装饰
- python中函数总结之装饰器闭包
- python闭包和装饰器
- python中函数总结之装饰器闭包详解
- python中函数总结之装饰器闭包
- python学习之闭包和装饰器(入门)
- python——装饰器例子一个
- 对python的闭包,装饰器的理解
- python_装饰器二(对有/不定长参数函数的装饰)
- python 闭包,函数,装饰器,语法糖
- Python之命名空间、闭包、装饰器
- python核心高级学习总结8------动态性、__slots__、生成器、迭代器、装饰、闭包
- Python高级 -- 11 闭包、装饰器
- 深入学习python(三) 闭包(Decorator)与装饰器(Closure)