几个被淘汰的Python库,请不要再用!

随着每个 Python 版本的发布,都会添加新模块,并引入新的更好的做事方式,虽然我们都习惯了使用好的旧 Python 库和某些做事方式,但现在也时候升级并利用新的和改进的模块及其特性了。,几个被淘汰的Python库,请不要再用!,pathlib 绝对是 Python 标准库中最近添加的更大的内容之一, 自 Python 3.4 以来,它一直是标准库的一部分,但很多人仍然使用 os 模块进行文件系统操作。,然而,pathlib 与旧的 os.path 相比具有许多优点 – 虽然 os 模块以原始字符串格式表示路径,但 pathlib 使用面向对象的样式,这使得它更具可读性和编写自然:,路径被视为对象而不是字符串这一事实也使得可以创建一次对象,然后查找其属性或对其进行操作:,我最喜欢 pathlib 的一个特性是可以使用 /(“除法”)运算符来连接路径:,重要的是要注意 pathlib 只是替代 os.path 而不是整个 os 模块, 它还包括 glob 模块的功能,因此如果你习惯于将 os.path 与 glob.glob 结合使用,那么你可以完全用pathlib替代它们。,在上面的片段中,我们展示了一些方便的路径操作和对象属性,但 pathlib 还包括你习惯于 os.path 的所有方法,例如:,有关 os.path 函数到 pathlib 中新函数的完整映射,请参阅 官方文档。,说到 os 模块,你应该停止使用的另一部分是 os.urandom。相反,你应该使用自 Python 3.6 以来可用的新秘密模块:,使用 os.urandom 实际上并不是这里的问题,引入secrets模块的原因是因为人们使用随机模块来生成密码等,即使随机模块不产生密码安全令牌。,根据文档,随机模块不应用于安全目的, 你应该使用 secrets 或 os.urandom,但 secrets 模块绝对更可取,因为它比较新,并且包含一些用于十六进制令牌的实用程序/便利方法以及 URL 安全令牌。,在 Python 3.9 之前,没有用于时区操作的内置库,所以每个人都在使用 pytz,但现在我们在标准库中有 zoneinfo,所以是时候切换了。,datetime 模块将所有时区操作委托给抽象基类 datetime.tzinfo, 这个抽象基类需要一个具体的实现——在引入这个很可能来自 pytz 的模块之前。现在我们在标准库中有 zoneinfo,我们可以使用它。,然而,使用 zoneinfo 有一个警告——它假定系统上有可用的时区数据,UNIX 系统就是这种情况, 如果你的系统没有时区数据,那么你应该使用 tzdata 包,它是由 CPython 核心开发人员维护的第一方库,其中包含 IANA 时区数据库。,Python 3.7 的一个重要补充是 dataclasses 包,它是 namedtuple 的替代品。,你可能想知道为什么需要替换 namedtuple?以下是你应该考虑切换到数据类的一些原因:,切换真的不应该太难,因为你只需要更改定义:,在上面的代码中,我们还包含了大小比较,因为这是 namedtuple 和数据类之间的较大差异之一,如上所见,命名元组的大小要小得多,这是由于数据类使用 dict 来表示属性。,至于速度比较,除非你计划创建数百万个实例,否则属性的访问时间应该基本相同,或者不够重要:,如果以上内容说服了你打算切换到数据类,请尽快尝试吧,相反,如果你不想切换并且出于某种原因真的想使用命名元组,那么你至少应该使用键入模块而不是collections中的 NamedTuple:,最后,如果你既不使用 namedtuple 也不使用数据类,你可能需要考虑直接使用 Pydantic。,这不是标准库的最新添加,但值得使用 – 你应该使用正确的日志记录而不是打印语句, 如果你在本地调试问题,则可以使用 print,但对于任何无需用户干预即可运行的生产就绪程序,正确的日志记录是必须的。,特别是考虑到设置 Python 日志记录非常简单:,与打印语句相比,上面的简单配置将为你提供卓越的调试体验, 最重要的是,你可以进一步自定义日志库以记录到不同的位置、更改日志级别、自动轮换日志等。,Python 包含很多格式化字符串的方法,包括 C 样式格式化、f 字符串、模板字符串或 .format 函数, 不过,其中之一 – f-strings – 格式化的字符串文字 , 它们写起来更自然,可读性更强,并且是前面提到的选项中最快的。,因此,我认为没有必要争论或解释为什么要使用它们,然而,在某些情况下不能使用 f 字符串:,使用 % 格式的唯一原因是用于记录:,在上面的示例中,如果你使用 f 字符串,则表达式将立即计算,而使用 C 样式格式,替换将被推迟到实际需要时,这对于消息分组很重要,其中具有相同模板的所有消息都可以记录为一个, 这不适用于 f 字符串,因为模板在传递给记录器之前填充了数据。,此外,有些事情是 f-strings 根本无法做到的, 例如在运行时填充模板 – 即动态格式 – 这就是 f-strings 被称为文字字符串格式的原因:,最重要的是,尽可能使用 f 字符串,因为它们更具可读性和更高性能,但请注意,在某些情况下仍然首选和/或需要其他格式样式。,TOML 是一种广泛使用的配置格式,对于 Python 的工具和生态系统尤其重要,因为它用于 pyproject.toml 配置文件, 到目前为止,你必须使用外部库来管理 TOML 文件,但是从 Python 3.11 开始,将有一个名为 tomllib 的内置库,它基于 toml 包。,所以,一旦你切换到 Python 3.11,你应该养成使用 import tomllib 而不是 import tomli 的习惯。少了一种需要担心的依赖!,最后一个更像是弃用通知:,由于 Distutils 已弃用,因此同样不鼓励使用任何来自 distutils 的函数或对象,Setuptools 旨在替换或弃用所有此类用途。,是时候告别 distutils 包并切换到 setuptools 了,setuptools 文档提供了有关如何替换 distutils 用法的指导, 除此之外,PEP 632 还为 setuptools 未涵盖的部分 distutils 提供迁移建议。,每个新的 Python 版本都会带来新的特性,因此我建议你查看 Python 发行说明中的“新模块”、“不推荐使用的模块”和“已删除的模块”部分,这是了解 Python 标准重大变化的好方法 , 通过这种方式,你可以不断地将新功能和最佳实践整合到你的项目中。

文章版权声明

 1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/27819.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年6月23日
下一篇 2023年7月15日