2014-07-18 27 views
5

Czy istnieje odwrotność lub odwrotność wbudowanej funkcji id? Myślałem o użyciu go do kodowania i dekodowania ciągów bez zajmowania zbyt dużo czasu lub mając dużo narzutów, takich jak biblioteka PyCrypto. Potrzeba jest bardzo prosta, więc nie chcę używać PyCrypto do prostego kodowania i dekodowania.Funkcja odwracania w języku Python funkcji wbudowanej id (...)

Coś jak:

>>> id("foobar") 
4330174256 
>>> reverse_id(4330174256) # some function like this to reverse. 
"foobar" 
+0

[ 'base64'] (https://docs.python.org/2/library/base64.html) może lepiej dopasowane do Twoich potrzeb ... – dano

+6

'id' nie jest funkcją kodowania ciągów znaków. Zwraca unikalny identyfikator dla przekazywanego obiektu, który może zmieniać się między przebiegami. –

Odpowiedz

8

Nie chcę ukraść kredyty z man who answered the question

This can be done easily by ctypes: 

import ctypes 
a = "hello world" 
print ctypes.cast(id(a), ctypes.py_object).value 
output: 

hello world 
+0

Ah, fajnie! Chyba nie przewinąłem wystarczająco daleko w dół strony. Nadal uważam, że "base64" jest o wiele bardziej odpowiedni dla tego, co OP robi tutaj. – dano

+1

@dano Też tak myślę, ale on odpowiedział ** Czy istnieje odwrotność lub odwrotność funkcji wbudowanej id? ** –

+0

Och, na pewno (dlatego właśnie przegłosowałem ciebie). Ale czasami OP uważa, że ​​potrzebują odpowiedzi na jedno pytanie, kiedy naprawdę potrzebują innej odpowiedzi na inne pytanie. – dano

3

myślę moduł base64 będzie pasowała do Twoich potrzeb tutaj, zamiast próbować wykorzystać id:

>>> import base64 
>>> base64.b64encode("foobar") 
'Zm9vYmFy' 
>>> base64.b64decode('Zm9vYmFy') 
'foobar' 

Odpowiedź na swoim dosłownym pytanie (mogę spojrzeć w górę obiekt według jego id?) odpowiada here. Krótka odpowiedź brzmi: nie, nie możesz. Edycja: Victor Castillo Torres wyciąga z tego this actually is possible, jeśli używasz CPython, poprzez moduł ctypes.