如何从 isinstance() 方法检查字符串参数类型列表

How to check list of strings parameter type from isinstance() method

我想尝试使用 isinstance() 函数处理传递给函数的参数类型。基本上,我想检查传递给函数的列表是否只包含字符串。所以,我把函数写成

def fun(parameter: list[str]):
    #want to check parameter type here

获取列表后,我想确保它只包含字符串。那么,有什么方法可以从 isinstance() 函数中检查这个吗?否则我必须通过循环遍历列表来进行自定义检查。

您可以使用 2 种方法:
方法一:使用python3的built-in函数即isinstance().\

示例:

def fun(parameter: list[str]):
 return isinstance(parameter, (list, str))

这将 return TrueFalse。它将检查参数是列表或字符串还是字符串列表。

方法二:创建自定义函数检查类型。

示例:

def fun(parameter:list[str]):
     if type(parameter) == list:
            for i in parameter:
                 if type(i) != str:
                       return False
            return True
     return False

上面代码背后的逻辑很简单,如果列表发送False,它会检查参数是否为列表。如果它是列表,那么它将检查列表的包含是否为真。如果它们是真的,它只是 returns True.

您可以添加一个断言,但是是的,我认为您需要一个循环

def fun(parameter:list[str]):
    assert all(isinstance(s, str) for s in parameter)

这是一种奇怪的迂回方式,但您可以通过以下方式在不使用循环的情况下摆脱困境。不过,我总体上更喜欢@OneCricketeer 的回答。

import numpy as np


def fun(parameter: list[str]):
    assert list(np.array(parameter, dtype=str)) == parameter
   ...

传递 dtype=str 将导致 parameter 中的任何 non-string 项转换为结果数组中的字符串,然后您可以将其转换回列表并与原始数组进行比较.只有当所有项目都已经是字符串时,两者才会相等。

您也可以使用 np.array_equal() 而不是将数组包装在 list() 中并与 == 进行比较,如果您的 parameter 列表非常大,这会更有效.