为什么函数签名不包含python中的return参数?

时间:2014-03-29 16:17:14

标签: python

在C / C ++中,当我们定义一个函数签名时,除了允许函数采用的参数之外,我们还强调返回类型(

)。

在python中,函数可以或不可以(None)返回值,但函数签名只构成允许函数执行的参数。

我们如何在python中理解这一点?

1 个答案:

答案 0 :(得分:3)

Python不使用静态类型。

在C ++中,类型签名实际上被认为是函数名称的一部分;如果你拨打foo(2)foo("wow"),你实际上是在调用两个不同的功能。

在Python中,任何特定的函数都只是一个函数对象。如果你有参考,你可以打电话给它;并且您可以使用其名称进行查找,以获取对它的引用。无论哪种方式,“类型签名”无关紧要。

另外,在C ++中,如果要重载一个函数,你将多次声明它,使用不同的类型签名;在Python中,您将声明它一次,但利用“duck typing”使其使用不同的参数做正确的事情。这是一个例子:

// C++
int add2(int a, int b)
{
    return a + b;
}

int add2(char const *a, int b)
{
    return atoi(a) + b;
}

int add2(int a, char const *b)
{
    return a + atoi(b);
}

int add2(char const *a, char const *b)
{
    return atoi(a) + atoi(b);
}

# Python
def add2(a, b):
    return int(a) + int(b)

通过上述声明,在Python和C中,您都可以使用整数值和/或字符串的任意组合调用add2()函数。 (我没有对字符串进行任何错误处理,但只要传入像"3"这样的合理字符串,C ++代码就会做正确的事。)不同之处在于,在C ++中你需要使用类型声明函数的多个版本,并根据需要转换参数;在Python中,您可以传递任何内容ab,而对int()的调用将尝试将传入的值强制转换为int类型。

单个Python函数将添加任何两个可转换为int类型的值。它将处理"3"之类的字符串,像3.1415这样的浮点值,布尔值(True转换为1False转换为0),传递int值时,对int()的调用只会使值保持不变;否则int()强制转换为int类型,如果转换失败则会引发异常。

这是一个Python如何更方便的例子,你可以在几行Python中完成很多工作。 (当然Python比C ++慢得多,因此Python不适合某些应用程序。)