Python 如何区分字符串和其他可重用项?

Python 如何区分字符串和其他可重用项?,python,string,iterable,Python,String,Iterable,我试图通过传递一个可能是字符串或字符串列表的参数来重载函数。以字符串列表结束的最简单方法是什么 >>> foo 'bar' >>> bar ['foo', 'bar'] def myfunc(arg): listarg = list() listarg.extend(arg) print listarg >>> myfunc(bar) ['foo', 'bar'] >>> myfunc(foo)

我试图通过传递一个可能是字符串或字符串列表的参数来重载函数。以字符串列表结束的最简单方法是什么

>>> foo
'bar'
>>> bar
['foo', 'bar']

def myfunc(arg):
    listarg = list()
    listarg.extend(arg)
    print listarg

>>> myfunc(bar)
['foo', 'bar']
>>> myfunc(foo)
['b', 'a', 'r']
当我经过foo时,我想看到
['bar']


我曾经玩弄过
isinstance(arg,str)或isinstance(arg,unicode)
isinstance(arg,collections.Iterable)
但我对它们并不感兴趣,因为后者不起作用,而前者,嗯,我不能加入一个列表或什么的吗?我原以为
str
会这样做,但后来出现了
unicode
,现在我担心可能会有更多的代码需要测试。

在Python2中,
str
unicode
都源于
basestring

唉,在Python3中,没有这样的公共父类。这里您应该测试
str
字节



哦,看,现在我发现所有的傻瓜。。。如果最好的搜索方式是问问题并查看它抛出的
相关的
,那就有点悲剧了!我会问自己,为什么
foo
不是
['bar']
def myfunc(arg):
    listarg = arg if not isinstance(arg, basestring) else [arg]
    print listarg

>>> myfunc(bar)
['foo', 'bar']
>>> myfunc(foo)
['bar']

>>> print sys.version
2.7.2 (default, Jun 20 2012, 16:23:33)