特性 | 代码 | 对比 |
---|---|---|
新增内置函数breakpoint() | """猜数字游戏""" def guess(target): user_guess = input("请输入你猜的数 >>> ") breakpoint() //加入这一行 if user_guess == target: return "你猜对了!" else: return "猜错了" if name == 'main': a = 100 print(guess(a)) |
请输入你猜的数 >>> 100 > d:\work\for_test\py3_test\test.py(7)guess() -> if user_guess == target: (Pdb) locals() {'target': 100, 'user_guess': '100'} (Pdb) type(user_guess) <class 'str'> |
类型和注解 | # 带类型注解 def foo(bar: 'Describe the bar', baz: print('random')) -> 'return thingy': |
# 不带类型注解 def foo(bar, baz): |
生成器异常处理 | 在Python 3.7中,生成器引发StopIteration异常后,StopIteration异常将被转换成RuntimeError异常,那样它不会悄悄一路影响应用程序的堆栈框架。这意味着如何处理生成器的行为方面不太敏锐的一些程序会在Python 3.7中抛出RuntimeError。在Python 3.6中,这种行为生成一个弃用警告;在Python 3.7中,它将生成一个完整的错误。 一个简易的方法是使用try/except代码段,在StopIteration传播到生成器的外面捕获它。更好的解决方案是重新考虑如何构建生成器――比如说,使用return语句来终止生成器,而不是手动引发StopIteration。 |
- |
开发模式 | Python解释器添加了一个新的命令行开关:-X,让开发人员可以为解释器设置许多低级选项。 这种运行时的检查机制通常对性能有重大影响,但在调试过程中对开发人员很有用。 -X 激活的选项包括: asyncio模块的调试模式。这为异步操作提供了更详细的日志记录和异常处理,而异常操作可能很难调试或推理。 面向内存分配器的调试钩子。这对于编写CPython扩展件的那些人很有用。它能够实现更明确的运行时检查,了解CPython如何在内部分配内存和释放内存。 启用faulthandler模块,那样发生崩溃后,traceback始终转储出去。 |
|
高精度时间函数 | 新的时间函数使用后缀_ns。比如说,time.process_time()的纳秒版本是time.process_time_ns()。请注意,并非所有的时间函数都有对应的纳秒版本。 | |
其他新特性 | ||
- | 字典现在保持插入顺序, 这在 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。 |
网友评论