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

大家好,我是欧子!

最近翻看了一下Python的新功能,发现每个版本的更新都在推陈出新,给我们的日常开发工作带来了不少便利。

这让我不禁感慨,技术真是一门永无止境的艺术,总是让人有惊喜,同时也提醒我得及时更新自己的“武器库”,以免被新时代的浪潮拍在沙滩上。🎉

接下来,我给大家聊聊在Python这门语言中,一些可能已经被“拍死在沙滩上”的老方法,看看我们该如何拥抱这些新功能。

1. Pathlib vs. OS 模块

还记得以前用os.path处理文件路径时,那些长长的字符串吗?简直是个噩梦。👻Python自从3.4版本开始,就引入了pathlib模块,颠覆了传统文件路径操作的方式。

这玩意儿就像是从土里钻出来的金矿,让代码变得更优雅和易读。

from pathlib import Pathimport os.path# 老方式two_dirs_up = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# 新方式,可读性强two_dirs_up = Path(__file__).resolve().parent.parent

在新方式中,路径被视为对象而不是字符串,可以直接通过对象属性来操作它,简直是程序员的福音。比如说,获取文件的名字、后缀、父目录等等都可以用下面这种简单的方式:

readme = Path("README.md").resolve()print(f"Absolute path: {readme.absolute()}")  # 绝对路径print(f"File name: {readme.name}")            # 文件名print(f"Path root: {readme.root}")            # 根路径print(f"Parent directory: {readme.parent}")   # 父目录print(f"File extension: {readme.suffix}")     # 文件后缀print(f"Is it absolute: {readme.is_absolute()}")  # 是否为绝对路径

我最喜欢的特性就是可以用“/”操作符来连接路径:

etc = Path('/etc')joined = etc / "cron.d" / "anacron"print(f"Exists? - {joined.exists()}")  # 查看路径是否存在

路径操作像“切蛋糕”一样简单易懂,旧的os.path已经远远落后于时代潮流啦。

2. Secrets vs. OS 模块

再来说说secrets模块,这个模块是3.6版新引入的。以前大家用os.urandom来生成随机字节串,但secrets更适合生成安全令牌,特别是密码等敏感信息。

import secretslength = 64value = secrets.token_bytes(length)print(f"Bytes: {value}")value = secrets.token_hex(length)print(f"Hex: {value}")

用secrets的好处是,它提供了很多生成随机数据的方法,并且是为安全目的设计的。

而random模块可不能这么用哦,别再用它来生成密码了,否则你的密码可能会像年会奖品一样“随机”。

读者福利:对Python感兴趣的童鞋,为此小编专门给大家准备好了Python全套的学习资料

想要学习Python并且达到能做副业、兼职接单、提升自己收入的小伙伴,我给大家分享一套Python学习资料分享《python安装工具&全套学习资料》免费分享(安全链接,放心点击)

3. Zoneinfo vs. pytz

在Python 3.9之前,操作时区我们都得依赖pytz库。现在,Python自带了zoneinfo模块,让时区操作变得更简洁。

from datetime import datetimefrom zoneinfo import ZoneInfonyc = ZoneInfo("America/New_York")localized = datetime(2022, 6, 4, tzinfo=nyc)print(f"Datetime: {localized}, Timezone: {localized.tzname()}, TZ Info: {localized.tzinfo}")

这个改动对于时区处理来说无疑是个巨大提升,但要注意,如果系统没有时区数据,还得依赖tzdata包来补充。

4. Dataclasses vs. Namedtuple

Python 3.7带来了dataclasses,让我们在定义数据结构时省了不少事。它可以替代namedtuple,不仅能创建不可变对象,还能支持默认值和类型提示。

from dataclasses import dataclass@dataclassclass User:    name: str    surname: str    password: bytesu = User("John", "Doe", b'secret')print(u)

这不光简化了代码,还提升了可读性。至于性能差异嘛,除非你要创建上百万个实例,否则差别微乎其微。

毕竟,我们都知道程序员最大的敌人就是拖延症,而不是执行效率。

5. 正确的日志记录 vs. print

有时候我们为了调试代码,经常会习惯性地在代码中用print来输出信息,但在生产环境中,使用logging模块会是更好的选择。

import logginglogging.basicConfig(    filename='application.log',    level=logging.WARNING,    format='[%(asctime)s] {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s',    datefmt='%H:%M:%S')logging.error("Some serious error occurred.")logging.warning('Some warning.')

logging不仅能帮助我们更好地记录信息,还能方便地设置日志等级、格式等,带来更好的调试体验。

6. f-strings vs. format

有多少次我们用str.format()去拼接字符串?自从Python3.6推出f-strings后,拼接字符串就像开挂了一样简单。

name = "world"print(f"Hello, {name}!")

然而,f-strings并不是万能的,像动态模板这样的需求,仍然需要用str.format()去实现。

def func(tpl: str, param1: str, param2: str) -> str:    return tpl.format(param1=param1, param2=param2)
some_template = "First template: {param1}, {param2}"another_template = "Other template: {param1} and {param2}"print(func(some_template, "Hello", "World"))print(func(another_template, "Hello", "Python"))

f-strings更适合静态字符串拼接,所以两者各有千秋,看需求使用吧。

7. Tomllib vs. tomli

最后,我们来聊聊TOML配置文件的处理方式。Python 3.11引入了tomllib,不再需要额外安装tomli库。

import tomllibwith open("pyproject.toml", "rb") as f:    config = tomllib.load(f)    print(config)

减少一个依赖就是少一种烦恼,尤其是在多版本环境下,内置库总能给人一种“稳如老狗”的安全感。

总结

Python更新的步伐从未停歇,每个新版本都有不少令人兴奋的新特性。我建议大家常常查看Python的发行说明,不仅能帮你跟上技术的脚步,还能让你的代码更优雅、更高效。

毕竟,和Python一起成长,才不辜负这门语言的美好。😎

所以,赶快把这些新特性整合到你的项目中吧!

图片

 读者福利:对Python感兴趣的童鞋,为此小编专门给大家准备好了Python全套的学习资料

 全套Python学习资料分享《python安装工具&全套学习资料》免费分享(安全链接,放心点击)

Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

图片

视频教程

大信息时代,传统媒体远不如视频教程那么生动活泼,一份零基础到精通的全流程视频教程分享给大家

图片

实战项目案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

图片

图片

副业兼职路线

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值