将变量转换为列表的pythonic方法

发布于 2021-01-29 15:06:32

我有一个函数,其输入参数可以是一个元素或元素列表。如果此参数是单个元素,则将其放在列表中,以便可以以一致的方式遍历输入。

目前我有这个:

def my_func(input):
    if not isinstance(input, list): input = [input]
    for e in input:
        ...

我正在使用现有的API,因此无法更改输入参数。使用isinstance()感觉很麻烦,所以有 适当的 方法吗?

关注者
0
被浏览
73
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我喜欢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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看