首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mypy是否只在函数声明了返回类型时才对其进行类型检查?

mypy是一个静态类型检查工具,用于对Python代码进行类型检查。它可以在函数声明、变量赋值、函数调用等多个场景下进行类型检查,而不仅限于函数声明的返回类型。

在函数声明中,mypy可以对函数的参数类型和返回类型进行检查。例如,我们可以使用类型注解来声明函数的参数类型和返回类型,然后运行mypy来检查代码是否符合这些类型注解。示例代码如下:

代码语言:txt
复制
def add(a: int, b: int) -> int:
    return a + b

result = add(1, 2)

在上述代码中,我们使用了类型注解来声明函数add的参数ab的类型为int,并且声明了返回类型为int。通过运行mypy,它会对函数调用add(1, 2)进行类型检查,确保传入的参数类型和返回值类型符合声明。

除了函数声明,mypy还可以对变量赋值进行类型检查。例如,我们可以使用类型注解来声明变量的类型,然后运行mypy来检查代码是否符合这些类型注解。示例代码如下:

代码语言:txt
复制
x: int = 1
y: str = "hello"

z = x + y  # 这里会触发类型错误

在上述代码中,我们使用了类型注解来声明变量x的类型为int,变量y的类型为str。通过运行mypy,它会对变量赋值z = x + y进行类型检查,发现xy的类型不匹配,从而触发类型错误。

总结来说,mypy不仅在函数声明了返回类型时对其进行类型检查,还可以在其他场景下对函数调用、变量赋值等进行类型检查,以提高代码的类型安全性和可靠性。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云函数计算(SCF):https://cloud.tencent.com/product/scf
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发(移动推送、移动分析、移动测试等):https://cloud.tencent.com/product/mobile
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云游戏多媒体引擎(GME):https://cloud.tencent.com/product/gme
  • 腾讯云视频处理(VOD):https://cloud.tencent.com/product/vod
  • 腾讯云音视频通信(TRTC):https://cloud.tencent.com/product/trtc
  • 腾讯云音视频处理(MPS):https://cloud.tencent.com/product/mps
  • 腾讯云元宇宙(Tencent XR):https://cloud.tencent.com/product/xr
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

介绍几款 Python 类型检查工具

