如何区分字符串与其他Iterables?

时间:2012-10-17 08:26:08

标签: python string iterable

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

>>> 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) or isinstance(arg, unicode)isinstance(arg, collections.Iterable)时已经上当了但我对此并不感到兴奋,因为后者不起作用而且前者不行,我不能加入列表或其他东西 - 我虽然str会这样做,但随后unicode出现了,现在我担心可能会有更多的人要对其进行测试。

1 个答案:

答案 0 :(得分:2)

在Python 2中,strunicode都来自basestring

唉,在Python 3中,没有这样的常见父类。在这里,您应该对strbytes进行测试。


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)