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)たが、後者は機能せず、前者はリストなどに参加することはできませstrunicode.テストする対象がさらに増えるのではないかと心配しています。

4

1 に答える 1

2

Python 2 ではstrunicode両方ともbasestring.

残念ながら、Python 3 には、そのような共通の親クラスはありません。ここで と をテストする必要がstrあり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 に答える