Same function names in python , No error?
老实说,我一直在期待一些错误,比如"你不能在同一个主体中重命名两个同名的嵌套函数",我们能在python中定义任意数量的同名函数吗?
1 2 3 4 5 6 7 8 9 10 | 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 |
这是函数重载还是函数重写??
当然。
在类定义中有很多方法可以捕捉到这一点,比如我在5月份发布的这个方法。如果您使用的是python 3,那么有更好的方法。
对于函数来说,这是行不通的,所以我相信你会被这种行为所困扰。
定义函数就像给变量赋值一样。在python中可以这样做:
1 2 | a = 1 a = 2 |
同样,您也可以这样做:
1 2 3 4 | def f(): return 1 def f(): return 2 |
在这两种情况下,指定的最后一个值将覆盖以前的任何值。所以最后一个赢了。
它是一个嵌套函数的事实与这个问题没有关系。这同样适用于任何上下文。
为了清楚起见,第二个嵌套的
下面是一个最小的例子:
1 2 3 4 5 6 7 8 9 10 11 12 | 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! |
当您第二次调用
1 2 | >>> do_sth('chuinul') Hello, chuinul! |
函数定义在当前符号表中引入函数名。函数名的值的类型被解释器识别为用户定义的函数。然后可以将此值分配给其他名称,甚至可以通过重新定义函数来重新分配。
在重新定义函数的情况下,将使用最新的定义,因为它是解释器识别的定义。
最后一个函数将覆盖其他函数…所以,没有错误!:)