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)