本文主要是介绍Python 函数参数类型检查,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Python 函数参数类型检查
- tags: Python, lint, type-checking, mypy
- create: 2024.09.01 12:40
- author: ChrisZZ imzhuo@foxmail.com
1. 问题描述
在 test.py
中编写了代码:
定义函数:
def hello(capitalize: bool=False):if capitalize:print(f'Hello, World')else:print(f'hello, world')
调用函数:
hello(True)
运行得到:
Hello, World
某天,重构了函数, 得到:
def hello(name: str, capitalize: bool=False):if capitalize:print(f'Hello, {name}.upper()')else:print(f'hello, {name}')
忘记修改调用代码; 程序执行没有报错,不过并不符合预期:
hello, True
预期的是程序报错, 而不是把 True
这一 bool 类型的参数当作 str 类型处理。
解决办法
使用 mypy 做类型检查。
安装:
pip install mypy
检查:
mypy test.py
报错内容:
test.py:15: error: Argument 1 to "hello" has incompatible type "bool"; expected "str" [arg-type]
Found 1 error in 1 file (checked 1 source file)
低版本 Python 不支持类型注解?
Python3 从 3.5 版本开始支持类型注解。当 Python3 < 3.5, 或者 Python 版本为 Python2, 不支持 <var>:<type>
的类型注解形式。
对于上述情况,如果能保证开发环境是 Python >= 3.5, 那么就可以使用 mypy 执行类型检查;把类型注解写到注释中, mypy 就会识别。 基于前一节的代码, 在注释用标明类型注解后如下:
def hello(name, capitalize=False):# type: (str, bool) -> Noneif capitalize:print(f'Hello, {name}.upper()')else:print(f'hello, {name}')hello(True)
运行:
mypy test.py
输出如下,符合预期
test.py:22: error: Argument 1 to "hello" has incompatible type "bool"; expected "str" [arg-type]
Found 1 error in 1 file (checked 1 source file)
这篇关于Python 函数参数类型检查的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!