[英]What happens internally when we assign a function to a name?
def x():
print("This is a function x")
我定義了一個名為x
的函數並將其分配給y
y = x
y() # Calling this would call the original function
但是內部發生了什么,是給函數分配了指針或引用還是我無法理解的類似實例的事情? 還是給x
定義的內存地址提供鏈接?
函數是對象,就像Python中的所有其他對象一樣。 將函數分配給名稱就像分配字符串或列表一樣,對這些對象創建新引用。
由於在python中一切都是對象(甚至函數都是第一類對象),因此,當您定義函數'x'並將其分配給變量(name)'y'時,它只不過是名稱與對象'x的綁定”。 對於此聲明,
y=x()
名稱y綁定到功能x的范圍。 所以,
y()
綁定到x的函數調用。
通過將函數分配給變量:
y = x
x()的對象的引用存儲在變量y中
當您通過以下方式將分配的變量作為函數調用時:
y()
這通過使用存儲的引用來調用函數x
就像在幾乎所有其他編程語言中一樣,函數是對象 。
def x():
print("This is a function x")
x現在是類型函數的對象
y = x
y() # Calling this would call the original
因此,在y變量中存儲了指向x對象/函數的指針。 如果調用y(),則y將查找其“原點”並調用x ...
因為所有函數都是對象,所以您還可以將函數作為參數傳遞:
def test(func):
func()
test(x)
將輸出:
這是一個函數x
希望我能幫上忙!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.