通过关键词采集文章采集api(10个很棒的Python特性,你不能使用了吗?)
优采云 发布时间: 2022-01-24 17:21通过关键词采集文章采集api(10个很棒的Python特性,你不能使用了吗?)
Python部落()组织翻译,禁止转载,欢迎转发
注:本文翻译自同名PPT,所以文章有很多重复的段落标题。这些标题就是页面上PPT的标题,而且PPT的标题经常重复出现。
10 个因为拒绝升级到 Python 3 而无法使用的很棒的 Python 特性,你也可以认为有 11 个特性。
序章功能 0:矩阵乘法
功能 0,因为您还不能实际使用它的目录
政治人物 465
在 Python3.5 中,您将能够使用
代替:
任何对象都可以覆盖 __matmul__ 以使用 @。
功能一:高级拆包
你曾经能够做到这一点:
现在你可以这样做:
*rest 可以出现在任何地方:
功能一:高级解包获取文件的第一行和最后一行
重构你的功能
特性 2:关键词 唯一参数
选项出现在 *args 之后。访问它的唯一方法是显式调用 f(a, b, option=True) 如果你不想采集 *args,你可以只写一个 *:
特性 2:关键词 唯一参数
不再有“糟糕,我不小心向函数传递了太多参数,其中一个将作为关键字参数接收”。
特性 2:关键词 唯一参数
将其更改为:
特性 2:关键词 唯一参数
或者,“我重新排序了函数的 关键词 参数,但有些是隐式传递的”
例子:
特性 2:关键词 唯一参数
max 内置函数支持 max(a, b, c)。我们也应该允许这样做。
我们只是打破了前面的代码,不使用 关键词 作为第二个参数来将值传递给键。
(事实上在 Python 2 中它会返回 ["a", "ab", "ac"],参见特性 6)。
顺便说一句,max 表明它在 Python2 中已经是可能的,但前提是你用 C 编写函数。
显然,我们应该使用 maxall(iterable, *, key=None) 来开始。
特性 2:关键词 唯一参数
您可以使您的 API 保持“最新”。
傻瓜式例子
好吧,也许将更长的时间放在更短的时间之前会更有意义。. .
太糟糕了,你会破坏代码。
特性 2:关键词 唯一参数
在 Python 3 中,您可以使用:
现在,a 和 b 必须像 extendto(10, short=a, long=b) 一样传入。
或者如果您愿意,可以像这样 extendto(10, long=b, short=a) 。
特性 2:关键词 唯一参数
在不破坏 API 的情况下添加新的 关键词 参数。
Python3 在标准库中执行此操作。
例如, os 模块中的函数具有 follow_symlinks 选项。
因此,您可以只使用 os.stat(file, follow_symlinks=False) 而不是 os.lstat。
如果这听起来更冗长,你可以做
代替
但是, os.stat(file, some_condition) 没有。
不要将其视为两个参数的函数。
特征二:关键词唯一参数特征三:连接异常
情况:你用except捕获异常,做某事,然后触发不同的异常。
问题:您丢失了先前异常的回溯。
刚才OSError怎么了?
特点三:连接异常
Python3 向您展示了整个异常链:
您也可以使用 raise from 手动执行此操作:
特性四:细分 OSError 子类
我刚才显示的代码是错误的。
它捕获 OSError 异常并假定它是权限错误。
但是 OSError 异常可能是由多种情况引起的(文件未找到、目录、不是目录、管道损坏等)
你确定你需要这样做:
哇。可怕。
特性四:细分 OSError 子类
Python3 通过添加一系列新的异常来解决这个问题。
你只需要这样做:
(别担心,PermissionError 是 OSError 的子类,旧的 .errno 状态码仍然有效)。
特征 5:一切都是迭代器 特征 5:一切都是迭代器
如果你这样做:
特征 5:一切都是迭代器
特征 5:一切都是迭代器 特征 5:一切都是迭代器 特征 6:并非一切都可以比较
在 Python2 中,您可以执行以下操作:
干杯。我只反驳数学。
特点6:不是所有的东西都可以比较
因为在 Python 2 中,您可以比较所有内容。
在 Python3 中,你不能这样做:
这避免了一些微妙的错误,例如所有类型的非强制转换,从 int 到 str,反之亦然。
尤其是当您隐式使用 > 时,例如 max 或 sorted。
在 Python2 中:
特征 7:产量来自
如果您使用*敏*感*词*,那就太好了。
不要这样写:
写就好了:
只需将*敏*感*词*重构为子*敏*感*词*。
特征 7:产量来自
把所有东西都变成发电机更容易。参见上面提到的“特征 5:一切都是迭代器”,你就会明白为什么要这样做。
不要堆叠来生成列表,只需 yield 或 yield from。
不好:
行:
更好的一个:
特征 7:产量来自
如果您不知道,*敏*感*词*很棒,因为:
特性8:异步IO(asyncio)
使用新的协程功能和保存的*敏*感*词*状态进行异步 IO。
不会骗你的。我还是不明白这一点。
但是这没关系。甚至大卫比兹利也很难理解这一点。
特性 9:标准库添加故障处理程序
显示(有限的)回溯,即使 Python 死得很惨。
使用 kill -9 时不起作用,但就像 segfaults 一样。
或者使用 kill -6 (程序请求异常终止)
它也可以通过 python -X faulthandler 激活。
特性九:标准库新增ipaddress
确切地。IP地址。
另一件事你不希望自己静止不动。
特性九:标准库新增 functools.lru_cache
为你的函数提供一个 LRU 缓存装饰器。
从文档中。
特性 9:标准库添加枚举
最后是标准库中的枚举类型。
仅限 Python 3.4。
使用一些魔法仅在 Python3 中有用(由于元类更改):
功能 10:有趣的 Unicode 变量名
功能注释
注释可以是任意 Python 对象。
除了将注释放入 __annotations__ 字典之外,Python 对注释不做任何事情。
但它为图书馆作者做有趣的事情开辟了可能性。
例如,IPython 2.0 小工具。
特点11:Unicode和字节流英文原文:
译者:leisants