[英]Same function names in python , No error?
老實說,我期待發生某種錯誤,例如“ 您不能在同一個主體中重命名具有相同名稱的兩個嵌套函數” ,我們可以在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
這是功能的重載,還是功能的重載?
定義一個函數就像給一個變量賦值。 您可以在Python中執行此操作:
a = 1
a = 2
同樣,您可以執行以下操作:
def f():
return 1
def f():
return 2
在這兩種情況下,指定的最后一個值都會覆蓋以前的所有值。 因此,最后一個獲勝。
它是嵌套函數這一事實與問題無關。 在任何情況下都一樣。
最后一個函數會覆蓋其他函數...因此,沒有錯誤! :)
函數定義在當前符號表中引入函數名稱。 函數名稱的值具有一種類型,該類型可以被解釋器識別為用戶定義的函數。 然后可以將此值分配給另一個名稱,甚至可以通過重新定義功能來重新分配。
在重新定義函數的情況下,將使用最新定義,因為它是解釋器可以識別的函數。
只需清楚一點,第二個嵌套的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!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.