一文盘点python新特性变迁
在Python的不断发展中,每一个新版本都带来了众多令人兴奋的新特性和改进。从Python 3.5到3.12,这些版本不仅巩固了Python在编程领域的地位,还为开发者提供了更加强大和灵活的工具本文将详细讲解从 Python 3.5 到 Python 3.12 各个版本中新增的重要特性,并通过代码示例进行说明。
1. Python 3.5 新特性
1.1 async
和 await
关键字
Python 3.5 引入了 async
和 await
关键字,用于简化异步编程。async
用于定义异步函数,await
用于等待异步操作完成。
import asyncio
async def say_hello():
print("Hello")
await asyncio.sleep(1)
print("World")
asyncio.run(say_hello())
解释:
async def
定义了一个异步函数say_hello
。await asyncio.sleep(1)
暂停函数执行 1 秒,模拟异步操作。asyncio.run
用于运行异步函数。
1.2 类型注解
Python 3.5 引入了类型注解,允许开发者为函数参数和返回值添加类型提示。
def greet(name: str) -> str:
return f"Hello, {name}"
print(greet("Alice"))
解释:
name: str
表示name
参数应为字符串类型。-> str
表示函数返回值应为字符串类型。
2. Python 3.6 新特性
2.1 f-strings
Python 3.6 引入了 f-strings,提供了一种更简洁的字符串格式化方式。
name = "Alice"
age = 30
print(f"{name} is {age} years old.")
解释:
f"{name} is {age} years old."
直接在字符串中嵌入变量,使代码更简洁。
2.2 数字字面量中的下划线
Python 3.6 允许在数字字面量中使用下划线,以提高可读性。
million = 1_000_000
print(million)
解释:
1_000_000
与1000000
等价,但使用下划线使数字更易读。
3. Python 3.7 新特性
3.1 dataclasses
模块
Python 3.7 引入了 dataclasses
模块,用于简化类的定义。
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
p = Point(10, 20)
print(p)
解释:
@dataclass
装饰器自动生成__init__
、__repr__
等方法,简化了类的定义。
3.2 breakpoint()
函数
Python 3.7 引入了 breakpoint()
函数,用于快速插入调试断点。
def divide(a, b):
breakpoint() # 调试断点
return a / b
print(divide(10, 2))
解释:
breakpoint()
函数会启动 Python 调试器,方便调试代码。
4. Python 3.8 新特性
4.1 海象运算符 :=
Python 3.8 引入了海象运算符 :=
,允许在表达式中进行变量赋值。
if (n := len("Hello")) > 4:
print(f"Length is {n}")
解释:
n := len("Hello")
在if
语句中同时计算字符串长度并赋值给n
。
4.2 位置参数限制
Python 3.8 引入了 /
语法,用于限制函数参数必须通过位置传递。
def greet(name, /, greeting="Hello"):
return f"{greeting}, {name}"
print(greet("Alice"))
解释:
name
参数必须通过位置传递,不能使用关键字参数。
5. Python 3.9 新特性
5.1 字典合并与更新运算符
Python 3.9 引入了 |
和 |=
运算符,用于字典的合并与更新。
dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}
merged = dict1 | dict2
print(merged)
解释:
dict1 | dict2
合并两个字典,重复键的值以dict2
为准。
5.2 zoneinfo
模块
Python 3.9 引入了 zoneinfo
模块,用于处理时区信息。
from zoneinfo import ZoneInfo
from datetime import datetime
dt = datetime(2023, 10, 1, 12, 0, tzinfo=ZoneInfo("America/New_York"))
print(dt)
解释:
ZoneInfo("America/New_York")
提供了对时区的支持。
6. Python 3.10 新特性
6.1 结构模式匹配
Python 3.10 引入了结构模式匹配(Pattern Matching),类似于其他语言中的 switch
语句。
def match_example(value):
match value:
case 1:
return "One"
case 2:
return "Two"
case _:
return "Other"
print(match_example(2))
解释:
match
语句根据value
的值进行匹配,并执行相应的代码块。
6.2 更友好的错误提示
Python 3.10 改进了错误提示,使其更加友好和详细。
# Python 3.10 之前的错误提示
# SyntaxError: invalid syntax
# Python 3.10 的错误提示
# SyntaxError: expected ':'
解释:
- Python 3.10 的错误提示更加详细,帮助开发者更快定位问题。
7. Python 3.11 新特性
7.1 异常组和 except*
Python 3.11 引入了异常组和 except*
语法,用于处理多个异常。
try:
raise ExceptionGroup("group", [ValueError("a"), TypeError("b")])
except* ValueError:
print("Handled ValueError")
except* TypeError:
print("Handled TypeError")
解释:
ExceptionGroup
允许同时抛出多个异常。except*
用于捕获特定类型的异常。
7.2 更快的执行速度
Python 3.11 通过优化解释器,显著提高了执行速度。
# Python 3.11 比之前的版本执行速度更快
import time
start = time.time()
sum(range(10**7))
end = time.time()
print(f"Time taken: {end - start} seconds")
解释:
- Python 3.11 在性能上有显著提升,尤其是在循环和数值计算方面。
8. Python 3.12 新特性
8.1 更强大的 f-strings
Python 3.12 进一步增强了 f-strings,允许在 f-strings 中使用更复杂的表达式。
x = 10
y = 20
print(f"{x + y = }")
解释:
f"{x + y = }"
输出x + y = 30
,方便调试和输出表达式结果。
8.2 新的 tomllib
模块
Python 3.12 引入了 tomllib
模块,用于解析 TOML 文件。
import tomllib
toml_data = """
[server]
host = "localhost"
port = 8080
"""
config = tomllib.loads(toml_data)
print(config["server"]["host"])
解释:
tomllib.loads
用于解析 TOML 格式的字符串。
总结
从 Python 3.5 到 Python 3.12,每个版本都带来了许多新特性和改进,使得 Python 更加强大和易用。无论是异步编程、类型注解、字符串格式化,还是性能优化,Python 都在不断进步。开发者可以根据项目需求选择合适的 Python 版本,并利用这些新特性提高开发效率和代码质量。
希望本文对你理解 Python 各个版本的新特性有所帮助!