Python 3有何新变化
Python是一门广泛使用的编程语言,大约在1991年由Guido van Rossum开发而成。Python 3于2008年发布,其最新版Python 3.9于2020年10月发布,引入了许多新变化。下面我们来看看Python 3有哪些新的变化吧。
1. 标准化的类型注释
Python 内置了一种类型提示机制,可以用注释的形式指定一个函数或方法的参数类型和返回值类型。Python 3.5 之前的版本,在类型提示方面比较不规范,可能会出现类型提示与实际运行结果不一致的情况。Python 3.5 引入了标准库 typing,支持更为规范、复杂的类型提示。下面是一个使用typing的例子:
def greet(name: str) -> str:
return "Hello, " + name
上面的代码使用了 str
类型标注参数和返回类型。
2. “用async和await代替原来的yield from”
Python 3.5 引入了 async
和 await
两个关键字,使得协程(coroutine)的编写更加简洁明了。在 Python 3.5 之前,我们可以使用 yield from
实现协程,但是其语法比较复杂。下面是一个使用 async
和 await
的例子:
async def coroutine(name):
for i in range(5):
await asyncio.sleep(1)
print("hello, " + name)
loop = asyncio.get_event_loop()
tasks = [
loop.create_task(coroutine('Alice')),
loop.create_task(coroutine('Bob')),
]
loop.run_until_complete(asyncio.wait(tasks))
3. Pathlib库
引入 pathlib 模块是为了在操作路径时更简单,可以使用面向对象的方式进行常规操作,而不需要使用 os 模块。PathLib库的文档十分详细易懂,而且它还支持抽象文件系统。下面是一个使用PathLib的例子:
from pathlib import Path
file_path = Path.home() / "test.txt"
with file_path.open(mode="w") as fp:
fp.write("Hello, World!")
print(file_path.read_text())
上述代码使用 Path.home()
获取用户文件夹的路径,并将 test.txt
文件写入该目录中。然后输出文件中的内容。
4. 字符串格式化语法
Python 3.6 引入了一种新的字符串格式化方式,支持使用 f 或 F 前缀的字符串字面值中的花括号 “{}” 进行字符串格式化操作,并使用其中的表达式的值替换其中的内容。下面是一个使用 f-string 的例子:
name = "Alex"
age = 18
print(f"Hello, {name}. You are {age} years old")
5. 改进的解释器性能
Python 3.9 引入了全新的解释器 cPython,实现了对元组解包的优化等,使得 Python 3 的性能得到了大幅提升。
6. 可变的字典序列
Python 3.7 引入了新的字典数据类型 collections.abc.MutableMapping
,这是对字典的扩展,使其能够像序列那样进行修改。由于字典是无序的,所以为了保证可变字典的顺序,还引入了 collections.OrderedDict
。下面是一个使用 OrderedDict 的例子:
from collections import OrderedDict
dic = OrderedDict()
dic['a'] = 1
dic['b'] = 2
dic['c'] = 3
print(dic)
输出结果:
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
7. 异常链式表示
Python 3.3 引入了新的异常表示方式,可以使异常信息传递更清晰。我们可以使用 __context__
属性将异常链起来,使用 __cause__
属性表示原始异常。下面是一个使用异常链式表示的例子:
try:
1 / 0
except ZeroDivisionError as e1:
raise ValueError("invalid value") from e1
上述代码中,如果除数为零,则会抛出一个 ZeroDivisionError
异常。为了更好地展示当前错误的来源,我们使用 from
关键字把这个错误链接到 ValueError
异常中。
结论
Python 3 必然会有更多的改进和新特性,它正在不断积极地发展。上述只是Python 3的一些最新特性,也是我们比较常用的几个方面。 熟悉Python 3的新特性,会使得我们在不断优化使用Python 3方面有很大的帮助和便利。