【Todo】Python面试题分析记录(修饰器等)

首先,看这一段代码:

class A(object):
    x = 1
    gen = (lambda t: (t for _ in xrange(10)))(x)
if __name__ == '__main__':
    print(list(A.gen))

打印出:

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

装饰器学习:

看这篇文章应该就可以了:《Python装饰器学习(九步入门)

里面提到

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

内置的装饰器有三个,分别是staticmethod、classmethod和property,作用分别是把类中定义的实例方法变成静态方法、类方法和类属性。由于模块里可以定义函数,所以静态方法和类方法的用处并不是太多,除非你想要完全的面向对象编程。而属性也不是不可或缺的,Java没有属性也一样活得很滋润。从我个人的Python经验来看,我没有使用过property,使用staticmethod和classmethod的频率也非常低。

重点关注第11行的@timeit,在定义上加上这一行与另外写foo = timeit(foo)完全等价,千万不要以为@有另外的魔力。除了字符输入少了一些,还有一个额外的好处:这样看上去更有装饰器的感觉。

 
class Rabbit(object):
     
    def __init__(self, name):
        self._name = name
     
    @staticmethod
    def newRabbit(name):
        return Rabbit(name)
     
    @classmethod
    def newRabbit2(cls):
        return Rabbit('')
     
    @property
    def name(self):
        return self._name
这里定义的属性是一个只读属性,如果需要可写,则需要再定义一个setter: @name.setter def name(self, name): self._name
= name

http://blog.csdn.net/mdl13412/article/details/22608283

里面给出了一些实例参考

本文主要讲解原理性的东西,具体的实例可以参考下面的链接:
Python装饰器实例:调用参数合法性验证

Python装饰器与面向切面编程

Python装饰器小结

Python tips: 超时装饰器, @timeout decorator

python中判断一个运行时间过长的函数

python利用装饰器和threading实现异步调用

python输出指定函数运行时间的装饰器

python通过装饰器和线程限制函数的执行时间

python装饰器的一个妙用

通过 Python 装饰器实现DRY(不重复代码)原则

对于类方法的装饰器,有人给出如下方案:

def decorator(args):
    def _deco(func):
        def _func(self):
            print args
            print 'gooooo'
            func(self)
            print 'fooo'
        return _func

    return _deco

关于直接对类编写装饰器,如下:

http://www.2cto.com/kf/201603/494405.html

中文编码

可以看这里:http://www.cnblogs.com/charlesblc/p/6159109.html 

其他的后续再看吧...




原文地址:https://www.cnblogs.com/charlesblc/p/6159104.html