1. 装饰器进阶

例:嵌套函数装饰器。

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)


  1. 迭代

例:


函数默认返回值为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
= hmac.new('wueiqi')
h.update('hellowo')
print h.hexdigest()