簡體   English   中英

在python中打印方法時十六進制值是什么意思?

[英]What does the hex value means when printing a method in python?

只是一個簡單而快速的問題,我找不到答案。 我有這個類,里面有這個方法:

class Pokemon:
    "This is a pokemon class"
     number = 10

    def birth(self):
        print('Hello')

print(Pokemon.birth)

輸出:

<function Pokemon.birth at 0x7fc78c6e8160>

當我打印它返回一個十六進制數的方法時,這個十六進制到底是什么意思? 內存位置? 我試圖了解代碼背后的過程。

PD。 我不是想讓這門課起作用,只是對十六進制好奇

謝謝

是的,那是內存地址。 您也可以使用id()內置函數獲取它。

這是函數的內存地址。

調用函數時需要使用括號。 如果你不使用括號來調用函數,解釋器不會抱怨/崩潰,它只會告訴你你擁有的是一個函數句柄(即你得到的消息,內存地址)。

順便說一句,您可以使用id()獲取函數的十六進制內存地址

Help on built-in function id in module builtins: id(obj, /) Return the identity of an object. This is guaranteed to be unique among simultaneously existing objects. (CPython uses the object's memory address.)

如果你想調用一個函數,你應該通過調用birth()來調用它。 你的電話只顯示birth的身份

為了使您的代碼工作,您需要創建一個類的實例。

pokemonPokemon類的一個實例,因此您可以調用屬於實例方法的birth 有關此主題的更多信息,請參見此處

class Pokemon:
    "This is a pokemon class"
    number = 10

    def birth(self):
        print('Hello')

pokemon = Pokemon()
pokemon.birth()
  • 這個十六進制到底是什么意思? 內存位置?

Yes 是對象在內存中的地址。 它以十六進制數表示,以使其更具“人類可讀性”。

import sys

class Pokemon:
    "This is a Pokemon class"
    numner = 10

    def birth(self):
        print('Hello')


print(Pokemon)
#<class '__main__.Pokemon'>

print(Pokemon.birth)
#<function Pokemon.birth at 0x000001F83C177C10>

print(hex(id(Pokemon)))
#0x1f83bf6fad0

print(hex(id(Pokemon.birth)))
#0x1f83c177c10

print(Pokemon.birth.__repr__)
# <method-wrapper '__repr__' of function object at 0x0000018609D87C10>

有趣的功能

只考慮直接歸因於對象的內存消耗,而不是它所引用的對象的內存消耗。

print(sys.getsizeof(Pokemon))
print(sys.getsizeof(Pokemon.birth))
#1064
#136
  • 引用計數和命名空間

下面的代碼顯示了對象 Pokemon.birth 離開的地方。 它不在 globals() 命名空間中,而是在 '__main.__Pokemon' 類命名空間中。

print(globals()['Pokemon'])
# <class '__main__.Pokemon'>
print(Pokemon.__dict__['birth'])
# <function Pokemon.birth at 0x0000020D51167C10>

暫無
暫無

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

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