簡體   English   中英

當我們給一個名字分配一個函數時,內部會發生什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM