测试变量是否是列表或元组

问题:

在python中,测试变量是否包含列表或元组的最佳方式是什么? (即一个集合)
这是否是这样建议的邪恶? http://www.canonical.org/~kragen/isinstance/
更新:我想区分列表和字符串的最常见的原因是当我有一些无限深深的嵌套树/数据结构列表的列表的字符串等,我正在用递归算法探索,我需要知道我什么时候打了“叶”节点。

回答:

如果需要,请使用isinstance。它有点邪恶,因为它排除了你可能需要的自定义序列,迭代器和其他的东西。但是,有时候,如果有人通过一个字符串,有时你需要有所不同。我的偏好是要明确地检查strunicode

import types
isinstance(var, types.StringTypes)

注:不要错误types.StringType types.StringTypes。后者包含strunicode对象。
types模块被许多人认为是过时的,有利于直接对对象的类型进行检查,所以如果不想使用上述内容,您可以选择明确地检查strunicode,就像这样:

isinstance(var, (str, unicode)):

 编辑:
更好的是:

isinstance(var, basestring)

 结束编辑
在其中任何一个之后,您可以回到行为,就像您正在获得正常的序列一样,让非序列引发适当的异常。
看到关于类型检查的“邪恶”这个事情并不是你对某种类型对象的行为可能不一样,这就是你人为地限制你的功能使用意想不到的对象类型,否则会做正确的事情。如果您没有进行类型检查的最终后备箱,则会删除此限制。应该注意的是,太多的类型检查是一个代码气味,表明你可能想做一些重构,但这并不一定意味着你应该避免它从getgo。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Test if a variable is a list or tuple

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 42 = 47