Python■你应该知道的Python3.6、3.7、3.8新特性( 五 )
- asyncio模块的调试模式 。 这为异步操作提供了更详细的日志记录和异常处理 , 而异常操作可能很难调试或推理 。
- 面向内存分配器的调试钩子 。 这对于编写CPython扩展件的那些人很有用 。 它能够实现更明确的运行时检查 , 了解CPython如何在内部分配内存和释放内存 。
- 启用faulthandler模块 , 那样发生崩溃后 , traceback始终转储出去 。
新的时间函数使用后缀
_ns 。 比如说 , time.process_time()的纳秒版本是time.process_time_ns() 。 请注意 , 并非所有的时间函数都有对应的纳秒版本 。7、其他新特性
- 字典现在保持插入顺序 。 这在 3.6 中是非正式的 , 但现在成为了官方语言规范 。 在大多数情况下 , 普通的 dict 能够替换
collections.OrderedDict。
- .pyc 文件具有确定性 , 支持可重复构建 —— 也就是说 , 总是为相同的输入文件生成相同的 byte-for-byte 输出 。
- 新增
contextvars模块 , 针对异步任务提供上下文变量 。
__main__中的代码会显示弃用警告(DeprecationWarning) 。
- 新增UTF-8模式 。 在Linux/Unix系统 , 将忽略系统的locale , 使用UTF-8作为默认编码 。 在非Linux/Unix系统 , 需要使用
-X utf8选项启用UTF-8模式 。
- 允许模块定义__getattr__、__dir__函数 , 为弃用警告、延迟import子模块等提供便利 。
- 新的线程本地存储C语言API 。
- 更新Unicode数据到11.0 。
1、海象赋值表达式新的语法
:= , 将值赋给一个更大的表达式中的变量 。 它被亲切地称为 “海象运算符”(walrus operator) , 因为它长得像海象的眼睛和象牙 。“海象运算符” 在某些时候可以让你的代码更整洁 , 比如:
在下面的示例中 , 赋值表达式可以避免调用 len () 两次:
if (n := len(a)) > 10:\t
print(f\"List is too long ({n elements expected <= 10)\")
类似的好处还可体现在正则表达式匹配中需要使用两次匹配对象的情况中 , 一次检测用于匹配是否发生 , 另一次用于提取子分组:
discount = 0.0\tif (mo := re.search(r'(\\d+)% discount' advertisement)):\t
discount = float(mo.group(1)) / 100.0
此运算符也可用于配合 while 循环计算一个值 , 来检测循环是否终止 , 而同一个值又在循环体中再次被使用的情况:
# Loop over fixed length blocks\twhile (block := f.read(256)) != '':\t
process(block)
或者出现于列表推导式中 , 在筛选条件中计算一个值 , 而同一个值又在表达式中需要被使用:
[clean_name.title() for name in names\t
if (clean_name := normalize('NFC' name)) in allowed_names
请尽量将海象运算符的使用限制在清晰的场合中 , 以降低复杂性并提升可读性 。
2、仅限位置形参新增一个函数形参语法
/
- [霸王龙]地球最强“娃娃鱼”,称霸世界数万年,霸王龙:就知道欺负我
- 产业气象站|散热效果大大下降,CPU硅脂应该这样涂!涂多了得不偿失
- 「霸王龙」地球最强“娃娃鱼”,称霸世界数万年,霸王龙:就知道欺负我
- 大卫聊科技|中国首富原来是京东幕后大老板?低调过头了!,有多少人不知道
- 大头哥哥说娱乐|而自己却还不知道?教你几招快速分辨真假好友,微信已被好友删除
- Python之王|Pandas数据合并与拼接的5种方法
- 北峰电讯|你知道几个?,警用对讲机全是PDT?警察常用的模拟对讲机频段
- 王石头科技|30系列还值得买吗,应该选择哪款?,华为Mate 40要来了,Mate
- 霸王龙:地球最强“娃娃鱼”,称霸世界数万年,霸王龙:就知道欺负我
- 影弟提名1|总是打电话催你“换套餐”?可能很多人都不知道,为什么移动客服
