我有一个函数,它的输入参数可以是元素,也可以是元素列表。如果这个参数是单个元素,那么我把它放在一个列表中,这样我就可以以一致的方式迭代输入。
目前我有:
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
关于python - pythonic方式将变量转换为列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1416646/