Python如何设置函数返回类型与输入参数的类型保持一致?
你当前的写法问题出在Type[T]的使用上:Type[T]用来注解「T类型本身」(比如str、int这类类对象),而非T类型的实例,你只需要把参数注解直接改为T即可满足需求。
修正后的代码如下:
from typing import TypeVar T = TypeVar("T") def lowercase_if_possible(target: T) -> T: if isinstance(target, str): return target.lower() # type: ignore return target
逻辑说明
- 泛型
T会根据你传入的参数类型自动推导:传入字符串时T就是str,传入整数时T就是int,完全匹配输入参数的类型 - 返回值注解为
T,自然就和输入参数类型保持一致 - 注释
# type: ignore是为了兼容部分类型检查器的窄化限制:你已经通过isinstance判断参数是字符串,此时返回lower()的结果必然和输入类型一致,这个忽略不会引入类型安全问题
你可以用下面的代码验证类型推导效果:
# 以下变量都会被类型检查器正确识别对应类型 str_val = lowercase_if_possible("TEST") # 类型为str int_val = lowercase_if_possible(456) # 类型为int list_val = lowercase_if_possible([1,2]) # 类型为list[int]
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

