Python函数参数类型检查

python: check function parameter types

因为我刚从C++切换到Python,所以我觉得Python不太关心类型安全。例如,有人能向我解释为什么在Python中不需要检查函数参数的类型吗?

假设我定义了一个向量类,如下所示:

1
2
3
4
class Vector:
      def __init__(self, *args):
          # args contains the components of a vector
          # shouldn't I check if all the elements contained in args are all numbers??

现在我想在两个向量之间做点积,所以我添加了另一个函数:

1
2
3
def dot(self,other):
     # shouldn't I check the two vectors have the same dimension first??
     ....


好吧,至于检查类型的必要性,这可能是一个有点开放的主题,但是在Python中,遵循"duck-typing"是一种很好的形式。函数只使用它所需要的接口,调用方必须传递(或不传递)正确实现该接口的参数。取决于函数有多聪明,它可以指定它如何使用参数的接口。


在python中,确实不需要检查函数参数的类型,但是您可能希望得到这样的效果…

这些raise Exception发生在运行时…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Vector:

    def __init__(self, *args):    

        #if all the elements contained in args are all numbers
        wrong_indexes = []
        for i, component in enumerate(args):
            if not isinstance(component, int):
                wrong_indexes += [i]

        if wrong_indexes:
            error = '
Check Types:'

            for index in wrong_indexes:
                error += ("
The component %d not is int type."
% (index+1))
            raise Exception(error)

        self.components = args

        #......


    def dot(self, other):
        #the two vectors have the same dimension??
        if len(other.components) != len(self.components):
            raise Exception("The vectors dont have the same dimension.")

        #.......