2012-11-12 21 views
6

चूंकि पाइथन स्कोप इंगित करने के लिए टैब स्पेसिंग का उपयोग करता है (और इस तरह, } प्रतीकों के end नहीं है), क्या यह किसी विशेष तरीके से भाषा को सीमित करने से सीमित करता है?एक भाषा के रूप में, क्या कोई अंतराल के कारण पायथन सीमित है?

नोट: मैं कोडिंग शैली पर व्यक्तिगत प्राथमिकताओं के बारे में बात नहीं कर रहा हूं, मैं end कथन के प्रत्यक्ष परिणाम के रूप में वास्तविक भाषा सीमा के बारे में बात नहीं कर रहा हूं?

उदाहरण के लिए

, it appears by a post directly from Guido कि अजगर के कारण बहु लाइन लांबा के की कमी एक समाप्त end/} प्रतीक नहीं होने?

यदि हां, तो इंडेंटेशन का उपयोग करने के लिए इस भाषा डिज़ाइन के निर्णय के कारण अन्य पाइथन सीमाएं क्या हैं?


अद्यतन:

कृपया ध्यान दें इस सवाल लैम्ब्डा के बारे में नहीं है और तकनीकी रूप से, यहां तक ​​कि नहीं अजगर से प्रति। यह प्रोग्रामिंग भाषा डिज़ाइन के बारे में है ... और प्रोग्रामिंग भाषा में क्या सीमाएं होती हैं जब इसे इंडेंटेशन (एंड स्टेटमेंट्स के विपरीत) ब्लॉक ब्लॉक का प्रतिनिधित्व करने के लिए डिज़ाइन किया गया है।

+0

http://stackoverflow.com/questions/1233448/no-multiline-lambda-in-python-why-not – dm03514

+1

सिद्धांत रूप में, एक लैम्ब्डा में मनमाने ढंग से लंबी अभिव्यक्ति सूची हो सकती है, इसलिए मुझे नहीं लगता कि यह क्यों सीमित है .... –

+0

यह प्रश्न लैम्बा के बारे में नहीं है, यह "इंडेंटेशन का उपयोग करने के लिए भाषा डिजाइन निर्णय के कारण क्या पाइथन सीमाएं हैं" – nickb

उत्तर

12

end/} की कोई कमी नहीं है: अंत को पिछली गहराई में "समर्पण" द्वारा दर्शाया जाता है। तो किसी भी तरह से कोई सीमा नहीं है।

उदाहरण:

x = 123 
while x > 10: 
    if x % 21: 
     print("x") 
    print("y") 
print("z") 

ए 'शुरू "खरोज स्तर की बढ़ती से मेल खाती है (while के बाद, if के बाद)।

एक "अंत" इंडेंटेशन स्तर को कम करने के अनुरूप है (संबंधित print() एस के बाद)।

यदि आप print("y") को छोड़ देते हैं, तो आपके पास शीर्षतम स्तर पर "समर्पण" होता है, जो दो लगातार "अंत" के अनुरूप होता है।

+0

मुझे इसे मारो। : पी – Omnikrys

+0

क्या Guido खुद इस दृष्टिकोण से असहमत नहीं है। http://www.artima.com/weblogs/viewpost.jsp?thread=147358 – nickb

+0

कुछ सीमाएं हैं, उदाहरण के लिए यह एक अभिव्यक्ति होनी चाहिए और इसमें कोई कीवर्ड नहीं हो सकता है। –

0

सबसे बड़ी सीमाओं में से एक (यदि आप इसे कॉल करेंगे) यह है कि आप उसी प्रोग्राम में टैब और रिक्त स्थान का उपयोग नहीं कर सकते हैं।

और आपको नहीं करना चाहिए। कभी।

वहाँ जब एक अजगर स्रोत फ़ाइल को पार्स (पार्स करने, की व्याख्या नहीं) कोई स्पष्ट संरचनात्मक सीमाओं, सिवाय शायद हैं:

def foo(bar): 
     # If bar contains multiple elements 
    if len(bar) > 1: 
      return bar 

यह पूरी तरह से कानूनी अजगर कोड है, तथापि, फ़ाइल पार्स, आप चला सकते है यह समझने की कोशिश में परेशानी में कि किस इंडेंटेशन स्तर पर टिप्पणी है।

2

इस प्रश्न का उत्तर सिंटैक्टिक चीनी और भाषा शैली के बीच कहीं भी है, यानी भाषा दर्शन के लिए सुरुचिपूर्ण और अनुपालन करने वाली समस्या को कैसे वाक्यांशित किया जाए। किसी भी ट्यूरिंग-पूर्ण भाषा, यहां तक ​​कि असेंबली भाषा और सी - निश्चित रूप से किसी भी लैम्ब्डा समर्थन की कमी - किसी भी समस्या का समाधान कर सकती है। लैम्ब्डा केवल एक अलग (कार्यात्मक भाषा दृष्टिकोण से देखकर तर्कसंगत रूप से अधिक सुरुचिपूर्ण) देता है, मानक फ़ंक्शन परिभाषा का उपयोग करके सामानों का phrasing भी बताता है। तो मैं अलग-अलग कोड करने से परे यहां एक सीमा को पहचान नहीं सकता।

0

"सीमा" से आपका क्या मतलब है? क्या आपका मतलब है कि गणनाएं हैं पाइथन अन्य भाषाओं को निष्पादित नहीं कर सकता है? उस स्थिति में, जवाब निश्चित रूप से नहीं है। पायथन turing complete है।

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

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

कहा जा रहा है कि, कई भाषाओं में इनलाइन फ़ंक्शंस भी शुरू नहीं होते हैं, इसलिए मैं इसे एक सीमा नहीं कहूंगा।