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
  • 相关阅读:
    Python--__init__方法
    Python--面向对象编程
    用R语言对NIPS会议文档进行聚类分析
    docker oracle install
    java 删除字符串左边空格和右边空格 trimLeft trimRight
    mysql 表名和字段、备注
    docker学习
    shell爬虫
    shell 解析json
    SecureCRT 7.1.1和SecureFx key 亲测可用
  • 原文地址:https://www.cnblogs.com/fuzzier/p/7588975.html
Copyright © 2011-2022 走看看