随笔分类 -  PYTHON高级编程 迭代器生成器装饰器

摘要:1 types.MethodType的作用—添加实例方法 import types class cla(object): def __init__(self, name, age): self.name = name self.age = age def prii(self): print("pri 阅读全文
posted @ 2020-05-29 10:16 秋华 编辑
摘要:问题 你想以数据管道(类似Unix管道)的方式迭代处理数据。 比如,你有个大量的数据需要处理,但是不能将它们一次性放入内存中。 解决方案 生成器函数是一个实现管道机制的好办法。 为了演示,假定你要处理一个非常大的日志文件目录: foo/ access-log-012007.gz access-log 阅读全文
posted @ 2020-05-27 12:29 秋华 编辑
摘要:os.walk 这个函数在遍历目录树的过程中产出文件名,因此递归搜索文件系统像for 循环那样简单。 用于过滤的生成器函数 模块 函数 说明 itertools compress(it,selector_it) 并行处理两个可迭代的对象;如果 selector_it中的元素是真值,产出 it 中对应 阅读全文
posted @ 2020-05-26 18:36 秋华 编辑
摘要:生成器表达式可以理解为列表推导的惰性版本:不会迫切地构建列表,而是返回一个生成器,按需惰性生成元素。也就是说,如果列表推导是制造列表的工厂,那么生成器表达式就是制造生成器的工厂。 示例 14-8 先在列表推导中使用 gen_AB 生成器函数,然后在生成器表达式中使用 >>> def gen_AB() 阅读全文
posted @ 2020-05-26 17:50 秋华 编辑
摘要:简介 设计 Iterator 接口时考虑到了惰性:next(my_iterator) 一次生成一个元素。懒惰的反义词是急迫,其实,惰性求值(lazy evaluation)和及早求值(eager evaluation)是编程语言理论方面的技术术语。 re.finditer 函数是 re.findal 阅读全文
posted @ 2020-05-26 17:37 秋华 编辑
摘要:前言 实现相同功能,但却符合 Python 习惯的方式是,用生成器函数代替SentenceIterator 类。示例 14-5 sentence_gen.py:使用生成器函数实现 Sentence 类 import re import reprlib RE_WORD = re.compile('\w 阅读全文
posted @ 2020-05-26 17:31 秋华 编辑
摘要:标准迭代器 示例 14-4 sentence_iter.py:使用迭代器模式实现 Sentence 类 import re import reprlib RE_WORD = re.compile('\w+') class Sentence: def __init__(self, text): sel 阅读全文
posted @ 2020-05-26 13:46 秋华 编辑
摘要:可迭代的对象 如果对象实现了能返回迭代器的 __iter__ 方法,那么对象就是可迭代的。 序列都可以迭代;实现了 __getitem__ 方法,而且其参数是从零开始的索引,这种对象也可以迭代。 >>> s = 'ABC' >>> it = iter(s) # ➊ >>> while True: . 阅读全文
posted @ 2020-05-26 13:11 秋华 编辑
摘要:简介 在 Python 中,所有集合都可以迭代。在 Python 语言内部,迭代器用于支持: 1.for 循环2.构建和扩展集合类型3.逐行遍历文本文件4.列表推导、字典推导和集合推导5.元组拆包6.调用函数时,使用 * 拆包实参 语言内部使用 iter(...) 内置函数处理可迭代对象的方式 序列 阅读全文
posted @ 2020-05-26 12:40 秋华 编辑
摘要:类装饰器装饰类方法 不带参数 from functools import wraps import types class CatchException: def __init__(self,origin_func): wraps(origin_func)(self) def __get__(sel 阅读全文
posted @ 2020-05-25 14:03 秋华 编辑
摘要:函数装饰器装饰类 单例模式 from functools import wraps def singleton(cls): instances = {} @wraps(cls) def get_instance(*args, **kw): if cls not in instances: insta 阅读全文
posted @ 2020-05-24 11:12 秋华 编辑
摘要:内置的装饰器和普通的装饰器原理是一样的,只不过返回的不是函数,而是类对象,所以更难理解一些。 @property 在了解这个装饰器前,你需要知道在不使用装饰器怎么写一个属性。 def getx(self): return self._x def setx(self, value): self._x 阅读全文
posted @ 2020-05-24 11:03 秋华 编辑
摘要:回到装饰器上的概念上来,装饰器要求接受一个callable对象,并返回一个callable对象(不太严谨,详见后文)。 那么用类来实现也是也可以的。我们可以让类的构造函数__init__()接受一个函数,然后重载__call__()并返回一个函数,也可以达到装饰器函数的效果。 基本类装饰器 clas 阅读全文
posted @ 2020-05-24 10:53 秋华 编辑
摘要:叠放装饰器 示例 7-19 演示了叠放装饰器的方式:@lru_cache 应用到 @clock 装饰fibonacci 得到的结果上。在示例 7-21 中,模块中最后一个函数应用了两个 @htmlize.register 装饰器。 把 @d1 和 @d2 两个装饰器按顺序应用到 f 函数上,作用相当 阅读全文
posted @ 2020-05-23 22:02 秋华 编辑
摘要:示例 7-15 定义了一个装饰器,它会在每次调用被装饰的函数时计时,然后把经过的时间、传入的参数和调用的结果打印出来。示例 7-15 一个简单的装饰器,输出函数的运行时间 import time def clock(func): def clocked(*args): # ➊ t0 = time.p 阅读全文
posted @ 2020-05-23 21:19 秋华 编辑
摘要:变量作用域规则 在示例 7-4 中,我们定义并测试了一个函数,它读取两个变量的值:一个是局部变量 a,是函数的参数;另一个是变量 b,这个函数没有定义它。 >>> def f1(a): ... print(a) ... print(b) ... >>> f1(3) 3 Traceback (most 阅读全文
posted @ 2020-05-23 20:59 秋华 编辑
摘要:简介 装饰器是可调用的对象,其参数是另一个函数(被装饰的函数)。 装饰器可能会处理被装饰的函数,然后把它返回,或者将其替换成另一个函数或可调用对象。 形式 假如有个名为 decorate 的装饰器: @decorate def target(): print('running target()') 阅读全文
posted @ 2020-05-22 18:30 秋华 编辑

点击右上角即可分享
微信分享提示