2012-06-20 17 views
25

स्टैक ओवरफ़्लो पर पहली बार उपयोगकर्ता और मैं यहां रहने के लिए उत्साहित हूं।पायथन - निरंतर सूचियों या शब्दकोशों को परिभाषित करने का सबसे अच्छा/साफ तरीका

इंन्ट्रो: मैंने हाल ही में पाइथन प्रोग्रामिंग की दुनिया में जादुई साहसिक शुरू की - मुझे यह पसंद है। अब सी से मेरे अजीब संक्रमण में सबकुछ सुचारू रूप से चला गया है, लेकिन मुझे ऐसा कुछ बनाने में परेशानी हो रही है जो एक हेडर फ़ाइल (.h) का समानार्थी होगा।

समस्या: मेरे पास मध्यम आकार के शब्दकोश और सूचियां (लगभग 1000 तत्व), लंबी enums, और '#defines' (वास्तव में वास्तव में नहीं) है, लेकिन मुझे उन सभी को व्यवस्थित करने का एक साफ तरीका नहीं मिल रहा है। सी में, मैं उन्हें सभी को हेडर फ़ाइल में फेंक दूंगा और फिर कभी इसके बारे में सोचना नहीं चाहूंगा, हालांकि, पाइथन में यह संभव नहीं है या इसलिए मुझे लगता है।

वर्तमान डर्टी समाधान: मैं मॉड्यूल या फ़ंक्शन के शीर्ष पर सभी कॉन्स्टेंट चर प्रारंभ कर रहा हूं (मॉड्यूल यदि एकाधिक कार्यों को इसकी आवश्यकता है)।

निष्कर्ष: यदि कोई निरंतर परिवर्तनीय रूप से व्यवस्थित करने के लिए किसी तरीके से आया होता तो मैं हमेशा के लिए आभारी रहूंगा।

आपको बहुत धन्यवाद!

+6

मैं बस कहना चाहता था, स्टैक में आपका स्वागत है, और यहां एक अच्छी तरह से संगठित प्रश्न के साथ शुरू करने के लिए धन्यवाद! – jdi

उत्तर

19

अपने स्वयं के मॉड्यूल में अपने स्थिरांक रखो:

# constants.py 

RED = 1 
BLUE = 2 
GREEN = 3 

फिर उस मॉड्यूल आयात और स्थिरांक का उपयोग करें:

import constants 

print "RED is", constants.RED 

स्थिरांक आप की तरह किसी भी मूल्य हो सकता है, मैं यहाँ पूर्णांकों दिखाया है , लेकिन सूचियों और डिक्ट्स वही काम करेंगे।

+0

ग्रेट विचार। क्या आप जानते हैं कि विलंबता या दक्षता हानि कैसा है? चूंकि तकनीकी रूप से आप इसे आयात कर रहे हैं और क्या आपको मूल्य का संदर्भ देने पर हर बार एक लुक-अप की आवश्यकता नहीं होती है? – TSmith

+0

आप प्रत्येक बार एक विशेषता लुकअप कर रहे हैं, जो हर तरह का ऑपरेशन होता है, वैसे भी, यह वास्तव में चिंता करने की बात नहीं है। –

+1

@Tmith: और यदि आप उस छोटे से समय को शेविंग से बहुत चिंतित हैं, तो आप हमेशा 'स्थिरांक आयात लाल' से कर सकते हैं, या इसे सुपर लूप लूप से पहले एक चर के लिए असाइन कर सकते हैं: 'red = constants।लाल ' – jdi

9
आमतौर पर

मैं क्या यह:

फ़ाइल: constants.py

CONSTANT1 = 'asd' 
CONSTANT_FOO = 123 
CONSTANT_BAR = [1, 2, 5] 

फ़ाइल: your_script.py

from constants import CONSTANT1, CONSTANT_FOO 
# or if you want *all* of them 
# from constants import * 

... 

अब आप अपने स्थिरांक एक फाइल और आप में हैं अच्छी तरह से आयात और उनका उपयोग कर सकते हैं।

+0

धन्यवाद, अगर आप मदद कर सकते हैं तो दक्षता प्रश्न पर आपको CCCing। – TSmith

+0

यदि आप उन सभी को आयात करते हैं, तो स्थिरांक वैश्विक चर बन जाते हैं और उन्हें एक लुकअप की आवश्यकता नहीं होगी। ध्यान दें कि पाइथन सी से 200 गुना धीमी है, इसलिए यदि आप माइक्रो ऑप्टिमाइज़ करने का प्रयास करते हैं तो आपको अधिक गति वृद्धि दिखाई नहीं देगी। – Blender

+0

ब्लेंडर धन्यवाद। त्वरित जिज्ञासा प्रश्न, यदि मैं उस आयातित वैश्विक चर में एक स्थानीय चर (फ़ंक्शन के भीतर) असाइन करता हूं, तो क्या स्थानीय var की प्रतिलिपि या वैश्विक के संदर्भ में होगी? – TSmith

2

एक अलग फ़ाइल constants.py बनाएं, और वहां सभी वैश्विक रूप से प्रासंगिक स्थिरांक रखें। फिर आप को constants.SPAM के रूप में संदर्भित करने के लिए या SPAM या EGGS के रूप में संदर्भित करने के लिए (संदिग्ध) from constants import * कर सकते हैं।

जबकि हम यहां हैं, ध्यान दें कि पायथन स्थिर स्थिरांक का समर्थन नहीं करता है। सम्मेलन सिर्फ उन्हें ALL_CAPS में नामित करने और उन्हें विचलित करने का वादा करने के लिए है।

+0

हाहा हाँ मैं वादा करता हूँ :), लेकिन रन टाइम दक्षता के बारे में क्या? जब आप मॉड्यूल आयात करते हैं तो यह सी में "__inline" की तरह है? – TSmith

+0

@Tmith: मैं इसकी तुलना किसी इनलाइन से नहीं करूँगा क्योंकि यह वास्तव में सिर्फ नामस्थान मॉड्यूल ऑब्जेक्ट में आयात कर रहा है, और यह केवल एक बार करता है, और इसे बाद के आयात के लिए स्मृति में साझा करता है। – jdi

+0

हां, यह अब एक मूर्ख सवाल था कि मैं इसके बारे में सोचता हूं। धन्यवाद आपका दिन शुभ हो! – TSmith

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

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