如何将函数参数限制为固定大小的数组?

时间:2015-04-19 17:07:56

标签: python arrays

如何限制python函数参数只接受某些固定大小的数组?

我尝试了这个,但它没有编译:

def func(a : array[2]):

TypeError: 'module' object is not subscriptable

我是这种语言的新手。

3 个答案:

答案 0 :(得分:10)

检查功能内部的长度怎么样?在这里我提出了一个错误,但你可以做任何事情。

def func(array):
    if len(array) != 2:
        raise ValueError("array with length 2 was expected")
    # code here runs if len(array) == 2

答案 1 :(得分:6)

第一种方式(你很可能想要使用它)

您可以使用if语句检查函数内的所有条件:

def func(a):
    if not isinstance(a, collections.abc.Sequence):
        raise TypeError("The variable has a wrong type")
    elif len(a) != 2:
        raise ValueError("Wrong length given for list")
    # rest of the code goes here

第二种方式(仅用于调试)

您可以使用assert作为解决方案解决方案(用于调试):

def func(a):
    assert isinstance(a, collections.abc.Sequence) and len(a) == 2, "Wrong input given."
    # rest of the code goes here

因此,这将检查是否符合这两个条件,否则将引发assertion error,并显示消息错误的输入类型

答案 2 :(得分:0)

如果您不介意解压缩arg列表,则可以将第二个arg限制为两个元素的固定大小集合。

> def f(a,(b1,b2), c):
    b=[b1,b2]
    print(a)
    print(b)
    print(c)

示例:

# ok to call with 2 elem array
> b=[1,2]
> f("A",l,"C")
A
[1, 2]
C

# but falls if call with other size array
> b=[1,2,3]
> f("A",b,"C")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in f
ValueError: too many values to unpack


# btw also ok if call with 2 elem tuple    
> f("A",(1,2),"B")
A
[1, 2]
C