python 类型提示不会为错误类型生成错误

问题描述 投票:0回答:1

我最近正在检查类型提示,在阅读了一些理论后,我尝试了一个简单的示例,如下所示

def myfun(num1: int, num2: int) -> int:
    return str(num1) + num2


a = myfun(1,'abc')
print(a)
# output -> 1abc

在这里您可以看到我定义了 int 类型的

num1
num2
,甚至在将
num2
值作为字符串传递之后,它也不会生成任何错误。

此外,该函数应该返回

int
类型值,但它不会抱怨返回字符串类型值。

有人可以解释一下这里出了什么问题吗?

python-3.x type-hinting
1个回答
30
投票

它被称为类型hinting,是有原因的:您向 IDE 或其他阅读您代码的人提供关于变量应该是什么的提示。在运行时,类型提示实际上没有任何意义 - 它们的存在是为了其他开发人员的文档和可用性。如果你违背类型提示,Python 不会阻止你(它假设你知道你在做什么),但这是不好的做法。

请注意,这与 Java 等静态类型语言不同,在 Java 中,尝试传递与函数定义不兼容的参数将产生编译时错误,并且如果传递不同类型但兼容的参数(例如传递

float 
到需要
int
) 的函数,它将自动类型转换。

请注意,如果程序员按照预期使用它,您给出的代码将会遇到

TypeError
,因为
int
无法连接到
str
。您的 IDE 或 linter 应该能够看到这一点,并在该行上向您发出警告,它会根据类型提示执行此操作。这就是类型提示的用途 - 通知 IDE 和文档的行为,并提供一个危险信号,表明您可能没有以预期的方式使用函数 - 在运行时没有任何作用。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.