2010-12-10 14 views
10

print क्यों पाइथन में एक कीवर्ड है और एक समारोह नहीं है?प्रिंट क्यों पाइथन में कोई फ़ंक्शन नहीं है?

+2

देखें http://www.python.org/dev/peps/pep-3105/ – jfs

+0

दिलचस्प; इसे कभी भी एक समस्या नहीं माना लेकिन अच्छा सवाल है। –

+0

रीडलन और रीटेल भी टर्बो पास्कल में अंतर्निहित थे। कभी समझ में नहीं आया, और मुझे इसके बजाय कार्यों को बनाने के लिए सी बेहतर पसंद आया। – sashoalm

उत्तर

12

क्योंकि गिडो ने फैसला किया है कि उसने गलती की है। :)

इसे तब से सही किया गया है: पाइथन 3 का प्रयास करें, जो एक फ़ंक्शन में परिवर्तन का वर्णन करने के लिए section of its release notes को समर्पित करता है।

संपूर्ण पृष्ठभूमि के लिए, PEP 3105 और इसके संदर्भ अनुभाग में दिए गए कई लिंक देखें!

+0

मैं अभी तक पाइथन 3 के साथ tinkered है। क्या प्रिंट कीवर्ड अभी भी काम करता है? – user538442

+2

नहीं। यह अब एक समारोह है। सरल मामले में, 'प्रिंट "foo" 'बन जाता है' प्रिंट (" foo ")' –

+0

"अब एक फ़ंक्शन" के रूप में ठीक है :) –

2

अब यह अजगर 3.

+0

अजीब लगता है कि इसे – user538442

+1

@user को सही करने में 10+ साल लग गए: यह आवश्यक नहीं है कि संगतता के मामले के रूप में समय और पीछे दोनों की आवश्यकता हो। –

+4

@ user538442: पिछड़ा संगतता एक कुतिया है :( – delnan

1

में एक समारोह पायथन 2.x में print बयान कुछ विशेष वाक्य रचना जो एक साधारण समारोह के लिए उपलब्ध नहीं होगा है। उदाहरण के लिए आप एक अंतिम नई लाइन के आउटपुट को दबाने के लिए पिछला , का उपयोग कर सकते हैं या आउटपुट को फ़ाइल में रीडायरेक्ट करने के लिए आप >> का उपयोग कर सकते हैं। लेकिन यह सब गिटो वैन रॉसम को खुद को एक बयान रखने के लिए पर्याप्त नहीं था - वह print को पायथन 3.x में एक समारोह में बदल गया।

+0

उह, अब यह समझ में आ रहा है। – user538442

+0

तो अब अतिरिक्त कार्यक्षमता खो गई है जैसे पीछे की ओर, और >> – user538442

+5

यह अभी भी है, लेकिन अब आप इसका उपयोग करते हैं विशेष वाक्यविन्यास के बजाय 'end = 'और' file =' कीवर्ड पैरामीटर। – dan04

8

print पायथन में एक बयान है क्योंकि यह एबीसी, पायथन के लिए मुख्य प्रेरणा में एक बयान था (हालांकि यह WRITE वहाँ कहा जाता था)। बदले में शायद एक समारोह के बजाय एक बयान था क्योंकि यह एक शिक्षण भाषा थी और बुनियादी रूप से प्रेरित थी। दूसरी ओर पाइथन, एक शिक्षण भाषा से अधिक हो गया (हालांकि यह भी इसके लिए अच्छा है)।

हालांकि, आजकल print एक फ़ंक्शन है। हां, पाइथन 2 में भी, आप

from __future__ import print_function 

और आप सभी सेट कर सकते हैं। पायथन 2.6 के बाद से काम करता है।

1

एक जवाब है कि मैं print बयान के बारे में क्या सराहना करते हैं, लेकिन जरूरी नहीं कि सरकारी अजगर इतिहास से ड्रॉ ...

अजगर, एक पटकथा भाषा कुछ हद तक, है। अब, "स्क्रिप्टिंग भाषा" की कई परिभाषाएं हैं, लेकिन मैं इसका उपयोग यहां करूँगा: एक भाषा जिसे लघु या संवादात्मक कार्यक्रमों के कुशल उपयोग के लिए डिज़ाइन किया गया है। ऐसी भाषाएं अत्यधिक बॉयलरप्लेट के बिना एक-लाइन प्रोग्राम की अनुमति देती हैं; कुंजीपटल इनपुट को आसान बनाएं (उदाहरण के लिए, अत्यधिक विराम चिह्न से बचकर); और सामान्य कार्यों (शुद्धता के संभावित खर्च पर सुविधा) के लिए अंतर्निहित वाक्यविन्यास प्रदान करते हैं। पायथन के मामले में, एक मूल्य प्रिंट करना एक बहुत आम बात है, खासकर इंटरैक्टिव मोड में। एक समारोह होने के लिए print की आवश्यकता है यहां अनावश्यक रूप से असुविधाजनक लगता है। विशेष वाक्यविन्यास के साथ त्रुटि का काफी कम जोखिम है जो सही समय 99% सही काम करता है।

+0

इस तर्क से 'इनपुट' को भी एक कथन होना होगा। – steffen

0

मैं इस पर मेरे विचार में फेंक देगा:

पायथन 2.x print में गलती से एक बयान, या क्योंकि stdout पर प्रिंट करने के लिए इस तरह के एक बुनियादी बात यह है नहीं है। बाकी सब कुछ इतना सोचा गया है या कम से कम समझने योग्य कारण हैं कि उस आदेश की गलती अजीब लगती है। यदि stdout के साथ संचार करना इतना मूल माना गया है, stdin के साथ संचार करना उतना ही महत्वपूर्ण होगा, फिर भी input() एक फ़ंक्शन है।

यदि आप list of reserved keywords और list of statements देखते हैं जो अभिव्यक्ति नहीं हैं, print स्पष्ट रूप से पता चलता है कि यह एक और संकेत है कि बहुत विशिष्ट कारण होने चाहिए।

मुझे लगता है कि print था, एक बयान और नहीं एक अभिव्यक्ति होने के लिए input() में एक सुरक्षा भंग से बचने के लिए। याद रखें कि Python2 में input() जो भी उपयोगकर्ता stdin में टाइप करता है उसका मूल्यांकन करता है। यदि उपयोगकर्ता ने print a और a टाइप किए हैं तो सभी पासवर्ड की एक सूची है, जो शांत विनाशकारी होगा।

जाहिर है, input() की अभिव्यक्तियों का मूल्यांकन करने के लिए print सामान्य अंतर्निहित फ़ंक्शन होने के कारण अधिक महत्वपूर्ण माना जाता था।

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