如果 Python 不支持方法重载,那么为什么这个方法重载有效而另一个方法不支持?
if Python doesn't support method overloading, then why does this method overload work while this other does not?
如果Python不支持方法重载(除了*args和**kwargs或PEP 3124),那么为什么这个重载有效?
# the sum from 1 to n
def sum(n):
if n > 0:
return n + sum(n - 1)
else:
return 0
print(sum(3))
# the sum from n to m, inclusive
def sum(n, m):
if n <= m:
return n + sum(n + 1, m)
else:
return 0
print(sum(3,5))
...虽然更令人费解,但这个不是:
# the sum of elements in an array
def sumArray(A):
return sumArray(A, len(A)-1)
# a helper for the above
def sumArray(A, i):
if i < 0:
return 0
else:
return A[i] + sumArray(A, i-1)
print(sumArray([1,2,3]))
您没有超载。通过对不同的对象使用相同的名称,您将一件事隐藏在另一件事之后。尝试
sum = 42
看看 print(sum(3, 5))
是如何停止工作的。
在你的第一个例子中,你定义了函数并使用它,然后用另一个覆盖它,并使用新的,就像使用常规变量一样:
a = 1
print(a)
a = 2
print(a)
函数定义是变量赋值。他们创建一个函数并将其分配给与您使用的名称匹配的变量。您正在看到重新分配变量的普通效果。
def sum(n):
...
这将 1 个参数的函数分配给变量 sum
。
print(sum(3))
这使用分配给该变量的函数。
def sum(n, m):
...
这为变量 sum
分配了一个新函数,替换了第一个函数。
print(sum(3,5))
这个使用了新函数。如果您尝试使用旧功能,您将找不到它。
# the sum of elements in an array
def sumArray(A):
return sumArray(A, len(A)-1)
# a helper for the above
def sumArray(A, i):
if i < 0:
return 0
else:
return A[i] + sumArray(A, i-1)
print(sumArray([1,2,3]))
这会将一个函数分配给 sumArray
,然后将另一个函数分配给 sumArray
,然后尝试使用第一个分配的值。它找到第二个函数,但失败了。
如果Python不支持方法重载(除了*args和**kwargs或PEP 3124),那么为什么这个重载有效?
# the sum from 1 to n
def sum(n):
if n > 0:
return n + sum(n - 1)
else:
return 0
print(sum(3))
# the sum from n to m, inclusive
def sum(n, m):
if n <= m:
return n + sum(n + 1, m)
else:
return 0
print(sum(3,5))
...虽然更令人费解,但这个不是:
# the sum of elements in an array
def sumArray(A):
return sumArray(A, len(A)-1)
# a helper for the above
def sumArray(A, i):
if i < 0:
return 0
else:
return A[i] + sumArray(A, i-1)
print(sumArray([1,2,3]))
您没有超载。通过对不同的对象使用相同的名称,您将一件事隐藏在另一件事之后。尝试
sum = 42
看看 print(sum(3, 5))
是如何停止工作的。
在你的第一个例子中,你定义了函数并使用它,然后用另一个覆盖它,并使用新的,就像使用常规变量一样:
a = 1
print(a)
a = 2
print(a)
函数定义是变量赋值。他们创建一个函数并将其分配给与您使用的名称匹配的变量。您正在看到重新分配变量的普通效果。
def sum(n):
...
这将 1 个参数的函数分配给变量 sum
。
print(sum(3))
这使用分配给该变量的函数。
def sum(n, m):
...
这为变量 sum
分配了一个新函数,替换了第一个函数。
print(sum(3,5))
这个使用了新函数。如果您尝试使用旧功能,您将找不到它。
# the sum of elements in an array
def sumArray(A):
return sumArray(A, len(A)-1)
# a helper for the above
def sumArray(A, i):
if i < 0:
return 0
else:
return A[i] + sumArray(A, i-1)
print(sumArray([1,2,3]))
这会将一个函数分配给 sumArray
,然后将另一个函数分配给 sumArray
,然后尝试使用第一个分配的值。它找到第二个函数,但失败了。