gpt4 book ai didi

Python:pytype 兼容的 type() 命令?

转载 作者:太空宇宙 更新时间:2023-11-04 04:41:36 24 4
gpt4 key购买 nike

是否有类似 type 的命令可以递归遍历集合以返回 pytype 样式的声明(如果存在)?我意识到具有异构元素的集合可能会出现问题。

例如,我希望看到类似这样的输出:

>>> fancy_type({1: {"a": 2.2}})
dict[int, dict[str, float]]

最佳答案

据我所知,没有这样的功能。但是,按照您在问题中描述的那样编写函数似乎相当简单:

from typing import Iterable, Mapping


def pretty_type(obj):
obj_type = type(obj).__name__
if isinstance(obj, Mapping):
k, v = next(iter(obj.items()))
return '{}[{}, {}]'.format(obj_type, pretty_type(k), pretty_type(v))
elif isinstance(obj, Iterable) and not isinstance(obj, str):
return '{}[{}]'.format(obj_type, pretty_type(obj[0]))
else:
return obj_type

测试

>>> print(pretty_type(0))
int
>>> print(pretty_type({1:{"a":2.2}}))
dict[int, dict[str, float]]
>>> print(pretty_type([1, 2, 3]))
list[int]
>>> print(pretty_type([{1:'a'}, {2:'b'}]))
list[dict[int, str]]
>>>

上面的代码可以很容易地扩展以适应任何自定义输入/输出。当然,代码显然假定元素之间是同质的。正如您在问题中指出的那样,异构元素会产生问题,在我看来,这实际上取决于一个人对如何处理此类情况的偏好。

关于Python:pytype 兼容的 type() 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50499007/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com