day 5 pythonエッセイ勉強

3876 ワード

  • 装飾器進段
  • 例:ネスト関数装飾器.
    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モジュール
    md 5モジュールとshaモジュールの代わりに、暗号化に関連する動作に使用され、主にSHA 1、SHA 224、SHA 256、SHA 384、SHA 512、MD 5アルゴリズムが提供される.
    例:
    import md5 hash = md5.new() hash.update('admin')
    print hash.hexdigest()
    MD 5 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()