如何在python中重载”def”函数以便它接受类型化参数?

How can I overload the “def” function in Python so it accepts typed arguments?

本问题已经有最佳答案,请猛点这里访问。

目前,python允许您定义如下函数

1
def f(x, A):

我想能够定义如下函数

1
def f(x: int, A: list):

因为我认为它可以减少程序员的错误。

我该怎么做?

现在我要求助于

1
2
def f(x, A):
    assert type(x) == int and type(A) == list,"Invalid parameters to function f"

但我认为,如果我能更改def函数的签名,可能会更容易些。


修改def是可能的,但不是完全正确(最简单)的方法。

最简单的方法是使用python 3。它支持类型注释,尽管默认情况下它对它们不做任何操作。

这个答案将python 3的注释与decorator和类型过滤助手函数结合在一起。有很多基于装饰器的解决方案和类型检查食谱。如果需要其他示例,请搜索"python注释类型检查"。

请注意,如果出于某种原因不能使用python 3,上面的问题也包括了关于python 2的装饰器的答案。