2

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

>>> 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出现了,现在担心可能会有更多的测试对象。

4

1 回答 1

2

在 Python 2 中,str两者unicode都派生自basestring.

唉,在 Python 3 中,没有这样的公共父类。在这里你应该测试strand bytes


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) 
于 2012-10-17T08:28:50.827 回答