开篇: python是一门近年来非常火热的一门编程语言, 同时也有着一个优秀的团队在不停的更新.目前python3也已经进入了第12个版本的迭代中, 本篇文章将通过一些简短的示例 来列举一些比较有意思的语法
依赖: 因某些语法与版本有着强关联关系 推荐使用python3.10及以上
def fn(flag: int, condition: bool) -> any: # python版本需大于等于3.10
match flag: # 需要判断的值
case 1:
print("进入了第一个分支")
case 1 if condition: # case为关键字 后面跟随的是模式匹配的值, 当值被命中则进入当前分支 若当前分支后跟随路由守卫 需两个条件完全匹配
print("进入带有路由守卫的条件分支1")
case 2 if condition is not True:
print("进入带有路由守卫的条件分支2")
case _: # python中 下换线为省略符,代表不获取当前值 模式匹配中,若上方的分支都未被命中 则进入默认分支
print("进入默认分支")
def fn(flag: int) -> any:
number = 0
if number > flag:
number += 1
print(number)
# 使用海象运算符
if (number := 0) > flag:
number += 1
print(number)
def fn(flag: int) -> any:
# 正常表达式
number = 0
if number > flag:
number = flag
print(number)
# 判断赋值表达式
number = flag if number > flag else 0 # 其代表的意思为, number大于flag的时候 number =flag 如果小于 则赋值为0
# 列表推导式
def fn() -> list[dict]:
dataDist = [
{
"name": "zhangsan",
"age": 15
},
{
"name": "李四",
"age": 17
},
{
"name": "王二麻子",
"age": 23
}
]
return [d for d in dataDist if d.get("age") > 16]
print(fn())
# 字典推导式
def fn() -> list[dict]:
dataDist = [
{
"name": "zhangsan",
"age": 15
},
{
"name": "李四",
"age": 17
},
{
"name": "王二麻子",
"age": 23
}
]
return [{k: v for k, v in d.items() if k == "age" and v > 15} for d in dataDist]
print(fn())
# 基本使用
import asyncio
# 关键字 async
async def fn(n: int) -> any:
for _ in range(n):
print("fn1")
await asyncio.sleep(0.1) # 需阻塞等待让出cpu调度执行权, 不然会报错当前方法未等待
# 异步执行方式
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.gather(*[fn(5) for _ in range(2)]))
# 关键字 async
async def fn(n: int) -> any:
for i in range(n):
print("fn1")
await asyncio.sleep(0.1) # 需阻塞等待让出cpu调度执行权, 不然会报错当前方法未等待
yield i # 通过yield关键字实现一个异步生成器 再通过另外一个异步方法进行循环, 这里调用yield其实是隐式的实现了__aiter__和 __anext__
# async for 实现
async def fn1() -> any:
async for i in fn(10):
print(i)
# 执行方式
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.gather(fn1()))
# 第三种 async with实现
from typing.io import IO
class WriteZip:
def __init__(self, path, mode):
self.path = path
self.mode = mode
self.__file: IO = None
async def __aenter__(self):
self.__file = open(self.path, mode=self.mode)
return self.__file
async def __aexit__(self, exc_type, exc_val, exc_tb):
self.__file.close()
async def fn(path):
async with WriteZip(path, "wb+") as f:
f.write("dd\n")