zoukankan      html  css  js  c++  java
  • python的装饰器和@property

    参考:http://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html

    http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html

    这个是没有参数的形式,这个也没有返回值

    import time
     
    def timeit(func):
        def wrapper():
            start = time.clock()
            func()
            end =time.clock()
            print 'used:', end - start
        return wrapper
     
    @timeit
    def foo():
        print 'in foo()'
     
    foo()

    对固定参数的函数进行修饰

    # -*- coding:gbk -*-
    '''示例5: 对带参数的函数进行装饰,
    内嵌包装函数的形参和返回值与原函数相同,装饰函数返回内嵌包装函数对象'''
     
    def deco(func):
        def _deco(a, b):
            print("before myfunc() called.")
            ret = func(a, b)
            print("  after myfunc() called. result: %s" % ret)
            return ret
        return _deco
     
    @deco
    def myfunc(a, b):
        print(" myfunc(%s,%s) called." % (a, b))
        return a + b
     
    myfunc(1, 2)
    myfunc(3, 4)

    参数数量不确定

    # -*- coding:gbk -*-
    '''示例6: 对参数数量不确定的函数进行装饰,
    参数用(*args, **kwargs),自动适应变参和命名参数'''
     
    def deco(func):
        def _deco(*args, **kwargs):
            print("before %s called." % func.__name__)
            ret = func(*args, **kwargs)
            print("  after %s called. result: %s" % (func.__name__, ret))
            return ret
        return _deco
     
    @deco
    def myfunc(a, b):
        print(" myfunc(%s,%s) called." % (a, b))
        return a+b
     
    @deco
    def myfunc2(a, b, c):
        print(" myfunc2(%s,%s,%s) called." % (a, b, c))
        return a+b+c
     
    myfunc(1, 2)
    myfunc(3, 4)
    myfunc2(1, 2, 3)
    myfunc2(3, 4, 5)

    @property 可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式

    比如

    #coding=utf-8
    
    class person(object):
    
        def __init__(self, name, age):
            self._age = age
            self._name = name
    
        def get_name(self):
            return self._name
    
        @property
        def get_age(self):
            return self._age
    
    p = person("hehe", 20)
    print p.get_name()
    print p.get_age
  • 相关阅读:
    java8 Stream排序字段为空排序方法
    SpringBoot使用token简单鉴权的具体实现方法
    性能调优
    TestNG最简单的测试
    TestNG异常测试
    TestNG中如何执行测试
    TestNG的基本注解
    TestNG介绍
    TestNG 环境搭建
    python第四课笔记
  • 原文地址:https://www.cnblogs.com/virusdefender/p/3650675.html
Copyright © 2011-2022 走看看