通过关键词采集文章采集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

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线