我有一種方法,我希望能夠接受單個字符串(一個路徑,但不一定是運行代碼的機器上存在的一個)或者一個字符串的列表/元組。檢查輸入是字符串或單個字符串的列表/元組
鑑於字符串作爲字符列表,我怎麼能告訴方法接收哪種類型?
我希望能夠接受單個條目的標準或unicode字符串,以及列表或元組爲多個,所以isinstance似乎不是答案,除非我錯過了一個聰明的技巧與它(如利用共同的祖先類?)。
Python版本是2.5
我有一種方法,我希望能夠接受單個字符串(一個路徑,但不一定是運行代碼的機器上存在的一個)或者一個字符串的列表/元組。檢查輸入是字符串或單個字符串的列表/元組
鑑於字符串作爲字符列表,我怎麼能告訴方法接收哪種類型?
我希望能夠接受單個條目的標準或unicode字符串,以及列表或元組爲多個,所以isinstance似乎不是答案,除非我錯過了一個聰明的技巧與它(如利用共同的祖先類?)。
Python版本是2.5
您可以檢查一個變量是一個字符串或Unicode字符串
isinstance(some_object, basestring)
這將返回True
兩個字符串和unicode字符串
編輯:
你可以做這樣的事情:
if isinstance(some_object, basestring):
...
elif all(isinstance(item, basestring) for item in some_object): # check iterable for stringness of all items. Will raise TypeError if some_object is not iterable
...
else:
raise TypeError # or something along that line
Stringness is可能不是一個字,但我希望你的想法
你有沒有考慮varargs
語法?我不確定這是不是你要求的,但是像this question這樣的東西是否符合你的要求?
難道這不就是強制呼叫者指定哪個被髮送?如果可能,我寧願避免這種情況。 (而且我也很好奇我是否想以優雅的方式去做...) – mavnn 2009-05-28 19:39:16
請與isinstance(阿根廷,即basestring)
類型檢查的類型:
def func(arg):
if not isinstance(arg, (list, tuple)):
arg = [arg]
# process
func('abc')
func(['abc', '123'])
可變參數:
def func(*arg):
# process
func('abc')
func('abc', '123')
func(*['abc', '123'])
isinstance是一個選項:
In [2]: isinstance("a", str)
Out[2]: True
In [3]: isinstance([], str)
Out[3]: False
In [4]: isinstance([], list)
Out[4]: True
In [5]: isinstance("", list)
Out[5]: False
,因爲我喜歡讓事情變得簡單,這裏是既2.x和3.x兼容最短的形式:
# trick for py2/3 compatibility
if 'basestring' not in globals():
basestring = str
v = "xx"
if isinstance(v, basestring):
print("is string")
不能你:
(i == list (i) or i == tuple (i))
它會回答說:如果輸入是元組或列表。唯一的問題是,它只能用一個只保存一個變量的元組來運行。
>>> type('abc') is str
True
>>> type(['abc']) is str
False
該代碼是與Python 2和3
樣品輸入兼容/輸出使這樣的問題更容易解釋 – 2009-05-28 19:39:09
這裏簡單的答案http://stackoverflow.com/a/26797718/99834 - 由於py2-3的變化並不明顯。 – sorin 2014-11-07 09:15:41