Python不使用静态类型。在<>在C++中,类型签名实际上被认为是函数名称的一部分;如果调用^ {CD1>}和^ {CD2>},实际上调用两个不同的函数。在
在Python中,任何特定的函数都只是一个函数对象。如果你有对它的引用,你可以调用它;你可以用它的名字来查找它,得到它的引用。不管怎样,“类型签名”都无关紧要。在
也可以,在C++中,如果你想重载一个函数,你会多次声明它,并用不同的类型签名;在Python中,你会声明它一次,但是利用“鸭式”来让它用不同的参数做正确的事情。下面是一个例子:// 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()函数。(我没有对字符串进行任何错误处理,但是C++代码将做正确的事情,只要你通过像{{CD4}}这样的敏感字符串),不同之处在于C++中需要使用类型来声明函数的多个版本,并在必要时转换参数;而在Python中,则需要使用类型来声明字符串。您可以以a或b的形式传入任何内容,int()的调用将尝试将传入的值强制为int类型。在
这个Python函数将添加任何两个可以转换为int类型的值。它将处理诸如"3"、浮点值如3.1415、布尔值(True转换为1,False转换为0)等字符串。当你传入int值时,int()的调用只会返回原样的值;否则,int()强制转换为int类型,如果转换失败,则引发异常。在
这是一个使用Python更方便的例子,您可以在几行Python中完成大量工作。(当然Python比C++慢得多,所以Python不适合某些应用。)