gpt4 book ai didi

python - 如何测试对象是否是一个映射(支持**O用法)

转载 作者:太空狗 更新时间:2023-10-30 00:32:10 26 4
gpt4 key购买 nike

我需要测试使用 ConfigParser 从文件读取(和 eval)的对象是否是映射。

不完全确定这里的术语,但让我解释一下。鉴于我的对象被称为 O,它必须支持以下列方式使用:

def tester(**kwargs):
print kwargs

tester(**O)

如果 O 不支持 ** 这将导致 TypeError,例如TypeError: ** 之后的 test() 参数必须是一个映射,而不是元组

这是一个非常简单的场景,但我需要知道 O 在使用它之前会起作用,并且我需要绝对确定它不会失败。如果我正在测试 O 是否是可迭代的,我会使用类似的东西:

try:
iter(O)
except:
O = tuple()

In Python, how do I determine if an object is iterable? 中所述

我找不到任何平行的映射。正如上面同一个答案中所讨论的,使用 isinstancecollections 不是一个好的解决方案。

所以在加载像这样的对象时,我是否必须将上面的测试器函数(没有打印)作为我自己的映射测试

try:
tester(**O)
except TypeError:
O = {}

或者 python 是否有一个内置的方法来测试它,就像有一个可迭代的?看来应该有。

编辑

实际上,上面的链接答案从未反对 isinstance 方法,应该更好地阅读它......

最佳答案

使用 collections.abc.Mapping美国广播公司:

from collections.abc import Mapping

if isinstance(O, Mapping):
# O is a mapping

这支持任何实现正确方法的对象被视为映射,包括dict

演示:

>>> from collections.abc import Mapping
>>> isinstance({}, Mapping)
True
>>> isinstance((), Mapping)
False

关于python - 如何测试对象是否是一个映射(支持**O用法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21884171/

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