Python无返回值的函数是否需要在签名中标注-> None?
结论
显式标注-> None是符合Python社区惯例的最优写法,完全不建议省略。
具体说明
- 首先明确基础认知:Python解释器本身完全不处理类型提示,类型提示是给静态类型检查工具(比如mypy、pyright)和读代码的开发者用的,解释器既不会默认推断返回类型,也不会基于类型提示做运行时校验。
- 按照PEP 484的规范,如果函数省略了返回类型注解,类型检查工具会把返回值认定为未指定类型,直接跳过相关校验,绝对不会默认当成
NoneType处理。 - 举个常见的反面场景:如果你没加
-> None,后续其他人调用的时候不小心写了这种代码:
res = say_hello("小明") res.strip()
类型检查工具不会给出任何提示,只有实际运行时才会抛出AttributeError,相当于埋了个隐形坑。但你要是加了-> None,类型检查工具会直接标记这里的不合理操作,提前把bug掐死在开发阶段。
- 另外显式标注也能让读代码的人一眼就知道这个函数没有可被使用的返回值,不用翻函数内部实现就能判断设计意图,代码可读性高很多。
规范依据
PEP 8里明确推荐,无返回值的函数应该显式标注-> None,明确表达设计意图。
内容的提问来源于stack exchange,提问作者Noldorin
相关产品推荐
相关产品推荐

