一文盘点python新特性变迁 | python小知识

一文盘点python新特性变迁

在Python的不断发展中,每一个新版本都带来了众多令人兴奋的新特性和改进。从Python 3.5到3.12,这些版本不仅巩固了Python在编程领域的地位,还为开发者提供了更加强大和灵活的工具本文将详细讲解从 Python 3.5 到 Python 3.12 各个版本中新增的重要特性,并通过代码示例进行说明。

1. Python 3.5 新特性

1.1 asyncawait 关键字

Python 3.5 引入了 asyncawait 关键字,用于简化异步编程。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_0001000000 等价,但使用下划线使数字更易读。

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 各个版本的新特性有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值