列表和元组的类型提示

时间:2019-10-25 16:54:27

标签: python python-3.x parameter-passing

是否有一种方法可以在参数的类型提示中定义元组或列表的大小?

此刻我正在使用这样的东西:

from typing import List, Optional, Tuple

def function_name(self, list1: List[Class1]):
    if len(list1) != 4:
        raise SomeError()
    pass
    # some code here

我正在寻找一种更精简的方法。

3 个答案:

答案 0 :(得分:1)

对于列表来说,因为它们是动态的,所以没有意义,而对于元组,定义内的类型数就是它所包含的元素数:

from typing import Tuple

example_1: Tuple[int, int] = (1, 2)  # This is valid
example_2: Tuple[int, int] = (1, 2, 3)  # This is invalid
example_3: Tuple[int, ...] = (1, 2, 3, 4)  # This is valid, the ellipses means any number if ints
example_4: Tuple[int, ...] = (1, 'string')  # This is invalid

# So in your case if you need 4 you can do something like this
My4Tuple = Tuple[Class1, Class1, Class1, Class1]
def my_function(self, arg1: My4Tuple):
    pass

永远记住,这不是在运行时强制执行的

答案 1 :(得分:0)

一种方法是将签名更改为接受4个参数:

def function_name(self, c1, c2, c3, c4): # Use better parameter names
    pass

然后,您可以使用splat运算符使用列表来调用它:

l = [...]
x.function_name(*l)

答案 2 :(得分:0)

您为什么不让它接受4个参数?然后,您可以执行以下操作:

def function_name(self, a: Class1, b: Class1, c:Class1, d:Class1):
    ...

data = (Class1(...), Class1(...), Class1(...), Class1(...))
obj.function_name(*data)