2010-08-30 6 views
13

में 'से ... आयात ...' सिंटैक्स के पीछे तर्क मैंने हमेशा सोचा कि क्यों मॉड्यूल से विशिष्ट ऑब्जेक्ट्स आयात करने के लिए वाक्यविन्यास import x, y, z from module के बजाय है। मैं एक देशी वक्ता नहीं हूं, लेकिन बाद में अधिक सही/प्राकृतिक नहीं है?पाइथन

तो, पहले से क्या कारण है? क्या यह केवल व्याकरण को सरल बनाना है (कम लुकहेड की आवश्यकता है)? क्या यह दो प्रकार के आयात को और अधिक विशिष्ट बनाने का प्रयास है? या क्या यह उन मामलों में से एक है जहां स्पष्ट तरीका "पहले तक स्पष्ट नहीं है जब तक कि आप डच न हों"? ;)

+1

मैं अभी भी पायथन सीख रहा हूँ, लेकिन IMHO निम्नलिखित की तरह यह भाषा के बाकी के साथ और अधिक सुसंगत हो गया होता लगता है: 'आयात (मॉड्यूल, एक्स, वाई, जेड)'। बिल्कुल 'से' की कोई ज़रूरत नहीं है। – FMc

+5

@ एफएम: यदि आप विशेष वाक्य रचनात्मक उपचार प्राप्त करने के लिए 'आयात' नहीं चाहते हैं, तो आपको * आयात ('मॉड्यूल', 'x', 'y', 'z') लिखना होगा, * नामों को पार करना * ऑब्जेक्ट्स के कारण, क्योंकि वस्तुएं * आयात * के बाद * अनुपलब्ध हैं। – dan04

+1

मैंने कभी देखा है कि सबसे अच्छा आयात वाक्यविन्यास हास्केल में था: 'आयात मॉड्यूल (ए, बी, सी) '। स्वच्छ, स्पष्ट और एकाधिक आयात विवरण बनाता है वर्दी और गठबंधन (दुर्भाग्यवश 'आयात योग्य' केस को छोड़कर)। और मुझे नहीं पता कि जीवीआर ने उस बदसूरत से 'आयात' क्यों चुना है। – firegurafiku

उत्तर

17

कोई विचार क्यों यह था वास्तव में कि जिस तरह से किया, लेकिन यह जिस तरह से मैं यह कर चाहते हैं, बस, क्योंकि एक इंजीनियरिंग प्रकार किया जा रहा है, यह एक सामान्य श्रेणी से शुरू करने और बारीकियों और ड्रिल-डाउन मेरे लिए और अधिक प्राकृतिक लगता है ।

इसका मतलब यह भी होगा कि पार्सर को अनुक्रमिक रूप से संसाधित होने पर कम सामान स्टोर करना होगा। के साथ:

import x,y,z from a 

आप x, y और z याद करने के लिए किया है। इसके साथ:

from a import x,y,z 

आपको केवल a याद रखना होगा।


इसलिए मैं इतना मुसीबत था जब मैं पहली बार सामना करना पड़ा पर्ल के बाद अगर संस्करण:

$x = $y if $y > 40; 

के बाद से आप पहले में नहीं पता कि क्या आप पढ़ रहे हैं सशर्त है या नहीं।

+1

अब जब आप "पोस्टफिक्स अगर" का जिक्र करते हैं, तो मुझे लगता है कि मुझे एक पठनीयता बोनस दिखाई देता है ... +1, तब तक स्वीकार किया जाएगा जब तक कि uber-answer bei A.M. साथ आता है;) – delnan

+0

ओह, एएम की तरह। अधिक प्रतिनिधि की जरूरत है ... – PaulMcG

11

एक बहुत जंगली अनुमान और शायद पूरी तरह से गैर-समझ में, लेकिन मुझे पता था कि Modula-2 (मनुष्य, जो बीस साल पहले था, मुझे पुराना लगता है) से सिंटैक्स ... शायद पाइथन इससे प्रेरित था?

+2

सरल उत्तर, और सबसे अधिक संभावना सही है। जीवीआर ने मॉड्यूल -2 सहित पाइथन डिजाइन करने में विभिन्न भाषाओं से संरचनाएं लीं, और यह शायद उस भाषा से सीधा लिफ्ट है। – PaulMcG

1

असल में, यह अजीब नहीं है। देखें कि हम अन्य भाषाओं में "आयात", "शामिल" या "आवश्यकता" कैसे देखते हैं। हम हमेशा नामस्थान निर्दिष्ट करते हैं। उदाहरण के लिए PHP में "inc/config.php" शामिल करें। तो एक तरह से, यह फ़ाइलों या मॉड्यूल सहित हमारे सामान्य तरीके रखता है।

5

