Python 如何使用mypy导出函数签名?

Python 如何使用mypy导出函数签名?,python,mypy,Python,Mypy,我想看看mypy推断出了什么函数签名。有没有办法为我的软件包导出所有函数签名?Mypy不会尝试推断函数签名。相反,mypy(以及所有符合PEP-484的类型检查器)将函数签名本身视为“真实来源”,并根据可用签名执行所有类型检查 具体来说,一旦(手动)为函数分配了类型提示,mypy将使用该信息a)在函数内执行类型检查,b)确保任何其他类型的函数以类型安全的方式调用该函数 如果从方法中省略类型签名,mypy将完全跳过对该函数的检查。您可以通过使用--strict或--check untyped de

我想看看mypy推断出了什么函数签名。有没有办法为我的软件包导出所有函数签名?

Mypy不会尝试推断函数签名。相反,mypy(以及所有符合PEP-484的类型检查器)将函数签名本身视为“真实来源”,并根据可用签名执行所有类型检查

具体来说,一旦(手动)为函数分配了类型提示,mypy将使用该信息a)在函数内执行类型检查,b)确保任何其他类型的函数以类型安全的方式调用该函数

如果从方法中省略类型签名,mypy将完全跳过对该函数的检查。您可以通过使用
--strict
--check untyped defs
标志调用mypy来覆盖此行为。一旦这样做,mypy将假定函数的参数和返回值都是相同的


如果您正在处理一个足够大的代码库,那么手工向所有现有函数添加类型提示可能会很麻烦。在这种情况下,您可以尝试:

  • 执行整个程序类型推断要尝试推断函数的类型提示,请尝试使用。也就是说,请记住pytype仍然是一项正在进行的工作。与PEP 484类型检查器执行的更局部的类型推断相比,整个程序类型推断是一个更具挑战性的问题

  • 使用或——这些程序在运行时钩住代码,并根据代码的运行时行为尝试推断类型

  • 这两种方法都应该生成可以迭代的草稿质量类型提示


    mypy文档提供了更多关于将mypy应用于更大代码库的策略的信息:

    。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): ...
    
    这正是我在寻找的。可以生成这些文件,这些文件是
    mypy
    的一部分