簡體   English   中英

檢查輸入是字符串列表/元組還是單個字符串

[英]Check if input is a list/tuple of strings or a single string

我有一種方法,我希望能夠接受單個字符串(路徑,但不一定存在於運行代碼的機器上)或字符串列表/元組。

鑒於字符串充當字符列表,我如何知道該方法收到了哪種類型?

我希望能夠接受單個條目的標准或 unicode 字符串,以及多個列表或元組,所以 isinstance 似乎不是答案,除非我錯過了一個巧妙的技巧(比如共同祖先類的優勢?)。

Python 版本是 2.5

您可以使用以下命令檢查變量是字符串還是 unicode 字符串

  • 蟒蛇3:
    isinstance(some_object, str)
  • 蟒蛇2:
    isinstance(some_object, basestring)

這將為字符串和 unicode 字符串返回True

當您使用 python 2.5 時,您可以執行以下操作:

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

字符串可能不是一個詞,但我希望你能明白

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

類型檢查:

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'])

由於我喜歡保持簡單,這是與 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")
>>> type('abc') is str
True
>>> type(['abc']) is str
False

此代碼與 Python 2 和 3 兼容

我很驚訝沒有人用鴨子打字給出答案,而是給出了不清楚或高度依賴於類型或依賴於版本的答案。 此外,不幸的是,接受的答案有 Python 2 和 3 的單獨代碼。 Python 使用並鼓勵鴨子類型,所以(比 sorin 的“最短形式”多一行,而不是鴨子類型)我建議:

def is_str(v):
    return hasattr(v, 'lower')

...以及您想使用的任何其他屬性(記住引號)。 這樣,使用您的軟件的客戶端代碼可以發送他們想要的任何類型的字符串,只要它具有您的軟件所需的接口。 鴨子類型以這種方式對其他類型更有用,但它通常是最好的方式。

或者你也可以這樣做(或者通常檢查 AttributeError 並采取一些其他措施):

def is_str(v):
    try:
        vL = v.lower()
    except AttributeError:
        return False
    return True

使用 isinstance(arg, basestring) 檢查類型

您是否考慮過varargs語法? 我不確定這是否是您要問的問題,但是像這樣的問題會符合您的要求嗎?

你不能這樣做:

(i == list (i) or i == tuple (i))

如果輸入是元組或列表,它會回復。 唯一的問題是它不能在只包含一個變量的元組中正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM