Python Runtime Services 和编译器,环境有关的服务

官网

Sys

  • argv 获取脚本的参数

print(ssy.argv)
["test.py", "12", "324"]
  • stdin

print(sys.stdin)  # 用于python处理pipe数据

traceback -- Print or retrieve a stack traceback

官网

traceback.print_stack()  # 直接print出stack
log = traceback.format_exc()  # 记录报错的stack
stack = traceback.format_stack()  # 记录当前的stack

dataclass

官网 参考
查看typing可以了解更多方法 自动帮你实现 __eq__, __repr__, __init__

from dataclasses import dataclass, field

@dataclass
class InventoryItem:
    name: str
    unit_price: float
    quantity_on_hand: int = 0
    mylist: list[int] = field(default_factory=list)

    def total_cost(self) -> float:
        return self.unit_price * self.quantity_on_hand

post_init后处理

官网
用来在初始化实例后, 根据实例的属性, 自动生成其他属性

@dataclass
class Student:
    first_name: str
    last_name: str
    display_name: str = None

    def __post_init__(self):
        if self.display_name is None:
            self.display_name = self.first_name + " " + self.last_name

asdict/astuple

官网
把dataclass对象转化成dict. 注意, 如果是List[Obj], asdict后可以正常变成list. 但是再通过 Obj(**data)后, 会导致原来的List[Obj]会变成List[dict]

@dataclass
class Point:
     x: int
     y: int

@dataclass
class C:
     mylist: list[Point]

p = Point(10, 20)
assert asdict(p) == {'x': 10, 'y': 20}

c = C([Point(0, 0), Point(10, 4)])
assert asdict(c) == {'mylist': [{'x': 0, 'y': 0}, {'x': 10, 'y': 4}]}

contextlib

  • suppress 忽略某些报错

with contextlib.suppress(models.Model.DoesNotExist):
    item = models.Model.objects.get(id=id)
    item.children.clear()

待更新

  • [ ] warnings