SuperAPI AI 工具集

returns

编程与开发

查看项目

更新于 10-16 05:05

技能介绍

用途:在编写或修改导入 returns(dry-python/returns)的 Python 库代码时,帮助选对容器、保留 IO/异步标记、避免过早解包,并设计基于容器的公开 API。

主要能力与要点:

  1. 按失败类型选容器:值可能缺失用 Maybe;纯计算可能失败用 Result/ResultE;无失败的副作用用 IO;可能失败的副作用用 IOResult/IOResultE(@impure_safe);异步可能失败用 FutureResult/FutureResultE(@future_safe);需要注入依赖用 RequiresContext。不要对副作用用 @safe。
  2. bind 与 map:.map(f) 用于 A->B;.bind(f) 用于 A->Container[B]。跨容器用 .bind_result、.bind_io、.bind_ioresult、.bind_async、.bind_optional 等桥接方法。
  3. 不要提前解包:避免 .unwrap()、.failure()、._inner_value 或 try/except;在边界用 .value_or、.lash、match/is_successful。
  4. 容器转换用 returns.converters 的 maybe_to_result、result_to_maybe、flatten;partition 拆分成功与失败。
  5. 组合优先 do 记法(Result.do 等),其次 flow/pipe 配合 returns.pointfree 的 bind、map_ 等。
  6. 异步:@future_safe 生成 FutureResultE,await 后得到 IOResult,仅在程序边缘用 unsafe_perform_io 剥离 IO。
  7. 公开 API:返回 Result/Maybe/IOResult,使用 ResultE/IOResultE 别名,保留 IO 标记,可用 @safe(exceptions=(...)) 收窄异常。

限制:returns 自带 mypy 插件,pyrefly 无插件系统,其 HKT 编码(KindN/@kinded)在 pyrefly 下无法解析。具体表现:具体容器的 .map/.bind 正常;flow/pipe 退化为 Unknown;do 记法丢失错误类型;pointfree bind/map_ 泄漏 KindN 导致 bad-assignment 或 not-callable。建议在 pyrefly 项目优先用具体容器方法链与 do 记法,公开签名用具体容器类型,必要时用 # pyrefly: ignore[...] 局部抑制,或在 pyproject.toml 中排除 returns 自身路径;如需完整 HKT 类型安全,需同时运行带插件的 mypy。

其他事实(如收费、平台、版本细节)暂未提供。