Za pomocą

a=7
print hex(id(a))

Wracając:

0x7f866b425e58

Zamierzając użyć tego wyjścia (przekonwertowane na ciąg) jako numer identyfikacyjny dla każdego obiektu klasyfikacji, którego zadeklarowano, muszę upewnić się, że pozostanie taki sam, podczas gdy program działa. Muszę też wiedzieć, czy druga postać jest zawsze "x" (na Mac, Win i Linux). Jeśli robię zły wybór, wybierając hex(id)), daj mi znać, co będzie lepszą opcją.

0
alphanumeric 16 sierpień 2014, 00:28

2 odpowiedzi

Najlepsza odpowiedź

id() ma być stabilny do żywotności obiektu, , ale Identyfikator można ponownie użyć, jeśli obiekt zostanie zniszczony.

Prefiks 0x zawsze będzie tam, gdy używasz hex(). Możesz również użyć format(..., 'x'), aby sformatować do numeru sześciokątnego bez prefiks:

>>> a = 7 
>>> print format(id(a), 'x')
7f866b425e58

Byłbyś lepszy tylko za pomocą itertools.count() obiekt Aby wyprodukować unikalne identyfikatory, być może z prefiksem lub negując numer, jeśli chcesz odróżnić je od innych:

from itertools import count

id_counter = count()

Za każdym razem, gdy potrzebujesz nowego identyfikatora, użyj:

next(id_counter)

I przechowuj to jako atrybut w swoich przypadkach. Możesz zrobić count() liczyć w dół , dając mu negatywny krok:

id_counter = count(-1, -1)

Próbny:

>>> from itertools import count
>>> id_counter = count(-1, -1)
>>> next(id_counter)
-1
>>> next(id_counter)
-2
7
Martijn Pieters 15 sierpień 2014, 20:58

Możesz spojrzeć na Hash (OBJ) https://docs.Przymiony.org /2/library/functions.html#hash.

Zwróć wartość Hash obiektu (jeśli ma jeden). Wartości Hash są liczbami całkowitymi. Służą do szybkiego porównywania kluczy słownika podczas wyszukiwania słownika. Wartości liczbowe, które porównują równe, mają tę samą wartość hash (nawet jeśli mają różne typy, podobnie jak w przypadku 1 i 1,0).

-1
user590028 15 sierpień 2014, 20:31