मुझे इस वाक्यविन्यास की पूरी विरासत नहीं पता है, क्योंकि यह पाइथन 1.x दिनों से है। लेकिन मुझे स्रोत के बाईं तरफ स्कैन करने में सक्षम होने के लिए उपयोगी लगता है, और मॉड्यूल नामों को तुरंत ढूंढें जो एक स्क्रिप्ट पर निर्भर करता है। यदि कोई कथन "आयात ए, बी, सी, डी, ई, सचमुच_लॉन्ग_नाम, एएलएसडीएफ, ब्लाह से एलएसडीएफ" पढ़ता है, तो मुझे यह पता लगाने में थोड़ी देर लग जाएगी कि यह स्क्रिप्ट ब्ला पर निर्भर है।

1

यह import x, y, z from module कहने के लिए अंग्रेजी में और अधिक समझ सकता है लेकिन प्रोग्रामिंग में यह अधिक सामान्य आइटम लाने के लिए और अधिक जानकारी देता है और फिर विवरण लाता है। यह कारण नहीं हो सकता है लेकिन यह कंपाइलर या दुभाषिया के लिए चीजों को आसान बनाता है। एक कंपाइलर लिखने का प्रयास करें और आपको पता चलेगा कि मेरा क्या मतलब है: डी

+0

मैं पूरी तरह से कंपाइलर लेखक के लिए अंतर का एहसास करता हूं, लेकिन यदि मैं एक प्रोग्रामर के रूप में * इसके बारे में परवाह करता हूं, तो मैं निमोनिक्स के साथ असेंबली के साथ रहूंगा: डी – delnan

+3

न केवल संकलक लेखक के लिए, यह भी मदद करता है आईडीई आपको विकल्प देने के लिए, यदि आप पहली बार 'आयात' लिखते हैं तो आईडीई आपको कोई विकल्प नहीं दे सका क्योंकि यह पता नहीं था कि आप किस मॉड्यूल को आयात करना चाहते हैं – Scarlet

+1

अच्छा बिंदु। यह मुझे एसक्यूएल स्टेटमेंट 'तालिका से चयन कॉलम' की याद दिलाता है जो ऑटो-पूर्ण के साथ उस समस्या से पीड़ित है। – dan04

0

यह आपके द्वारा उपयोग किए जाने वाले प्रोग्रामिंग भाषा वाक्यविन्यास पर निर्भर करता है। मेरे लिए ऐसा आयात पढ़ना आसान है।

है यह आसान पढ़ने और समझने

From Grocery buy apple and orange 

या

Buy apple and orange from grocery. 
Buy apple and orange from supermarket 

पहले भी मुझे बेहतर सूट ...

5

अलावा गुइडो सीधे पूछ से, मुझे नहीं लगता कि करने के लिए अपने इसका कोई स्पष्टीकरण ढूंढने जा रहा है।

वाक्यविन्यास बहुत शुरुआत से आसपास रहा है। पाइथन स्रोतों का सबसे पुराना संस्करण मुझे पाइथन 1.0.1 मिल सकता था। व्याकरण फ़ाइल में चेंजलॉग को देखते हुए हमें पहले के संस्करणों के संदर्भ मिलते हैं। अजगर (मुझे लगता है कि हम 0.9.0 के बाद 2 रिलीज बात कर रहे हैं) का संस्करण 2 में हम इस टिप्पणी है:

# added 'from' NAME option on import clause, and '*' to import all; 

इस रूप में

# added class definition. 

तो इंपोर्ट स्टेटमेंट एक ही समय में जोड़ा गया है कक्षाओं को पाइथन में जोड़ा गया था, उसी समय आगे बढ़े। यह तब से आता है जब पाइथन ग्विडो वैन रॉसम की एकल परियोजना थी। दूसरे शब्दों में, जो जवाब आप खोज रहे हैं वह समय के रेत में खो गया है।

अब, मेरी अटकलें यहां है कि क्यों आयात विवरण के बजाय from x import y पढ़ता है।

आयात बयान दो चरणों में क्रियान्वित कर रहे हैं:

documentation for the import statement आयात लागू करने के लिए बुनियादी एल्गोरिथ्म प्रदान करता है (1) एक मॉड्यूल मिल जाए, और यह प्रारंभ यदि आवश्यक हो; (2) स्थानीय नाम स्थान (गुंजाइश जहां आयात बयान होता है की) में एक नाम या नाम को परिभाषित। बयान दो रूपों में भिन्न होता है, चाहे यह कीवर्ड से उपयोग करता है या नहीं। पहला फॉर्म (बिना) सूची में प्रत्येक पहचानकर्ता के लिए इन चरणों को दोहराता है। चरण प्रदर्शन चरण (1) के साथ एक बार, और फिर चरण (2) बार-बार करता है।

आयात विवरण के दोनों संस्करणों में इस एल्गोरिदम का पहला चरण शेष है। मुझे लगता है कि यह एक भाषा कार्यान्वयनकर्ता के लिए सबसे स्पष्ट आदेश था, भले ही आदेश उलट दिया गया हो तो अंग्रेजी अधिक स्वाभाविक रूप से पढ़ सकती है।

+0

इसे खोदने के लिए धन्यवाद! – delnan