2010-05-25 2 views
7

हो रही चीजों में कोड बेस मैं इस इंपोर्ट स्टेटमेंटपायडॉन में "मॉड्यूल आयात _" से क्या करता है?

from GTG import _ 

पर ठोकर खाई Gnome और पता नहीं इसका क्या मतलब है, कभी नहीं दस्तावेज में यह देखा और एक त्वरित इतना/गूगल खोज कुछ भी बारी अप नहीं किया।

उत्तर

11

from GTG import _ "वर्तमान" नेम स्पेस में GTG मॉड्यूल से _ समारोह आयात करता है।

आमतौर पर, _ फ़ंक्शन gettext.gettext() के लिए एक उपनाम है, एक फ़ंक्शन जो किसी दिए गए संदेश का स्थानीय संस्करण दिखाता है।

import gettext 
gettext.bindtextdomain('myapplication', '/path/to/my/language/directory') 
gettext.textdomain('myapplication') 
_ = gettext.gettext 
# ... 
print _('This is a translatable string.') 
+0

हाय धन्यवाद, यह वास्तव में सहायक है। मैं सामान्य 'बीएलए आयात ब्लै' वाक्यविन्यास से अवगत था, इसलिए इस सम्मेलन के बारे में पता लगाना वास्तव में मैं चाहता था! इस तरह के एक शॉर्टेंड का उपयोग अब और अधिक समझ में आता है। धन्यवाद – Paul

+0

@bp उचित उपयोग। इसके अलावा, दस्तावेज पढ़ने के लिए संपत्ति अधिकारों का दावा करने की तुलना में अजगर संस्कृति में अधिक मूल्यवान है ... – twneale

4

यह वर्तमान नामस्थान में फ़ंक्शन/कक्षा/मॉड्यूल _ आयात करता है। तो GTG._ टाइप करने के बजाय, आपको इसका उपयोग करने के लिए केवल _ टाइप करना होगा।

http://docs.python.org/tutorial/modules.html#more-on-modules

यह ध्यान देने योग्य है कि आप देखभाल के साथ इस का उपयोग करना चाहिए:

यहाँ कुछ प्रलेखन है। इसे बहुत अधिक करने से वर्तमान नामस्थान को प्रदूषित किया जा सकता है, कोड को पढ़ने में कठिनाई हो सकती है, और संभवतः रनटाइम त्रुटियों को शुरू किया जा सकता है। इसके अलावा, कभी कभी ऐसा करने कभी नहीं:

from MODULE import * 

, के रूप में यह बहुत ज्यादा वर्तमान नाम स्थान को प्रदूषित करता है।

यह तकनीक सबसे उपयोगी है जब आप जानते हैं कि आप केवल मॉड्यूल से एक या दो कार्यों/कक्षाओं/मॉड्यूल का उपयोग करने जा रहे हैं, क्योंकि यह केवल सूचीबद्ध संपत्ति आयात करता है।

उदाहरण के लिए, अगर मैं itertools मॉड्यूल से imap समारोह का उपयोग करना चाहते हैं, और मैं जानता हूँ कि मैं किसी अन्य itertools कार्यों की जरूरत नहीं होगी, मैं

from itertools import imap 

लिख सकता है और यह केवल imap आयात होगा समारोह।

जैसा कि मैंने पहले कहा, यह सावधानी से किया जाना चाहिए, क्योंकि कुछ लोगों को लगता है कि हो सकता है कि

import itertools 

# ... more code ... 

new_list = itertools.imap(my_func, my_list) 

से

from itertools import imap 

# ... more code ... 

new_list = imap(my_func, my_list) 

अधिक पठनीय है, क्योंकि यह यह स्पष्ट वास्तव में कौन-imap मॉड्यूल बनाता है समारोह से आया था।

+8

यह उल्लेख के लायक है कि '_' पायथन में एक विशेष अर्थ नहीं है है, यह सिर्फ एक और पत्र-तरह है: प्रलेखन क्या आम तौर पर अब तक, बहुत दूर एक मॉड्यूल में कहीं और हो रहा है की एक तस्वीर देता है चरित्र जिसे आप एक चर नाम देने के लिए उपयोग कर सकते हैं। –

+0

@ पॉल, इसे इंगित करने के लिए धन्यवाद। मैं सामान्य 'जीटीजी आयात ब्लै' वाक्यविन्यास से अवगत था लेकिन _ मुझे भ्रमित कर दिया। अब, मैंने पहले सोचा था कि जीटीजी पैकेज फ़ोल्डर में फ़ाइल _.py होना होगा, लेकिन मुझे लगता है कि यह गलत है। जीटीजी/फ़ोल्डर में '__init__.py' फ़ाइल में '_ = अनुवाद है।गेटटेक्स्ट ' तो मुझे लगता है कि वह सब तब है। कोई कारण किसी ऐसे व्यक्ति को इस तरह के अजीब तरीके से नामित करना चाहेगा? – Paul

+0

@DavidZ पूरी तरह से सच नहीं है। fibo आयात से * अंडरस्कोर (_) से शुरू होने वाले सभी को छोड़कर सभी नाम आयात करता है। –