Python中的类型提示
Python是一种动态类型语言,这意味着您永远不必明确指出变量的类型。但是在某些情况下,动态类型会导致一些非常难以调试的错误,在这些情况下,类型提示或静态类型会很方便。类型提示已作为Python 3.5 中的一项新功能引入。
让我们看一下这个阶乘函数以清楚地理解这一点:
# factorial function
def factorial(i):
if i<0:
return None
if i == 0:
return 1
return i * factorial(i-1)
# passing an integer to the function
print(factorial(4))
# passing a string to the function
print(factorial("4"))
# passing a floating point number to the function
print(factorial(5.01))
如果我们尝试将整数传递给函数,它会正常工作。现在,如果我们尝试将字符串传递给阶乘函数,我们将得到一个错误,因为我们无法与字符串进行数学比较。
此外,如果我们尝试传递一个浮点数,比如说 5.01,我们也会在这里得到一个错误,因为我们在每次迭代中根据我们的逻辑将数字减 1,并且在最后一次迭代中它变为 -0.99,返回“ None”,这会导致错误,因为我们试图将“None”与其他浮点数相乘。
类型提示代码如下所示:
我们必须指定参数的类型以及阶乘函数的类型。
# factorial function
def factorial(i: int) -> int:
if i<0:
return None
if i == 0:
return 1
return i * factorial(i-1)
# passing a fraction to the function
print(factorial(5.01))
Python解释器完全忽略了 Type-Hint。所以,如果我们再次运行这段代码,我们仍然会得到同样的错误。
因此,我们必须使用静态类型检查器来分析我们的代码并尝试检测我们是否违反了我们的类型提示。
最著名的类型检查器是“ mypy ”。我们可以通过简单地使用pip来安装它。
pip install mypy
现在要运行代码,我们必须简单地调用Python解释器,我们必须指定“-m”来指示我们要加载一个模块,然后指定我们要检查的脚本。例如:
mypy program.py
现在,如果我们运行它,它实际上不会执行我们的“ program.py
”脚本,但它会分析它并给我们一个错误,比如“Argument 1 to factorial has incompatible type float ;预期的int ”,这是一个非常清晰的消息,这使我们更容易调试我们的代码,因为以前没有mypy类型检查器,错误消息不是那么具体。如果我们用一个整数再次运行代码,它会正常工作。