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