zoukankan      html  css  js  c++  java
  • python装饰器的小细节

    以下是我看见python装饰器的一些我不熟悉的特点,所以记录一下

    1 装饰器的特性:

      1.1 可以吧被装饰的函数替换成不同的函数  decorate(func)。

      1.2 加载模块时候立即执行。这点很有用

      这里我们可以给出最简单的装饰器

    def decorate(func):
        print 'im a func'
        return func
    
    
    @decorate
    def foo(s):
        return 'the name is me %s' % s
    
    
    #启动程序
    [out]
    im a func

    2 闭包的特点:

      2.1 inner 能访问 outer 及其祖先函数的命名空间内的变量(局部变量、函数参数)

      2.2 调用 outer 已经返回了,但是他的命名空间被返回的 inner 对象引用,所以不会被回收

    3 functool.wraps(func):

      总结起来就是保存了func的 __name__, __doc__ 等信息,例如:

    # -*- coding: utf-8 -*-
    
    import functools
    
    
    def wrap1(func):
        @functools.wraps(func)
        def inner():
            print 'wrap1'
            return func()
        return inner
    
    
    def wrap2(func):
        def inner():
            print 'wrap2'
            return func()
        return inner
    
    
    @wrap1
    def func1():
        print 'func1'
        return
    
    
    @wrap2
    def func2():
        print 'func2'
        return
    
    
    if __name__ == '__main__':
        print 'have wrap: ' + func1.__name__
        print 'have not wrap: ' + func2.__name__
    
    
    [output:]
    have wrap: func1
    have not wrap: inner
    View Code
  • 相关阅读:
    如何通过Restful API的方式读取SAP Commerce Cloud的Product图片
    Permute Digits
    Browser
    Jamie and Alarm Snooze
    Perfect Squares
    Color the ball
    Stars
    1086. Tree Traversals Again (25)
    1085. Perfect Sequence (25)
    1083. List Grades (25)
  • 原文地址:https://www.cnblogs.com/fuzzier/p/7588975.html
Copyright © 2011-2022 走看看