列表和元组的类型提示

问题描述 投票:2回答:2

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

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

from typing import List, Optional, Tuple

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

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

python python-3.x parameter-passing
2个回答
1
投票

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

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

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

0
投票

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

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

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

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

0
投票

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

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

始终记住,这不是在运行时强制执行的

© www.soinside.com 2019 - 2024. All rights reserved.