xia*_*ong 1 python overloading
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')
Run Code Online (Sandbox Code Playgroud)
此代码运行没有问题.但是这叫什么呢?"超载"?
顺便说一下,这种风格只在Python中提供吗?谢谢!
Python调用那些' 默认参数值 '.它是一种非常简单的函数重载形式(在' arity ' 上重载(即函数有多少个参数)).这很复杂,但你可以通过Python中的函数重载来获得.
由于希望保持语言相当简单以及Python变量在运行时只有类型的事实,Python不能按类型重载.isinstance如果你愿意,你可以使用滚动自己的重载,但结果代码非常混乱,我不推荐它.
其他语言也有默认参数.例如,C++也允许使用默认参数,C++显式将默认参数视为函数重载的一种形式.
关于与C++不同的Python默认参数的一点是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)
Run Code Online (Sandbox Code Playgroud)
还有其他语言允许这样做.我相信,例如,这是Ruby允许的,尽管我不确定语法是什么.
最后,奇怪的是,Python有运算符重载.这是通过具有特殊保留名称的函数来管理的,这些函数是类的一部分.这些功能总是有形式的__name__.在任何单个运算符的情况下,运算符重载如何工作的规则可能有点奇怪,我通常建议在大多数情况下不使用此功能,尤其是对于重载数字或关系运算符.