如果不是可迭代的话,将python,wrap和object放入一个列表中

ang*_*lar 8 python loops composite

我希望有一个包装和对象在一个可迭代的函数,以允许该函数的客户端对待集合和单个对象相同的方式,我做了以下内容:

 def to_iter(obj):
     try:
         iter(obj)
         return obj
     except TypeError:
         return [obj]
Run Code Online (Sandbox Code Playgroud)

有没有一种pythonic的方法来做到这一点?如果obj是一个字符串,我想处理的字符串作为单个对象?我应该使用isinstance代替iter

kar*_*ikr 9

你的方法很好:它会将一个字符串对象转换为一个可迭代的

try:
    iter(obj)
except TypeError, te:
    obj = list(obj)
Run Code Online (Sandbox Code Playgroud)

您可以检查的另一件事是:

if not hasattr(obj, "__iter__"): #returns True if type of iterable - same problem with strings
    obj = list(obj)
return obj
Run Code Online (Sandbox Code Playgroud)

要检查字符串类型:

import types
if not isinstance(obj, types.StringTypes) and hasattr(obj, "__iter__"):
    obj = list(obj)
return obj
Run Code Online (Sandbox Code Playgroud)

  • `hasattr(obj,"_ _ iter __")`**并不意味着**可迭代(你可以添加任何东西作为这个属性).另外,如果`iter`失败,`list`也会失败......并且不要使用弃用的except语法... (4认同)