你在享受十一长假时,Python 已悄悄地变了( 二 )


说到封装 , 你可能猜到他的功能并不单一 , 确实 , 排序组件 TopologicalSorter 不仅能对以及定义的结果排序 , 还可以对动态结构排序 , 例如
from graphlib import TopologicalSorterts = TopologicalSorter()ts.add(5, 3, 4)ts.add(4, 2, 3)ts.add(3, 2, 1)ts.add(2, 1)print(list(ts.static_order())) # [1, 2, 3, 4, 5]也就是说 , 可以逐步的将依赖添加进去 , 在迭代处理的情况下很方便 ,
需要注意的是 static_order 方法只能掉用一次 , 再次排序的话 , 需要重新创建 TopologicalSorter 对象
另外 , 如果拓扑图结构是个循环的 , 排序会报 CycleError 循环依赖错误
随机字节码之前要产生随机字节码 , 需要先产生随机数 , 然后从定义的字符序列中获取对应位置的字符 , 最好再转换为字节 , 是挺麻烦的 , 现在 , 一行代码搞定
import randomprint(random.randbytes(10))# b'\x0fzf\x17K\x00\xfb\x11LF'随机的 , 每次结果可能不同最小公倍数之前的 Python 版本中已经实现了最大公约数的计算 , 虽然可以用最大公约数求得最小公倍数 , 不过需要写多行代码(实际上我不记得怎么推送了)
现在 , 一行代码搞定:
import mathmath.lcm(49, 14)# 98是不是方便多了 , 不信的话 , 和下面生算对比下:
def lcm(num1, num2):if num1 == num2 == 0:return 0return num1 * num2 // math.gcd(num1, num2)lcm(49, 14)# 98功能篇功能方面 , Python 3.9 也做出了很多改善 , 下面来了解下
字符串去前缀后缀本来字符串在 Python 中的操作已经够强大了 , 很难想到它会把去前后缀的功能作为更新 , 先看看效果吧
"three cool features in Python".removesuffix(" Python")# three cool features in"three cool features in Python".removeprefix("three ")# cool features in Python"three cool features in Python".removeprefix("Something else")# three cool features in Python很简单 , 很容易想到用其他方式实现 , 代码也不会多 , 例如用 字符串的 strip 方法:
"three cool features in Python".strip(" Python")# ree cool features i很明显 , 最终的效果并不是我们想要的 ,strip 会将前后遇到的字符模式一并修剪!
如果用其他方式 , 比如字符串查找 , 正则匹配等 , 也能实现 , 不过没有现成的方法方便 , 更重要的是 , 这个特性避免了自己不小心的犯错
时区支持对我们中国来说 , 时区问题不大 , 特别是只做在国内使用的应用的话 , 但是如果在每个 , 或者其他地方 , 时区会是个问题 , 之前 , 可以通过将时间转换为 UTC 格式再转为其他时区的时间 , 现在可以方便的用 zoneinfo 模块实现了
zoneinfo 模块为标准库引入了 IANA 时区数据库
from zoneinfo import ZoneInfofrom datetime import datetimedt = datetime(2020, 10, 1, 1, tzinfo= ZoneInfo("America/Los_Angeles"))如代码所示 , 可以为本地时间设置时区 , 将时间转化为指定时区的时间
注意:使用 ZoneInfo 获取时区属性之前 , 需要安装 tzdata 模块
其他数据类型提示Python 本身是弱类型语言 , 但在一些大型项目中容易因为数据类型引入 bug , 为了改善这一点 , 对声明了数据类型的形参 , 如果实参与形参类型不符 , 执行时会得到警告提醒 , 例如
def fun(input: str):print(str)fun(10)# 此时会得到数据类型不匹配的警告更强悍的解析器Python 3.9 重构了解析器 , 虽然在日常编程中几乎感觉不到 , 但这个更新确是最重要的 , 就行如果你感觉如履平地 , 必然有人在默默付出一样