小优化一下性能

This commit is contained in:
SnowindMe
2025-04-13 03:06:42 +08:00
parent a006af2548
commit c5e8ca33d0

View File

@@ -46,6 +46,7 @@ print(a) # 直接输出当前 perf_counter 值
- name计时器的名字默认为 None - name计时器的名字默认为 None
- storage计时器结果存储字典默认为 None - storage计时器结果存储字典默认为 None
- auto_unit自动选择单位毫秒或秒默认为 True自动根据时间切换毫秒或秒 - auto_unit自动选择单位毫秒或秒默认为 True自动根据时间切换毫秒或秒
- do_type_check是否进行类型检查默认为 False不进行类型检查
属性human_readable 属性human_readable
@@ -56,6 +57,8 @@ print(a) # 直接输出当前 perf_counter 值
class TimerTypeError(TypeError): class TimerTypeError(TypeError):
"""自定义类型错误""" """自定义类型错误"""
__slots__ = ()
def __init__(self, param, expected_type, actual_type): def __init__(self, param, expected_type, actual_type):
super().__init__(f"参数 '{param}' 类型错误,期望 {expected_type},实际得到 {actual_type.__name__}") super().__init__(f"参数 '{param}' 类型错误,期望 {expected_type},实际得到 {actual_type.__name__}")
@@ -68,13 +71,24 @@ class Timer:
3. 直接实例化:如果不调用 __enter__打印对象时将显示当前 perf_counter 的值 3. 直接实例化:如果不调用 __enter__打印对象时将显示当前 perf_counter 的值
""" """
def __init__(self, name: Optional[str] = None, storage: Optional[Dict[str, float]] = None, auto_unit: bool = True): __slots__ = ("name", "storage", "elapsed", "auto_unit", "start")
def __init__(
self,
name: Optional[str] = None,
storage: Optional[Dict[str, float]] = None,
auto_unit: bool = True,
do_type_check: bool = False,
):
if do_type_check:
self._validate_types(name, storage) self._validate_types(name, storage)
self.name = name self.name = name
self.storage = storage self.storage = storage
self.elapsed = None self.elapsed = None
self.auto_unit = auto_unit self.auto_unit = auto_unit
self.start = None
def _validate_types(self, name, storage): def _validate_types(self, name, storage):
"""类型检查""" """类型检查"""
@@ -129,12 +143,9 @@ class Timer:
return f"{self.elapsed:.4f}" return f"{self.elapsed:.4f}"
def __str__(self): def __str__(self):
if hasattr(self, "start"): if self.start is not None:
if self.elapsed is None: if self.elapsed is None:
# 如果计时尚未结束,显示当前经过时间
current_elapsed = perf_counter() - self.start current_elapsed = perf_counter() - self.start
return f"<Timer {self.name or '匿名'} [计时中: {current_elapsed:.4f}秒]>" return f"<Timer {self.name or '匿名'} [计时中: {current_elapsed:.4f}秒]>"
return f"<Timer {self.name or '匿名'} [{self.human_readable}]>" return f"<Timer {self.name or '匿名'} [{self.human_readable}]>"
else:
# 未使用 as 上下文,直接返回当前 perf_counter()
return f"{perf_counter()}" return f"{perf_counter()}"