你应该知道的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代码时都非常有用,可以使我们的代码更加高效、优雅。