簡體   English   中英

在Python中調用函數句柄時的內存地址

[英]Memory address when function handle called in Python

我了解這可能不是編程問題,但我仍然想知道:

為什么在調用函數句柄時Python返回函數的內存?

>>> my_func
<function my_func at 0x3ead488>

什么時候/有用嗎? 為什么不顯示功能的實際內容(同時仍保持相同的功能;功能的鏈接)?

您正在查看沒有文字表示形式的Python對象的repr()表示形式。 這些對象遵循大多數Python對象遵循的默認<type ... at 0xid>模式。

目的是使您能夠區分不同的function對象,即使它們的名稱相同也是如此。 如果您有兩個foo函數,則希望能夠查看它們是否是同一對象; 表示中的id()值使您可以這樣做。

引用__repr__方法文檔

repr()內置函數和字符串轉換(反引號)調用以計算對象的“正式”字符串表示形式。 如果可能的話,這應該看起來像一個有效的Python表達式,可以用來重新創建具有相同值的對象(在適當的環境下)。 如果這不可能,則應返回格式為<...一些有用的說明...>的字符串。 返回值必須是一個字符串對象。 如果一個類定義了__repr__()而不是__str__() ,則當需要該類實例的“非正式”字符串表示形式時,也使用__repr__()

這通常用於調試,因此重要的是,表示形式必須信息豐富且明確。

函數的內容是:a)可能更大,並且b)需要源文件可用。 function對象本身僅引用字節碼 ,即已編譯的代碼對象。 即使源文件可用,打印具有全部功能的容器對象也會導致輸出過於冗長。

如果要查看給定功能對象的源代碼,請在該對象上使用inspect.getsource() 可以引發IOError如果沒有源可用例外。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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