PYTHON
a545578125
这个作者很懒,什么都没留下…
展开
-
一摞Python风格的纸牌
这是《精通python》一书中的一段代码:import collectionsCard = collections.namedtuple('Card', ['rank', 'suit'])class FrenchDeck: ranks = [str(n) for n in range(2, 11)] + list('JQKA') suits = 'spades diamo...原创 2018-03-22 15:56:52 · 1237 阅读 · 0 评论 -
可迭代对象、迭代器和生成器
我们都知道,序列可以迭代。但是,你知道为什么吗? 本文来探讨一下迭代背后的原理。序列可以迭代的原因:iter 函数。解释器需要迭代对象 x 时,会自动调用 iter(x)。内置的 iter 函数有以下作用:(1) 检查对象是否实现了 __iter__ 方法,如果实现了就调用它,获取一个迭代器。(2) 如果没有实现 __iter__ 方法,但是实现了 __getitem__ 方法,而且其参数...原创 2018-05-03 09:05:33 · 268 阅读 · 0 评论 -
python中被忽略的else
对于一个python程序员来说,else往往都是配合if来使用的,像这样:a = '12'if a == '123': print(a)else: print('出错了!') 但是,python中的else并不只能用在if之后,so,这次我们讨论一下Python流程控制中的else。 else 子句不仅能在if 语句中使用,还能在 f...原创 2018-05-03 09:04:00 · 2371 阅读 · 2 评论 -
python3 使用 上下文管理器 同时读写同一个文件
inplace 函数是个上下文管理器,为同一个文件提供了两个句柄(这个示例中的 infh 和 outfh),以便同时读写同一个文件。from contextlib import contextmanagerimport ioimport os@contextmanagerdef inplace(filename, mode='r', buffering=-1, encoding=Non...转载 2018-04-20 10:17:17 · 1750 阅读 · 0 评论 -
用__call__ 实现装饰器功能
之前我们用函数方式写了一个装饰器: https://blog.csdn.net/a545578125/article/details/79812878 但是Graham Dumpleton 和 Lennart Regebro 两位大神认为,装饰器最好通过实现 __call__ 方法的类实现,不应该通过函数实现。 下面我们就来尝试一下用类实现装饰器:import timeimp...原创 2018-04-04 15:31:39 · 691 阅读 · 1 评论 -
一个参数化的注册装饰器
为了便于启用或禁用 register 执行的函数注册功能,我们为它提供一个可选的 active 参数,设为 False 时,不注册被装饰的函数。 从概念上看,这个新的 register 函数不是装饰器,而是装饰器工厂函数。调用它会返回真正的装饰器,这才是应用到目标函数上的装饰器。为了接受参数,新的 register 装饰器必须作为函数调用registry = set()def re...转载 2018-04-04 13:26:17 · 328 阅读 · 0 评论 -
使用functools.lru_cache做备忘
标准库中最值得关注的两个装饰器是 lru_cache 和全新的 singledispatch(Python 3.4 新增)。使用functools.lru_cache做备忘functools.lru_cache 是非常实用的装饰器,它实现了备忘(memoization)功能。这是一项优化技术,它把耗时的函数的结果保存起来,避免传入相同的参数时重复计算。LRU 三个字母是“Least Recentl...转载 2018-04-04 09:55:58 · 739 阅读 · 0 评论 -
functools.wraps 装饰器
通常我们实现的装饰器有几个缺点:不支持关键字参数,而且遮盖了被装饰函数的 __name__ 和 __doc__ 属性。 使用functools.wraps 装饰器可以把相关的属性进行 复制到 。此外,这个新版还能正确处理关键字参数。import timeimport functoolsdef clock(func): @functools.wraps(func) ...转载 2018-04-04 09:42:58 · 280 阅读 · 0 评论