Skip to main content
 首页 » 编程设计

python之这个函数是重载还是什么

2025年05月04日14jiqing9006

def func(a, b, c='four'): 
    print 'a is %s, b is %s, c is %s' %(a, b ,c) 
 
func('one','two','three') 
func('one', 'two') 

这段代码运行没有问题。但这叫什么? “重载”?

顺便说一句,这种风格只能在 Python 中使用吗?谢谢!

请您参考如下方法:

Python 调用那些 ' default argument values '.这是一种非常简单的函数重载形式(在“arity”上重载(即函数有多少个参数))。不过,这与 Python 中的函数重载一样复杂。

由于保持语言相当简单的愿望和 Python 变量在运行时只有一个类型这一事实的结合,Python 不能按类型重载。如果愿意,您可以使用 isinstance 来滚动您自己的重载,但生成的代码非常困惑,我不推荐它。

其他语言也有默认参数。例如,C++ 也允许默认参数,并且 C++ 明确地将默认参数视为一种函数重载形式。

Python 默认参数与 C++ 的不同之处在于 Python 具有命名参数,这意味着您可以显式覆盖特定的默认值而不覆盖其他值。

例如:

def foo(bar, baz="A baz", qux=0): 
    return "(%r, %r, %r)" % (bar, baz, qux) 
 
foo(5) 
(5, 'A baz', 0) 
foo(5, qux=2) 
(5, 'A baz', 2) 

还有其他语言也允许这样做。例如,我相信这是 Ruby 允许的,尽管我不确定语法是什么。

最后,奇怪的是,Python 具有运算符重载。这是通过 functions with special reserved names 管理的那是一个类(class)的一部分。此类函数的格式始终为 __name__。运算符重载在任何单个运算符的情况下究竟如何工作的规则可能有点奇怪,我通常建议在大多数情况下不要使用此功能,尤其是对于重载数字或关系运算符。