总结
豆包 AI 助手文章总结

Python类型提示中UnionType类型如何判断是否包含特定类型?

霞舞
发布: 2025-03-04 08:38:13
原创
385人浏览过

python类型提示中uniontype类型如何判断是否包含特定类型?

本文探讨Python类型提示中UnionType的成员访问,特别是如何判断UnionType是否包含特定类型,例如str。 在函数参数类型提示中,直接检查UnionType是否包含特定类型并非易事。

问题:当函数参数类型为UnionType时,例如def func(name: str | None): pass,无法直接使用in操作符或迭代访问其成员来判断是否包含str。

解决方案:typing.get_args函数是关键。它可以提取泛型类型的参数。我们可以利用它来解决这个问题。

方法一:使用typing.get_args

立即学习Python免费学习笔记(深入)”;

以下代码演示如何使用typing.get_args来判断UnionType是否包含str:

from typing import Union, Callable
from types import UnionType
from inspect import signature
import typing

def check_func_args_hints(func: Callable) -> bool:
    for param in signature(func).parameters.values():
        annotation = param.annotation
        if isinstance(annotation, UnionType):
            if str in typing.get_args(annotation):
                return True
            else:
                return False
        elif annotation is str:
            return True
        else:
            return False

def get_score(name: str | None = None) -> float | None:
    pass

def another_func(name: int):
    pass

def yet_another_func(name: float | None):
    pass

print(check_func_args_hints(get_score))  # True
print(check_func_args_hints(another_func)) # False
print(check_func_args_hints(yet_another_func)) # False
登录后复制

check_func_args_hints函数获取函数参数的类型提示。如果是UnionType,则使用typing.get_args提取所有类型,并检查str是否存在。如果不是UnionType,则直接检查是否为str。

方法二:使用isinstance (局限性更大)

另一种方法是利用isinstance,但它仅适用于可通过空字符串实例化判断的类型:

# ... (其他代码同上) ...
        elif isinstance("", param.annotation):
            return True
        else:
            return False
登录后复制

这种方法的局限性在于,并非所有类型都能够用空字符串进行有效的实例化检查。

总结:typing.get_args方法更可靠,因为它直接处理UnionType的组成类型,而不会依赖于类型实例化的特性。 因此,推荐使用第一种方法来判断UnionType中是否包含特定类型。

以上就是Python类型提示中UnionType类型如何判断是否包含特定类型?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号