微软开源项目上的参与力度是越来越大了,不说收购 Github 这种大的战略野心,说它家开源的 VS Code 编辑器,猿界已割粉无数,连我 Python 圈的红人 Kenneth Reitz(多个开源项目的作者...: return 'Hello ' + name 如上例所示,增加检查后,可以在编译期就判断入参和返回是否是字符串类型。...检查项齐全。支持类型检查及其它语法项的检查(如 PEP-484、PEP-526、PEP-544),以及函数返回值、类变量、全局变量的检查,甚至可以检查条件循环语句 命令行工具。...接着看谷歌的 pytype ,据文档描述,它可以: 标记常见错误,如拼写错误、函数调用错误 加强自定义的类型注解 支持 pyi 文件生成类型注解 查看文档,我发现它有个功能还挺人性化的,即“错误降噪...此外,还有一个考虑也不错,为了写类型检查,模块中可能会额外引入其它的模块,对于后者,pytype 有办法隐藏它,在做类型检查加载。

1.1K10

流畅的 Python 第二版(GPT 重译)(四)

如果我可以调用 birdie.quack(),那么在这个上下文中 birdie 就是一鸭子。根据定义,鸭子类型在运行时强制执行,当尝试对对象进行操作。...但对象在运行时存在,类型检查关心变量(包括参数)被注释为类型提示的源代码中。...更难的问题是如何整数范围进行类型检查,以防止向数组添加元素在运行时出现 OverflowError。...,并且类型检查器验证需要该协议类型的地方这些方法是否被实现。...介绍一些类型的同时,我们通过 Mypy 进行实验,以查看类型检查错误,并借助 Mypy 的神奇reveal_type()函数推断类型。 最后一节介绍了如何注释位置参数和可变参数。

30210

介绍几款 Python 类型检查工具

微软开源项目上的参与力度是越来越大了,不说收购 Github 这种大的战略野心,说它家开源的 VS Code 编辑器,猿界已经割粉无数,连我们 Python 圈的红人 Kenneth Reitz...: return 'Hello ' + name 如上例所示,增加检查后,可以在编译期就判断入参和返回是否是字符串类型。...检查项齐全。支持类型检查及其它语法项的检查(如 PEP-484、PEP-526、PEP-544),以及函数返回值、类变量、全局变量的检查,甚至可以检查条件循环语句 命令行工具。...接着看谷歌的 pytype ,据文档描述,它可以: 标记常见错误,如拼写错误、函数调用错误 加强自定义的类型注解 支持 pyi 文件生成类型注解 查看文档,我发现它有个功能还挺人性化的,即“错误降噪...此外,还有一个考虑也不错,为了写类型检查,模块中可能会额外引入其它的模块,对于后者,pytype 有办法隐藏它,在做类型检查加载。

83440

介绍几款 Python 类型检查工具

微软开源项目上的参与力度是越来越大了,不说收购 Github 这种大的战略野心,说它家开源的 VS Code 编辑器,猿界已经割粉无数,连我们 Python 圈的红人 Kenneth Reitz...: return 'Hello ' + name 复制代码 如上例所示,增加检查后,可以在编译期就判断入参和返回是否是字符串类型。...检查项齐全。支持类型检查及其它语法项的检查(如 PEP-484、PEP-526、PEP-544),以及函数返回值、类变量、全局变量的检查,甚至可以检查条件循环语句 命令行工具。...接着看谷歌的 pytype ,据文档描述,它可以: 标记常见错误,如拼写错误、函数调用错误 加强自定义的类型注解 支持 pyi 文件生成类型注解 查看文档,我发现它有个功能还挺人性化的,即“错误降噪...此外,还有一个考虑也不错,为了写类型检查,模块中可能会额外引入其它的模块,对于后者,pytype 有办法隐藏它,在做类型检查加载。

73010

深入理解 Python 的类型提示

有多种方法可以将代码转换为机器能识别的代码:你可以构建二进制文件并让编译器进行翻译(C++、Go、Rust 等),或直接运行代码并让解释器执行。... Java 中,你必须从一开始就设计好类型以便编译器将代码编译为机器码知道该检查什么。...它关心的是它调用的加法方法返回的内容是否是合理的,如果不是,就会抛出异常。 所以这意味着什么呢?... Python 2 中人们开始代码中加入提示,来表示各种函数返回了什么。...从实现细节来看: 虽然这些注释在运行时通过 annotations 属性可用,但在运行时不会进行类型检查。相反,该提议假定存在一个单独的离线类型检查器,用户可以自行运行源代码。

1.1K30

python类型检测最终指南--Typing的使用

如果您只是想快速了解一下类型提示Python中是如何工作的,并查看类型检查是否包括您的代码中,那么您不需要阅读全部内容。...使用鸭子类型根本不需要检查类型,而是检查给定方法或属性是否存在。...最后, -> str 表示函数headline() 返回类型为str。 代码风格方面,PEP 8建议如下:: 冒号使用常规规则,即冒号前没有空格,冒号后面有一个空格:text:str。...,程序不会出现错误,此时可以使用类型检查模块通过提示内容确定是否类型输入正确,如mypy。...这为推迟注释的评估提供了动力。该提议不是将注释评估为Python表达式并存储值,而是存储注释的字符串表示形式,并仅在需要进行评估。 这种功能计划在Python 4.0中成为标准。

4.6K10

使用 Mypy 检查 30 万行 Python 代码,总结出 3 大痛点与 6 个技巧!

Mypy 2013 年切换到兼容 Python 的语法,而 PEP-484 2015 年推出。...像其它增量类型检查工具一样(例如 Flow),随着代码库的注解越来越多,Mypy 的价值会与俱增。...一年后,我们完成了全部代码的类型化(#2622),并升级到最严格的 Mypy 设置(最关键的是 disallow_untyped_defs ,它要求所有函数签名进行注解),从那时起,我们一直维护着这些设置...不过,根据我的经验,即使是经验丰富的 Mypy 用户,类型检查通过之前,他们也需对本来可以正常工作的代码进行一两处更正。...1. reveal_type代码中添加reveal_type ,可以让 Mypy 在对文件进行类型检查,显示出变量的推断类型。这是非常非常非常有用的。

87620

Python 进阶指南(编程轻松进阶):十一、注释、文档字符串和类型提示

类型提示 许多编程语言都有静态类型,这意味着程序员必须在源代码中声明所有变量、参数和返回值的数据类型。这允许解释器或编译器程序运行前检查代码是否正确使用了所有对象。...describeNumber()函数类型提示显示,它接受一个整数值作为number参数,并返回一个字符串值。 如果你使用类型提示,你不必把它们应用到程序中的每一个数据。...(令人困惑的是,静态和动态在这里指的是程序是否运行,而静态类型化和动态类型化指的是我们如何声明变量和函数的数据类型。Python 是一种动态类型的语言,有静态分析工具,比如为它编写的 Mypy。)...要运行类型检查器,打开一个命令提示符或终端窗口,运行python –m mypy命令(将模块作为应用运行),向传递要检查的 Python 代码的文件名。...即便如此,静态类型检查工具源代码不运行时使用类型提示来分析源代码。类型检查器,比如 Mypy,可以确保您不会将无效值赋给传递给函数的变量。通过防止一大类错误,这可以节省您的时间和精力。

90830

神级操作!优化​Python开发环境的几个技巧

需要注意的是,pyenv电脑上搭建本地python环境。搭建python环境需要多种函数库。 Ubuntu系统的电脑上,必须安装以下函数库以防止运行出现问题。...poetry创建第一个项目之前,建议先进行配置,这样就可以项目目录中的.venv文件夹中创建虚拟环境。...因为可以静态地检查变量和函数类型是否符合预期。当然,必须是自动完成的。 下面介绍mypyMypy是一种静态python代码检查器,作用是错误发生之前找到他们。...使用poetry向项目中添加mypy进行代码检查与添加black一样简单。...Black工具的钩子函数不仅会检查格式,还会相应地为文件添加格式。 每次添加新的钩子函数,建议一开始在所有文件中手动运行pre-commit,因为它只能作用于上次提交之后更改过的文件。

1.1K10

Python 静态分析Pylint、Pyflakes 与 Mypy ——我应该用谁?

某些时候你可以选择其中一个来用,有时候你又需要把他们结合起来使用。 Pylint:让你的代码符合 PEP-8风格 PEP-8[1]是 Python 的官方编码风格指导。...我们平时常常说到的: 函数名、变量名使用小写字母和下划线,类名使用驼峰命名法 缩进使用4个空格 运算符、赋值符号左右侧都要有空格,冒号右侧有空格左侧没有空格 多行字符串用三单引号,但是 docstring...需要注意的是,由于 Pyflakes 是静态分析的工具,所以对于像'1' + 1这种异常是无法检查出来的。 Mypy:静态类型检查Mypy 让动态语言 Python 拥有静态类型检查的能力。...代码中声明了a_list是一个包含数字的列表,当你传入一个字符串的时候就会报错。...如果要检查代码中的语法错误,可以使用 Pyflakes。另有一个项目叫做 Flake8,它相当于 Pyflakes + Pylint 的合体。 如果要对代码做静态类型检查,那么使用 Mypy

4.4K10

自动化让你远离烦恼,几个小技巧轻松优化​Python开发环境

需要注意的是,pyenv电脑上搭建本地python环境。搭建python环境需要多种函数库。Ubuntu系统的电脑上,必须安装以下函数库以防止运行出现问题。...poetry创建第一个项目之前,建议先进行配置,这样就可以项目目录中的.venv文件夹中创建虚拟环境。...因为可以静态地检查变量和函数类型是否符合预期。当然,必须是自动完成的。 下面介绍mypyMypy是一种静态python代码检查器,作用是错误发生之前找到他们。...使用poetry向项目中添加mypy进行代码检查与添加black一样简单。...Black工具的钩子函数不仅会检查格式,还会相应地为文件添加格式。每次添加新的钩子函数,建议一开始在所有文件中手动运行pre-commit,因为它只能作用于上次提交之后更改过的文件。

1.2K30

可维护的Python代码库的7条规则

如果无法验证代码是否产生了预期的输出,就无法放心地进行修改。测试是团队成员之间的契约:代码的所有修改都必须通过测试。 反之,测试的修改会透明地表明代码行为的破坏性变化。...到目前为止,我们讨论了容易被开发者忽略的作为开发者文档的类型提示。像Mypy[3]这样的静态类型检查工具旨在将类型提示作为定义正确代码的规则来执行。...Mypy查看所有源代码文件,检查类型规则是否满足要求。例如,传递给函数的所有参数类型是否函数签名兼容?对象上调用的方法是否真正定义? Mypy不会运行你的代码,所以它不会捕获所有的运行时bug。...就像单元测试一样,静态类型检查增加了代码正确性的信心。 当你开始使用mypy,或者当你尝试将一个未类型化的代码库转换为类型化的代码库,你会遇到很多bug。...如果我看子类,我怎么知道self.c存在?它来自哪里?在这个例子中,所有的东西都是构造函数中实例化的,但我也见过有些状态是某个事件发生之后被初始化的;这可能会更加困惑人。

24930

python静态类型检查工具mypy

mypy 将 Python 的表达能力和便利性与强大的类型系统和编译类型检查相结合。mypy 类型检查标准 Python 程序;使用任何 Python VM 运行它们,基本上没有运行时开销。...pip3 install mypy 接下来就可以直接在使用mypy了,例如: mypy type_annotations.py 就可以实现代码进行静态类型检查,但是前提是你的代码使用了类型注解,否则mypy...mypy检查的结果是基于类型注解的,这意味你可以忽略mypy所提示的错误,把它当做警告。 默认情况下,mypy不会对动态类型函数进行类型检查。...("123", "qwe") # 静态类型检查失败 使用mypy进行静态类型检查,结果如下所示: test.py:17: error: Argument 1 to "add" has incompatible...忽略代码的静态类型检查

81310

流畅的 Python 第二版(GPT 重译)(八)

重载签名 Python 函数可以接受不同组合的参数。@typing.overload装饰器允许这些不同组合进行注释。当函数返回类型取决于两个或更多参数的类型,这一点尤为重要。...示例 15-6 构建了一个有效的 BookDict,并尝试进行一些操作。这展示了 TypedDict 如何使 Mypy 能够捕获错误,如 示例 15-7 中所示。...现在让我们看看在函数签名中使用 BookDict,以进行函数调用的类型检查。...Mypy 0.930 文档解释: Casts 用于消除杂乱的类型检查器警告,并在类型检查器无法完全理解情况提供一点帮助。 在运行时,typing.cast 绝对不起作用。...示例 16-11 中,__mul__方法没有scalar进行显式类型检查,而是将其转换为float,如果失败则返回NotImplemented。这是鸭子类型的一个明显例子。

13710

流畅的 Python 第二版(GPT 重译)(七)

上半部分描述了仅使用 Python 解释器进行运行时类型检查的方法;下半部分需要外部静态类型检查器,如 MyPy 或 PyCharm 这样的 IDE。...警告 虚拟子类不会从注册的 ABC 继承,并且在任何时候都不会检查是否符合 ABC 接口,即使实例化时也是如此。此外,静态类型检查器目前无法处理虚拟子类。...让我们首先展示静态协议如何使得我们可以对我们类型由支持的操作定义”中首次看到的double()函数进行注释和类型检查。...然后返回的项目进行了静态和运行时检查。...难怪 Mypy 即使短小的 Python 脚本进行类型检查也需要几秒钟的时间。 ²⁰ 阅读 Python Steering Council python-dev 上的决定。

12810

3种适用于Python的疯狂秘密武器及原因解析

…我们已经花费了大约50年的工程师工作时间,Github上所有代码进行语义索引,建立统计类型推断,以及丰富的统计模型,这些模型可以非常深入地使用此语义信息。...缺点很多,但也很大: 开发周期的后期,您通常会遇到错误 由于Python不断找出类型,因此代码的执行效果更差 函数不稳定,因为输入和输出可以更改数据类型而不会发出警告 交出代码会更加不稳定,因为其他人可能不知道您的变量是或可能成为哪种数据类型...def iter_primes() - Iterator[int]: # code here mypy示例中,我们指定该函数返回一个整数迭代器。...动态代码分析实际上会尝试运行/编译部分代码以查看是否正常运行,但会在后台自动执行。 实际上,它无需猜测,而是知道它是否可以工作以及确切的错误是什么。...这些功能是我喜欢它的原因: 注释或未调用的代码 我整个代码库中留下打印语句,注释掉的代码以及未使用的函数感到内gui。 这将警告我,使其难以忘记,并告诉我它在哪里,易于查找。

89430

@程序员:Python 3.8正式发布,重要新功能都在这里

有些库可以在运行时使用类型,但这并不是Python类型系统的主要用例。 相反,类型提示允许静态类型检查Python代码进行类型检查,而无需实际运行脚本。...将类型添加到draw_line(),你已经使用了后者。如果仔细查看上面Mypy的输出,你会发现它在内部将较简单的表示法转换为Union表示法。 某些情况下,函数返回值的类型取决于输入参数。...但是,通常会以true或False作为to_roman的值来调用此代码,在这种情况下,你会希望类型检查器准确推断出是否返回str或int。...协议是一种规范Python鸭子类型支持的方式: 当我看到一鸟走路像鸭子,游泳像鸭子,像鸭子一样嘎嘎叫,我把它称为鸭子。...后者用于检查是否有相等的值,而只有在对象相同时为true。

2.3K20

​Python 3 新特性:类型注解

,用 -> 类型 的形式指定函数返回类型。...然后特别要强调的是,Python 解释器并不会因为这些注解而提供额外的校验,没有任何的类型检查工作。也就是说,这些类型注解加不加,你的代码来说没有任何影响: ? 输出: ?... Python 3.6 中,又引入了变量类型进行注解的方法: a: int = 123 b: str = 'hello' 更进一步,如果你需要指明一个全部由整数组成的列表: from typing...不过,你可以通过 mypy 库来检验最终代码是否符合注解。...这些新特性也许你并不会在代码中使用,不过当你别人的代码中看到时,请按照对方的约定进行赋值或调用。 当然,也不排除 Python 以后的版本把类型检查做到解释器里,谁知道呢。

1.2K20

简单聊聊Python的类型系统

Python的抉择 虽然PythonPEP 3107(https://www.python.org/dev/peps/pep-3107/)第一次引入了函数注解,可以函数中标记变量类型,并在PEP 484...类型的加入需要花费开发者更多的时间 类型提示适合于Python3.X以上,函数注解适用于3.X和2.7,并不能向后兼容 如果使用typing(https://docs.python.org/3/library...这时text: str表示text这个变量应该是str类型,同样的align是bool类型,二headline函数返回的结果为str类型。...incompatible type "str"; expected "bool" 此时mypy会报错第十行类型错误,此时将print(headline...$ mypy headlines.py $ 运行时检查 虽说Python永远不会改变动态语言本质,但是依然有一些包支持运行时类型错误便会报错,例如Enforce(https://pypi.org/project

1.2K30

Python 3.8已正式发布,重要新功能都在这里了

有些库可以在运行时使用类型,但这并不是Python类型系统的主要用例。 相反,类型提示允许静态类型检查Python代码进行类型检查,而无需实际运行脚本。...将类型添加到draw_line(),你已经使用了后者。如果仔细查看上面Mypy的输出,你会发现它在内部将较简单的表示法转换为Union表示法。 某些情况下,函数返回值的类型取决于输入参数。...但是,通常会以true或False作为to_roman的值来调用此代码,在这种情况下,你会希望类型检查器准确推断出是否返回str或int。...协议是一种规范Python鸭子类型支持的方式: 当我看到一鸟走路像鸭子,游泳像鸭子,像鸭子一样嘎嘎叫,我把它称为鸭子。...后者用于检查是否有相等的值,而只有在对象相同时为true。

2.9K51
领券