我有一个函数,它的输入参数可以是元素,也可以是元素列表。如果这个参数是单个元素,那么我把它放在一个列表中,这样我就可以以一致的方式迭代输入。
目前我有:

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/

10-09 00:45