2012-03-21 12 views
5

अस्वीकरण: हाँ मुझे एहसास है कि मैं जो सुझाव दे रहा हूं वह पागल है, मेरे पास एक बहुत ही खास (एबी) उपयोग केस है।क्या पाइथन dict literalals का आदेश दिया गया आदेश के रूप में मूल्यांकन किया गया है?

किसी विशेष निष्पादन के भीतर मैं शब्दकोष शब्दकोषों का मूल्यांकन करने के लिए शब्दकोष चाहता हूं, इसलिए मैं निष्पादित कोड से मूल ऑर्डरिंग को सुरक्षित रख सकता हूं।

मैंने निष्पादन से पहले __builtin __। Dict को बदलने की कोशिश की (इसे बाद में बहाल करने के लिए बहुत सावधान रहना), हालांकि यह तेंदुए को प्रभावित नहीं करता है, केवल ताना ही कॉल करता है।

>>> import __builtin__ 
>>> __builtin__.dict = list 
>>> exec "a={}" 
>>> a 
{} 
>>> exec "a=dict()" 
>>> a 
[] 

जाहिर है जिले मॉड्यूल है, लेकिन उस परमाणु कक्षा दृष्टिकोण से साइट है।

क्या कोई और तरीका है कि मैं तेंदुए के मूल्यांकन में हुक कर सकता हूं और क्या होता है?

पीएस Python2.6

+0

मुझे लगता है कि आप 'dict स्रोत में (tuples यहाँ)' साथ dict शाब्दिक को बदलने के लिए होगा, के रूप में dict शाब्दिक वाक्य रचना कर रहे हैं , इसलिए यह पायथन नहीं है अगर उन्हें डिक्ट्स के रूप में व्याख्या नहीं किया जाता है। – agf

उत्तर

1

के लिए मैं ast मॉड्यूल, जिसके साथ आप दिए गए कोड ast.parse और इसी निर्माता कॉल के साथ हर ast.Dict प्रविष्टि बदल सकते पर एक नजर है करने के लिए सुझाव देना चाहेंगे।

(लेकिन, माफ करना, ऐसा लगता है कि आप वास्तव में कुछ अजीब चाहते हैं।)

+0

मैं अस्थिरता के बारे में भूल गया, यह शायद डी से भी बेहतर है, हालांकि निश्चित रूप से एक ही श्रेणी में। –

+0

ठीक है, आइए कारण दें: आपको प्रोग्राम के व्यवहार को बदलने की ज़रूरत है (इससे कोई फर्क नहीं पड़ता कि यह पाइथन या व्हाट्नॉट है)। आप या तो इसे स्रोत स्तर पर बदलते हैं, या संकलन के बाद या आप निष्पादन वातावरण को पैच करते हैं। '{}' पर्यावरण से प्रभावित नहीं हो सकता है (जब तक आप दुभाषिया को पैच नहीं करते)। तो आप या तो बाइटकोड, या, अधिक मजबूत, पोर्टेबल और डिबगिंग-अनुकूल, स्रोत पैच करते हैं। – bereal

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^