装饰器进阶
例:嵌套函数装饰器。
import functools def wrapper(func): @functools.wraps(func) def test(): print 'before' func() print 'after' return test @wrapper # foo==>wrapper(foo)==>test def foo(): print 'foo'
例2: 多重装饰器
多重装饰器,就是循环装饰,上一个装饰器的return值,让下一个装饰器进行装饰.
def w3(func): def qwe(*args,**kwargs): print '___' func(*args,**kwargs) print '___' return qwe def w1(func): def inner(*args,**kwargs): func(*args,**kwargs) return inner def w2(func): def asd(*args,**kwargs): print 'w2 start' func(*args,**kwargs) print 'w2' func(*args,**kwargs) print 'w2' func(*args,**kwargs) print 'w2 end' return asd @w1 @w2 @w3 def f1(arg,arg2,arg3): print arg,arg2,arg3 f1('test1','test2','test3')
执行结果: [root@localhost opt]# python test.py w2 start ___ test1 test2 test3 ___ w2 ___ test1 test2 test3 ___ w2 ___ test1 test2 test3 ___ w2 end
例3:带参数装饰器
#!/usr/bin/env python #coding:utf-8 def Before(request,kargs): #f1 print 'before' def After(request,kargs): #f2 print 'after' def Filter(before_func,after_func): def outer(main_func): def wrapper(request,kargs): before_result = before_func(request,kargs) if(before_result != None): return before_result; main_result = main_func(request,kargs) if(main_result != None): return main_result; after_result = after_func(request,kargs) if(after_result != None): return after_result; return wrapper return outer @Filter(Before, After) # Index==>Filter(Before,After)==>@outer==>outer(Index)==>warpper def Index(request,kargs): print 'index' if __name__ == '__main__': Index(1,2)
迭代
例:
函数默认返回值为None。
def func(arg1,arg2): if arg1 == 0: print arg1, arg2 arg3 = arg1 + arg2 print arg3 func(arg2, arg3) func(0,1)
3. 模块
导入模块:
import 模块
from 模块 import 单一模块
from 模块 import 单一模块 as 单一模块别名
from 模块 import *
导入模块其实就是告诉Python解释器去解释那个py文件
导入一个py文件,解释器解释该py文件
导入一个包,解释器解释该包下的 __init__.py 文件 #模块目录下必须有__init__.py文件
导入模块以sys.path为基准。 sys.path是一个列表,可以通过sys.path.append添加路径.
hashlib模块
用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
例:
import md5 hash = md5.new() hash.update('admin')
print hash.hexdigest()
MD5 add salt 防止撞库。
例:
import
hashlib
# ######## md5 ########
hash
=
hashlib.md5(
'898oaFs09f
'
)
hash
.update(
'admin'
)
print
hash
.hexdigest()
加强版
import
hmac
h
=
hmac.new(
'wueiqi'
)
h.update(
'hellowo'
)
print
h.hexdigest()