如何像C语言一样为Python函数指定参数类型与返回值类型?
Python函数参数与返回值类型指定方案
Python原生支持类型提示(Type Hints) 语法,作用和C语言的函数原型声明对齐,从Python 3.0版本开始逐步迭代完善,是目前官方推荐的类型约束写法。
基础语法规则
类型提示的核心写法非常简单:
- 入参约束:在参数名后加
: 目标类型,明确要求传入的参数类型 - 返回值约束:在函数定义的参数列表括号后加
-> 目标类型,明确函数的返回值类型
对应你给出的C语言示例int *atoi(char *str),Python中等价的类型声明写法如下:
def atoi(str_input: str) -> int: # 具体业务逻辑 return int(str_input)
注意:Python的类型提示默认是静态标注,不会在代码运行时自动做类型拦截,主要是给IDE、静态检查工具提供类型判断依据,在编码阶段提前发现类型不匹配问题,和C语言编译期做类型检查的逻辑一致。
常见类型标注写法
- 基础类型:直接标注内置类型即可,比如
int、str、float、bool - 容器类型:Python 3.9及以上版本可以直接写
list[int](整数列表)、dict[str, int](键为字符串、值为整数的字典)、tuple[str, int](固定结构元组);3.9以下版本需要从内置的typing模块导入对应类型,比如from typing import List; List[int] - 可空类型:对应C语言中可能返回空指针的场景,Python 3.10及以上可以直接写
类型 | None,比如int | None表示值要么是整数要么是None;低版本可以用typing.Optional[int]实现相同效果 - 可调用对象(对应C语言的函数指针):用
typing.Callable[[参数类型列表], 返回值类型]标注,比如Callable[[int, int], int]表示接收两个整数入参、返回整数的函数
实现运行时类型强校验
如果需要像C语言一样在运行阶段直接拦截类型不匹配的传参/返回值,可以选择两种实现方式:
- 静态校验:用mypy这类类型检查工具在代码运行前做全量扫描,直接抛出类型错误,阻断不符合类型要求的代码上线,是工业界最常用的方案
- 运行时校验:可以自行编写类型判断逻辑抛错,也可以借助pydantic这类第三方库自动完成校验,简单的自实现示例如下:
def atoi(str_input: str) -> int: # 入参类型校验 if not isinstance(str_input, str): raise TypeError(f"入参str_input需为str类型,实际传入{type(str_input)}") result = int(str_input) # 返回值类型校验 if not isinstance(result, int): raise TypeError(f"返回值需为int类型,实际得到{type(result)}") return result
内容的提问来源于stack exchange,提问作者TouFa7
相关产品推荐
相关产品推荐

