将变量转换为列表的pythonic方法
我有一个函数,其输入参数可以是一个元素或元素列表。如果此参数是单个元素,则将其放在列表中,以便可以以一致的方式遍历输入。
目前我有这个:
def my_func(input):
if not isinstance(input, list): input = [input]
for e in input:
...
我正在使用现有的API,因此无法更改输入参数。使用isinstance()感觉很麻烦,所以有 适当的 方法吗?
-
我喜欢Andrei Vajna的建议
hasattr(var,'__iter__')
。请注意以下一些典型的Python类型的结果:>>> hasattr("abc","__iter__") False >>> hasattr((0,),"__iter__") True >>> hasattr({},"__iter__") True >>> hasattr(set(),"__iter__") True
这具有将字符串视为不可重复的额外优势-字符串是灰色区域,有时您希望将它们视为元素,而有时则将其视为字符序列。
请注意,在Python 3中,
str
类型 确实 具有__iter__
属性,并且这不起作用:>>> hasattr("abc", "__iter__") True