2014-07-18 23 views
5

Có đảo ngược hoặc nghịch đảo của hàm tích hợp id không? Tôi đã nghĩ đến việc sử dụng nó để mã hóa và giải mã chuỗi mà không tốn quá nhiều thời gian hoặc có rất nhiều chi phí như thư viện PyCrypto. Nhu cầu của tôi khá đơn giản nên tôi không muốn sử dụng PyCrypto để mã hóa và giải mã đơn giản.Chức năng nghịch đảo Python của hàm id (...) tích hợp

Cái gì như:

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

[ 'base64'] (https://docs.python.org/2/library/base64.html) có thể phù hợp với nhu cầu của bạn tốt hơn ... – dano

+6

'id' không phải là chức năng mã hóa chuỗi. Nó trả về một ID duy nhất cho đối tượng được truyền, có thể thay đổi giữa các lần chạy. –

Trả lời

8

Tôi không muốn để ăn cắp các khoản tín dụng từ 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, tuyệt! Tôi đoán tôi đã không di chuyển đủ xa xuống trang. Tôi vẫn nghĩ rằng 'base64' là phù hợp hơn cho những gì OP đang cố gắng làm ở đây, mặc dù. – dano

+1

@ dano Tôi cũng nghĩ vậy nhưng anh ấy trả lời ** Có đảo ngược hay nghịch đảo của hàm tích hợp id không? ** –

+0

Ồ, chắc chắn (đó là lý do tại sao tôi upvoted bạn). Nhưng đôi khi OP cho rằng họ cần câu trả lời cho một câu hỏi, khi họ thực sự cần một câu trả lời khác cho một câu hỏi khác. – dano

3

Tôi nghĩ rằng mô-đun base64 sẽ phù hợp với nhu cầu của bạn ở đây, chứ không phải là cố gắng sử dụng id:

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

Câu trả lời cho câu hỏi theo nghĩa đen của bạn (có thể tôi ngước lên một đối tượng bằng id của nó?) được trả lời here. Câu trả lời ngắn gọn là không, bạn không thể. Chỉnh sửa: Victor Castillo Torres phát ra rằng this actually is possible nếu bạn đang sử dụng CPython, thông qua mô-đun ctypes.

Các vấn đề liên quan