你应该知道的Python3.6、3.7、3.8新特性小结

  • Post category:Python

你应该知道的Python3.6、3.7、3.8新特性小结

Python3.6新特性

字典排序

Python3.6中,字典(Dictionary)可以在插入元素时按顺序插入。这在之前的Python版本中是不支持的。

my_dict = {'one': 1, 'two': 2, 'three': 3}
print(my_dict)

# Output: {'one': 1, 'two': 2, 'three': 3}

f-strings

Python3.6引入了一种新的字符串格式化方式,称为f-strings。可以在字符串中嵌入表达式,非常方便。

name = "Alice"
age = 25
print(f"My name is {name} and I'm {age} years old.")

# Output: My name is Alice and I'm 25 years old.

Python3.7新特性

异步生成器(asynchronous generator)

Python3.7中,添加了异步生成器这一特性,可以在异步中生成值。可以让代码更加优雅高效。

import asyncio

async def my_coroutine():
    for i in range(5):
        await asyncio.sleep(1) # 模拟异步耗时
        yield i

async def func():
    async for item in my_coroutine():
        print(item)

asyncio.run(func())

# Output: 0 1 2 3 4

async with

Python3.7中,添加了async with关键词,可以让我们更加方便的使用异步上下文管理器。

class Connection:
    async def __aenter__(self):
        # 异步连接数据库等操作
        return self

    async def __aexit__(self, exc_type, exc, tb):
        # 异步关闭连接等操作

async def func():
    async with Connection() as conn:
        # 异步使用连接
        pass

await func()

Python3.8新特性

海象操作符(walrus operator)

Python3.8中,引入了一种新的赋值表达式,称为海象操作符(walrus operator)。可以让我们更加优雅地处理需要多次计算的变量。

import random

while (n := random.randint(0, 10)) != 5:
    print(n)

# 用于替代:
n = random.randint(0, 10)
while n != 5:
    print(n)
    n = random.randint(0, 10)

Positional-only参数

Python3.8中,添加了一种新的函数参数形式,称为Positional-only参数。只能通过位置来传递参数,而不能通过关键字的方式传递。

def my_func(a, b, /, c, d, *, e, f):
    pass

my_func(1, 2, 3, 4, e=5, f=6) # 报错,Positional-only参数c传递了关键字参数
my_func(1, 2, c=3, d=4, e=5, f=6) # 正确,只使用位置传递参数

以上是Python3.6、3.7、3.8的新特性小结,这些新特性在编写Python代码时都非常有用,可以使我们的代码更加高效、优雅。