我最近正在检查类型提示,在阅读了一些理论后,我尝试了一个简单的例子:
def myfun(num1: int, num2: int) -> int:
return str(num1) + num2
a = myfun(1, 'abc')
print(a)
# output -> 1abc
在这里您可以看到我已经定义了 int 类型的
num1
和 num2
,甚至在将 num2
值作为字符串传递之后,它也不会生成任何错误。
此外,该函数应该返回
int
类型值,但它不会抱怨返回字符串类型值。
有人可以解释一下这里出了什么问题吗?
它被称为类型hinting,是有原因的:您向 IDE 或其他阅读您代码的人提供关于变量应该是什么的提示。在运行时,类型提示实际上没有任何意义 - 它们的存在是为了其他开发人员的文档和可用性。如果你违背类型提示,Python 不会阻止你(它假设你知道你在做什么),但这是不好的做法。
请注意,这与 Java 等静态类型语言不同,在 Java 中,尝试传递与函数定义不兼容的参数将产生编译时错误,并且如果传递不同类型但兼容的参数(例如传递
float
到需要 int
) 的函数,它将自动类型转换。
请注意,如果程序员按照预期使用它,您给出的代码将会遇到
TypeError
,因为 int
无法连接到 str
。您的 IDE 或 linter 应该能够看到这一点,并在该行上向您发出警告,它会根据类型提示执行此操作。这就是类型提示的用途 - 通知 IDE 和文档的行为,并提供一个危险信号,表明您可能没有以预期的方式使用函数 - 在运行时没有任何作用。