0

正直なところ、「そのような同じボディで同じ名前の2つのネストされた関数の名前を変更することはできません」のような何らかのエラーを期待していました.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]: add(5,4)
1

これは関数のオーバーロードですか、それとも関数のオーバーライドですか??

4

5 に答える 5

4

関数の定義は、変数に値を代入するようなものです。Python でこれを行うことができます。

a = 1
a = 2

同様に、これを行うことができます:

def f():
    return 1
def f():
    return 2

どちらの場合も、最後に指定された値によって以前の値が上書きされます。したがって、最後のものが勝ちます。

ネストされた関数であるという事実は、この問題には関係ありません。同じことがどんな文脈にも当てはまります。

于 2012-07-18T05:30:03.760 に答える
0

関数定義は、現在のシンボル テーブルに関数名を導入します。関数名の値には、インタープリターによってユーザー定義関数として認識される型があります。この値は、別の名前に割り当てることも、関数を再定義して再割り当てすることもできます。

関数が再定義された場合、インタープリターによって認識される最新の定義が使用されます。

于 2012-07-18T06:04:46.153 に答える
0

最後の関数は他の関数を上書きします...したがって、エラーはありません! :)

于 2012-07-18T05:29:39.273 に答える