use*_*354 0 python types list python-3.7
x: List[int]
Run Code Online (Sandbox Code Playgroud)
如果我有像上面这样的代码,它使用 Python 的库使用x具有显式类型的 List声明一个对象,有没有办法找出这个对象是整数类型?不仅仅是列表类型。inttypingx
我知道如果我这样做type(x)它会给出<class 'list'>,但并没有说它是一个整数类型列表。我也尝试过type(x[0]),它给出了<class 'NoneType'>,这是一个空列表是有道理的。我无法用整数类型值(即x: List[int] = [0])或其他东西初始化第一个元素,因为它正在为列表分配一个任意值,如果我们没有正确处理(覆盖为正确的值)它可能会导致问题并且它有风险(至少对我而言)。
这是我正在处理的团队项目中必须具备的一个重要功能。任何具有良好 Python 知识的人都可以帮助我吗?
提前致谢!
Python 是一种动态类型语言,因此即使有type提示,它type本身也不会被强制执行。因此List[int]不保证任何添加到的元素x都是一个int类型。
如果确实需要确保typeis int,则需要手动检查它:
if all(isinstance(i, int) for i in x):
# code things for when x is indeed a list of all ints
else:
# code things for when x is not all int
Run Code Online (Sandbox Code Playgroud)
你也可以考虑做一个assert:
>>> x = [1, 2, '3']
>>> assert all(isinstance(i, int) for i in x), 'Values must be all int type!'
>>> Traceback (most recent call last):
File "<pyshell#249>", line 1, in <module>
assert all(isinstance(i, int) for i in x), 'Values must be all int type!'
AssertionError: Values must be all int type!
Run Code Online (Sandbox Code Playgroud)
如果您List[...]要检查多个,则可以创建自己的检查器功能:
def validate(lst: list, dtype):
return all(isinstance(i, dtype) for i in lst)
>>> validate([1, 2, '3'], int):
>>> False
>>> validate(['a', 'b', 'c'], str):
>>> True
Run Code Online (Sandbox Code Playgroud)