如何使用 mypy 导出函数签名?
How can I export function signatures with mypy?
我想看看 mypy 推断出哪些函数签名。有没有办法为我的包裹导出所有这些?
Mypy 不会尝试推断函数签名。相反,mypy(以及所有符合 PEP-484 的类型检查器)将函数签名本身视为 "source of truth" 并根据可用签名进行所有类型检查。
具体来说,一旦(手动)为函数分配了类型提示,mypy 将使用该信息来 a) 在函数内执行类型检查,以及 b) 确保任何其他类型化函数正在调用该函数的类型-安全的方式。
如果您从方法中省略类型签名,mypy 将完全跳过对该函数的检查。您可以通过使用 --strict
或 --check-untyped-defs
标志调用 mypy 来覆盖此行为。一旦你这样做,mypy 将假设函数的参数和 return 都是 type Any
, the dynamic type.
如果您正在处理足够大的代码库,手动向所有现有函数添加类型提示可能会很繁重。那样的话,你可以试试:
执行整个程序类型推断以尝试为您的函数推断类型提示,请尝试使用 pytype。也就是说,请记住 pytype 仍在进行中。与 PEP 484 类型检查器执行的更局部类型推断相比,整个程序类型推断是一个更具挑战性的问题。
使用 Monkeytype or pyannotate -- 这些程序在运行时挂接到您的代码,并会尝试根据代码的运行时行为推断类型。
这两种方法都应该生成草稿质量的类型提示,您可以对其进行迭代。
mypy 文档提供了有关将 mypy 应用于更大代码库的策略的更多信息:https://mypy.readthedocs.io/en/latest/existing_code.html
.pyi
文件是 Python 接口文件(参见 )。它们看起来像这样:
from typing import Any, Optional
def parallel_for(loop_function: Any, parameters: Any, nb_threads: int = ...): ...
def clip(number: Any, lowest: Optional[Any] = ..., highest: Optional[Any] = ...): ...
def consistent_shuffle(*lists: Any): ...
class Location:
latitude: Any = ...
longitude: Any = ...
def __init__(self, latitude: Any, longitude: Any) -> None: ...
@property
def latitude(self): ...
@latitude.setter
def latitude(self, latitude: Any) -> None: ...
@property
def longitude(self): ...
@longitude.setter
def longitude(self, longitude: Any) -> None: ...
def get_google_maps_link(self): ...
def distance(self, there: Any): ...
这正是我要搜索的内容。这些文件可以用 stubgen
生成,它是 mypy
.
的一部分
我想看看 mypy 推断出哪些函数签名。有没有办法为我的包裹导出所有这些?
Mypy 不会尝试推断函数签名。相反,mypy(以及所有符合 PEP-484 的类型检查器)将函数签名本身视为 "source of truth" 并根据可用签名进行所有类型检查。
具体来说,一旦(手动)为函数分配了类型提示,mypy 将使用该信息来 a) 在函数内执行类型检查,以及 b) 确保任何其他类型化函数正在调用该函数的类型-安全的方式。
如果您从方法中省略类型签名,mypy 将完全跳过对该函数的检查。您可以通过使用 --strict
或 --check-untyped-defs
标志调用 mypy 来覆盖此行为。一旦你这样做,mypy 将假设函数的参数和 return 都是 type Any
, the dynamic type.
如果您正在处理足够大的代码库,手动向所有现有函数添加类型提示可能会很繁重。那样的话,你可以试试:
执行整个程序类型推断以尝试为您的函数推断类型提示,请尝试使用 pytype。也就是说,请记住 pytype 仍在进行中。与 PEP 484 类型检查器执行的更局部类型推断相比,整个程序类型推断是一个更具挑战性的问题。
使用 Monkeytype or pyannotate -- 这些程序在运行时挂接到您的代码,并会尝试根据代码的运行时行为推断类型。
这两种方法都应该生成草稿质量的类型提示,您可以对其进行迭代。
mypy 文档提供了有关将 mypy 应用于更大代码库的策略的更多信息:https://mypy.readthedocs.io/en/latest/existing_code.html
.pyi
文件是 Python 接口文件(参见
from typing import Any, Optional
def parallel_for(loop_function: Any, parameters: Any, nb_threads: int = ...): ...
def clip(number: Any, lowest: Optional[Any] = ..., highest: Optional[Any] = ...): ...
def consistent_shuffle(*lists: Any): ...
class Location:
latitude: Any = ...
longitude: Any = ...
def __init__(self, latitude: Any, longitude: Any) -> None: ...
@property
def latitude(self): ...
@latitude.setter
def latitude(self, latitude: Any) -> None: ...
@property
def longitude(self): ...
@longitude.setter
def longitude(self, longitude: Any) -> None: ...
def get_google_maps_link(self): ...
def distance(self, there: Any): ...
这正是我要搜索的内容。这些文件可以用 stubgen
生成,它是 mypy
.