如何从 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 True 或 False。它将检查参数是列表或字符串还是字符串列表。
方法二:创建自定义函数检查类型。
示例:
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
列表非常大,这会更有效.
我想尝试使用 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 True 或 False。它将检查参数是列表或字符串还是字符串列表。
方法二:创建自定义函数检查类型。
示例:
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
列表非常大,这会更有效.