python中的函数名相同,没有错误?
老实说,我期待着出现某种错误,比如“不能在同一个主体中重命名两个同名的嵌套函数”,我们可以在python中定义任意数量的同名函数吗python中的函数名相同,没有错误?,python,function,nested,overloading,overriding,Python,Function,Nested,Overloading,Overriding,老实说,我期待着出现某种错误,比如“不能在同一个主体中重命名两个同名的嵌套函数”,我们可以在python中定义任意数量的同名函数吗 In [40]: def add(i,j): ....: def add(i,j): ....: print i+j ....: def add(i,j): ....: print i-j ....: return add(i,j) ....: In [41]:
In [40]: def add(i,j):
....: def add(i,j):
....: print i+j
....: def add(i,j):
....: print i-j
....: return add(i,j)
....:
In [41]: add(5,4)
1
这是函数重载还是函数重写???最后一个函数重写了其他函数。。。所以,没有错误!: 定义函数就像给变量赋值一样。您可以在Python中执行此操作:
a = 1
a = 2
同样,您可以这样做:
def f():
return 1
def f():
return 2
在这两种情况下,最后指定的值都会覆盖以前的任何值。最后一个赢了
它是一个嵌套函数这一事实与问题无关。这同样适用于任何情况。当然。def语句在功能上是函数对名称的赋值,可以对同一名称进行任意数量的赋值。重要的是要认识到函数定义是在Python中执行的,它们不是在编译时静态计算的
在类定义中,有很多方法可以捕捉到这一点,比如我在5月份发布的。如果您使用的是Python3,那么有一个问题
对于函数,这将不起作用,因此我相信您会被这种行为所困扰。函数定义在当前符号表中引入函数名称。函数名的值具有解释器识别为用户定义函数的类型。然后可以将该值分配给另一个名称,甚至可以通过重新定义函数来重新分配该值
在重新定义函数的情况下,将使用最新的定义,因为它是解释器可以识别的定义。需要澄清的是,第二个嵌套的add覆盖第一个,但外部的add保持不变 下面是一个简单的例子:
def do_sth(s):
def do_sth(s):
print('Hello, %s!' % s)
print('Ola')
do_sth(s)
>>> do_sth('chuinul')
Ola
Hello, chuinul!
>>> do_sth('chuinul')
Ola
Hello, chuinul!
当你第二次调用do_sth时,这仍然是你定义的被调用的外部函数。否则你只会有:
>>> do_sth('chuinul')
Hello, chuinul!
不,相同名称的最后一个函数定义将覆盖/覆盖上述所有定义summ,你确定我认为它重载了吗?pythonRules中不支持not OVERRINGOVERLOADING重载。指定重载函数必须因arity或数据类型而不同,因为函数定义中没有参数类型。。没有超载,看看这个。。。。