2014-07-18 4 views
5

C'è una inversione o una inversa della funzione integrata id? Stavo pensando di usarlo per codificare e decodificare la stringa senza impiegare troppo tempo o avere un sovraccarico come la libreria PyCrypto. Il bisogno per me è abbastanza semplice, quindi non voglio usare PyCrypto per una semplice codifica e decodifica.Funzione inversa Python della funzione integrata id (...)

Qualcosa di simile:

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

[ 'base64'] (https://docs.python.org/2/library/base64.html) potrebbero soddisfare le vostre esigenze meglio ... – dano

+6

'id' non è una funzione di codifica delle stringhe. Restituisce un ID univoco per l'oggetto passato, che può cambiare tra le esecuzioni. –

risposta

8

Non voglio rubare i crediti dalla 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, fantastico! Immagino di non averlo scrollato abbastanza in fondo alla pagina. Continuo a pensare che 'base64' sia molto più appropriato per ciò che l'OP sta cercando di fare qui, però. – dano

+1

@dano Lo penso anch'io ma ha risposto ** C'è un inverso o inverso della funzione built-in id? ** –

+0

Oh, di sicuro (che è il motivo per cui ho svalutato te). Ma a volte l'OP pensa di aver bisogno di una risposta per una domanda, quando hanno davvero bisogno di una risposta diversa a una domanda diversa. – dano

3

Credo che il modulo base64 avrebbe soddisfare le vostre esigenze qui, piuttosto che cercare di utilizzare id:

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

La risposta alla tua domanda letterale (posso guardare in alto un oggetto dal suo id?) viene risposto here. La risposta breve è no, non è possibile. Modifica: Victor Castillo Torres rimuove il numero this actually is possible se si sta utilizzando CPython, tramite il modulo ctypes.