Python 3有何新变化

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 引入了 asyncawait 两个关键字,使得协程(coroutine)的编写更加简洁明了。在 Python 3.5 之前,我们可以使用 yield from 实现协程,但是其语法比较复杂。下面是一个使用 asyncawait 的例子:

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方面有很大的帮助和便利。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程