संसाधन लोड हो रहा है... लोड करना...

पायथन 2.x.x को पायथन 3.x.x से बदलना और पायथन 2.x.x को पायथन 3.x.x में बदलने का तरीका

लेखक:आविष्कारक मात्रा - छोटे सपने, बनाया गयाः 2016-10-09 12:36:49, अद्यतन किया गयाः 2017-10-11 10:18:05

python2 और python3 के बीच सिंटेक्स में अंतर, परिवर्तन

लगभग सभी पायथन 2 प्रोग्रामों को पायथन 3 वातावरण में ठीक से चलाने के लिए कुछ संशोधनों की आवश्यकता होती है। इस रूपांतरण प्रक्रिया को सरल बनाने के लिए, पायथन 3 एक उपयोगिता स्क्रिप्ट के साथ आता है जिसे 2to3 कहा जाता है, जो आपके पायथन 2 प्रोग्राम स्रोत फ़ाइलों को इनपुट के रूप में लेता है, और फिर स्वचालित रूप से इसे पायथन 3 के रूप में परिवर्तित करता है। केस स्टडीः chardet को पायथन 3 में पोर्ट करना इस स्क्रिप्ट को चलाने का वर्णन करता है, फिर कुछ स्थितियों को दिखाता है जिन्हें यह स्वचालित रूप से ठीक नहीं कर सकता है। यह अनुलग्नक उस सामग्री का वर्णन करता है जिसे यह स्वचालित रूप से ठीक कर सकता है।

  • print कथन

पायथन 2 में, print एक कथन है. आप जो कुछ भी आउटपुट करना चाहते हैं, आप उन्हें प्रिंट कीवर्ड के पीछे रख सकते हैं. पायथन 3 में, print ()) एक फ़ंक्शन है. अन्य कार्यों की तरह, print ()) की आवश्यकता है कि आप जो कुछ भी आउटपुट करना चाहते हैं उसे पैरामीटर के रूप में पास करें।

नोट्स पायथन 2 पायथन 3
मुद्रण मुद्रित करना
प्रिंट 1 मुद्रण (१)
१.२ प्रिंट मुद्रण (१,२)
प्रिंट 1,2, print ((1,2,end= ")
प्रिंट >>sys.stderr,1,2,3 print ((1,2,3, फ़ाइल=sys.stderr)

1, एक रिक्त पंक्ति को आउटपुट करने के लिए, बिना पैरामीटर वाले print को कॉल करना आवश्यक है ((() ⇒ 2, एक अलग मान को आउटपुट करने के लिए, इस मान को print))) के एक पैरामीटर के रूप में उपयोग करना आवश्यक है । 3, आउटपुट के लिए एक खाली जगह के साथ अलग किए गए दो मानों का उपयोग करके, दो पैरामीटर का उपयोग करके प्रिंट () को बुलाया जा सकता है । 4. इस उदाहरण में कुछ चाल है. पायथन 2 में, यदि आप प्रिंट कथन के अंत के रूप में एक अल्पविराम (,) का उपयोग करते हैं, तो यह परिणामों को रिक्त स्थान के साथ अलग करता है, और फिर एक अनुवर्ती रिक्त स्थान (trailing space) का उत्पादन करता है, लेकिन गाड़ी वापसी का उत्पादन नहीं करता है. पायथन 3 में, एक ही प्रभाव को प्रिंट को एक कुंजी शब्द पैरामीटर के रूप में end= के माध्यम से पारित करके प्राप्त किया जा सकता है। पैरामीटर का डिफ़ॉल्ट मान end है, इसलिए अंत पैरामीटर के मान को फिर से निर्दिष्ट करके अंत में आउटपुट वापसी को रद्द किया जा सकता है। 5. पायथन 2 में, आप आउटपुट को एक पाइप पर रीडायरेक्ट कर सकते हैं, जैसे कि sys.stderr। पायथन 3 में, आप एक ही कार्य कर सकते हैं, जैसे कि पाइप को प्रिंट () में पास करके, एक कुंजी शब्द पैरामीटर फ़ाइल का मान। पैरामीटर फ़ाइल का डिफ़ॉल्ट मान std.stdout है, इसलिए इसके मूल्य को फिर से निर्दिष्ट करने से प्रिंट () को एक और पाइप में आउटपुट किया जाएगा।

  • यूनिकोड स्ट्रिंग

पायथन 2 में दो प्रकार के स्ट्रिंग प्रकार हैंःयूनिकोड स्ट्रिंगऔरगैर यूनिकोड स्ट्रिंग◎ पायथन 3 में केवल एक प्रकार हैःयूनिकोड स्ट्रिंग्स

नोट्स पायथन 2 पायथन 3
पापाया व्हिप पापाया व्हिप
urPapayaWhip\foo पापाया व्हिप\foo

पायथन 2 में यूनिकोड स्ट्रिंग्स पायथन 3 में सामान्य स्ट्रिंग हैं, क्योंकि पायथन 3 में स्ट्रिंग्स हमेशा यूनिकोड प्रारूप में होती हैं। यूनिकोड मूल स्ट्रिंग ("raw string") ("इस स्ट्रिंग का उपयोग करके, पायथन स्वचालित रूप से उल्टा-उल्लेख नहीं करेगा") को सामान्य स्ट्रिंग के रूप में भी बदल दिया गया है, क्योंकि पायथन 3 में, सभी मूल स्ट्रिंग्स यूनिकोड में एन्कोड की गई हैं।

  • विश्वव्यापी फ़ंक्शन यूनिकोड

पायथन 2 में दो सार्वभौमिक फ़ंक्शन हैं जो ऑब्जेक्ट को स्ट्रिंग में बदलने के लिए मजबूर करते हैंः यूनिकोड ((() ऑब्जेक्ट को यूनिकोड स्ट्रिंग में परिवर्तित करता है, और str ((() ऑब्जेक्ट को गैर-यूनिकोड स्ट्रिंग में परिवर्तित करता है। पायथन 3 में केवल एक स्ट्रिंग प्रकार है, यूनिकोड स्ट्रिंग, इसलिए str ((() फ़ंक्शन सभी कार्यों को पूरा करता है।पायथन 3 में यूनिकोड (() फ़ंक्शन अब मौजूद नहीं है।)

नोट्स पायथन 2 पायथन 3
यूनिकोड ((कुछ भी) कुछ भी नहीं
  • लम्बा पूर्ण रूप

पायथन 2 में गैर-फ्लोटिंग बिंदुओं के लिए तैयार किए गए int और long प्रकार हैं। इनट प्रकार का अधिकतम sys.maxint से अधिक नहीं हो सकता है, और यह अधिकतम प्लेटफ़ॉर्म से संबंधित है। दीर्घ पूर्णांक को संख्या के अंत में एक L जोड़कर परिभाषित किया जा सकता है, जो स्पष्ट रूप से इनट प्रकार द्वारा दर्शाए गए संख्यात्मक दायरे से बड़ा है। पायथन 3 में, केवल एक ही पूर्णांक प्रकार int है, जो ज्यादातर मामलों में पायथन 2 में दीर्घ पूर्णांक की तरह है। चूंकि पहले से ही दो प्रकार के पूर्णांक मौजूद नहीं हैं, इसलिए उन्हें अलग करने के लिए विशेष वाक्यविन्यास का उपयोग करना आवश्यक नहीं है।

आगे पढ़ेंः पीईपी 237: एकजुट लंबाई और समग्रता।

नोट्स पायथन 2 पायथन 3
x = 1000000000000L x = 1000000000000
x = 0xFFFFFFFFFFF x = 0xFFFFFFFFFF
लम्बा ((x) int(x)
प्रकार ((x) लंबा है प्रकार ((x) int है
isinstance ((x,long) isinstance ((x,int)

पायथन 2 में दशमलव दीर्घ पूर्णांक को पायथन 3 में दशमलव साधारण पूर्णांक के रूप में प्रतिस्थापित किया गया है। पायथन 2 में सोलह अंकों के दीर्घ पूर्णांक को पायथन 3 में सोलह अंकों के साधारण पूर्णांक के रूप में प्रतिस्थापित किया गया है। पायथन 3 में, लंबे पूर्णांक अब मौजूद नहीं हैं।प्राकृतिक long))) फ़ंक्शन भी नहीं है. एक चर को पूर्णांक में बदलने के लिए int))) फ़ंक्शन का उपयोग किया जा सकता है।.. यह जांचता है कि क्या एक चर पूर्णांक है, इसका डेटा प्रकार प्राप्त करता है, और इसे एक int प्रकार ((long नहीं) के साथ तुलना करता है। आप डेटा प्रकार की जांच करने के लिए उदाहरण () फ़ंक्शन का भी उपयोग कर सकते हैं; एक बार फिर, इंट का उपयोग करके इंटीजर प्रकार की जांच करने के लिए लंबे समय के बजाय।

  • <> तुलना ऑपरेटर

पायथन 2 <> को!= के समानार्थी के रूप में समर्थन करता है.

नोट्स पायथन 2 पायथन 3
यदि x <> y: यदि x!= y:
यदि x <> y <> z: यदि x!= y!= z:

1, सरल तुलना । 2, तीन अपेक्षाकृत जटिल मानों के बीच तुलना ।

  • शब्दकोश वर्ग विधि has_key (()

पायथन 2 में, शब्दकोश ऑब्जेक्ट का has_key () विधि का उपयोग यह परीक्षण करने के लिए किया जाता है कि क्या शब्दकोश में एक विशिष्ट कुंजी है। पायथन 3 इस विधि का समर्थन नहीं करता है। आपको उपयोग करने की आवश्यकता हैमेंऑपरेटर ।

नोट्स पायथन 2 पायथन 3
a_dictionary.has_key ((PapayaWhip) शब्दकोश में पापाया व्हिप
a_dictionary.has_key ((x) या a_dictionary.has_key ((y) शब्दकोश में x या शब्दकोश में y
a_dictionary.has_key ((x या y) (x या y) a_dictionary में
a_dictionary.has_key ((x + y) (x + y) a_dictionary में
x + a_dictionary.has_key(y) x + (a_dictionary में y)

1, सबसे सरल रूप । 2, ऑपरेटर or की प्राथमिकता ऑपरेटर in से कम है, इसलिए यहाँ कोष्ठक जोड़ने की आवश्यकता नहीं है. 3, दूसरी ओर, उसी कारण के लिए, or की प्राथमिकता in से कम है, और यहां कोष्ठक जोड़ने की आवश्यकता है । नोटः यहाँ कोड पिछली पंक्ति से पूरी तरह से अलग है । पायथन पहले x या y को व्याख्या करता है और परिणाम x (यदि x के संदर्भ में सही है) या y प्राप्त करता है । फिर पायथन जांचता है कि क्या यह परिणाम a_dictionary का एक कुंजी है ।) 4, ऑपरेटर in की प्राथमिकता ऑपरेटर + की तुलना में कम है, इसलिए कोड में इस रूप में तकनीकी रूप से कोष्ठक की आवश्यकता नहीं है, लेकिन 2to3 अभी भी जोड़ा गया है। 5, इस रूप में निश्चित रूप से कोष्ठक की आवश्यकता है, क्योंकि in की प्राथमिकता + से कम है।

  • सूची को लौटाने के लिए शब्दकोश वर्ग विधि

पायथन 2 में, कई शब्दकोश विधियों के लिए रिटर्न मान सूची हैं; इनमें से सबसे आम विधियों में कुंजी, आइटम और मान शामिल हैं; पायथन 3 में, इन सभी विधियों के रिटर्न मान को गतिशील दृश्य में बदल दिया गया है; कुछ संदर्भ वातावरणों में, इस परिवर्तन का कोई प्रभाव नहीं पड़ता है; यदि इन विधियों के रिटर्न मान तुरंत किसी अन्य फ़ंक्शन को पारित किए जाते हैं, और यह फ़ंक्शन पूरे अनुक्रम में चलता है, तो इन विधियों के रिटर्न मान सूची या दृश्य हैं और कुछ भी नहीं बदलते हैं; अन्य मामलों में, पायथन 3 के संबंध हैं; महत्वपूर्ण अपेक्षाएं हैं कि यदि आप एक स्वतंत्र रूप से संबोधित तत्वों की सूची देखते हैं, तो पायथन 3 के इन परिवर्तनों से आपका कोड चिपकेगा, क्योंकि ग्राफ़ दृश्य अनुक्रमण का समर्थन नहीं करता है।

नोट्स पायथन 2 पायथन 3
a_dictionary.keys() सूची ((a_dictionary.keys))
a_dictionary.items() सूची ((एक_शब्दावली.आइटम))
a_dictionary.iterkeys() iter ((a_dictionary.keys())
[i के लिए इन a_dictionary.iterkeys() ] [i के लिए इन a_dictionary.keys() ]
min(a_dictionary.keys()) कोई परिवर्तन नहीं

1, list का उपयोग करना () फ़ंक्शन keys के लौटने वाले मानों को एक स्थिर सूची में परिवर्तित करता है, जो सुरक्षा कारणों से 2to3 में त्रुटि का कारण बन सकता है. ऐसा कोड प्रभावी है, लेकिन दृश्य का उपयोग करने के लिए यह कुछ कम कुशल है. आपको परिवर्तित कोड की जांच करनी चाहिए, यह देखने के लिए कि क्या आपको सूची की आवश्यकता है, शायद दृश्य भी ऐसा ही काम कर सकता है। 2, यह एक और दृश्य है (आइटमों के बारे में) विधि के लिए) सूची में रूपांतरण; 2to3 के लिए मानों के लिए) विधि के लिए मूल्य का रूपांतरण वापस करने के लिए एक ही है । 3. पायथन 3 में iterkeys का समर्थन नहीं किया गया है. यदि आवश्यक हो, तो keys के रिटर्न मान को iterator में बदलने के लिए iter का उपयोग करें. 4, 2to3 यह पहचानने में सक्षम है कि सूची पार्स में इटरकीज़ () विधि का उपयोग किया गया है, और फिर इसे पायथन 3 में कीज़ () विधि में परिवर्तित कर दिया गया है। यह संभव है क्योंकि दृश्य पुनरावर्ती है। 5, 2to3 भी keys ()) विधि का पता लगा सकता है और इसके द्वारा लौटाए गए मान को तुरंत एक और फ़ंक्शन को दिया जाता है जो पूरे अनुक्रम में चलता है, इसलिए पहले keys ()) के लौटाए गए मान को सूची में परिवर्तित करने की कोई आवश्यकता नहीं है। इसके विपरीत, min ()) फ़ंक्शन खुशी से दृश्य में चलता है। यह प्रक्रिया min (), max (), sum (), tuple (), setlist (), sorted (), any (), and all (), के लिए भी समान रूप से काम करती है।

  • नाम बदलने या पुनर्गठन किए गए मॉड्यूल

पायथन 2 से पायथन 3 तक, मानक भंडार के कुछ मॉड्यूलों का नाम बदल दिया गया है। कुछ परस्पर जुड़े मॉड्यूलों को भी संयोजित या पुनर्गठित किया गया है ताकि यह संबंध अधिक तार्किक हो सके।

  • http पायथन 3 में, कई संबंधित एचटीपीपी मॉड्यूल एक अलग पैकेज में एकत्र किए जाते हैं, जिसे http कहा जाता है।
नोट्स पायथन 2 पायथन 3
httplib आयात करें http.client आयात करें
आयात कुकी http.cookies आयात करें
आयात कुकीलिब http.cookiejar आयात करें
आयात BaseHTTPServer
आयात SimpleHTTPServer
आयात CGIHttpServer
http.server आयात करें

http.client मॉड्यूल एक अंतर्निहित पुस्तकालय को लागू करता है जिसका उपयोग HTTP संसाधनों का अनुरोध करने और HTTP प्रतिक्रियाओं का विश्लेषण करने के लिए किया जा सकता है। http.cookies मॉड्यूल HTTP हेडर के माध्यम से भेजी गई कुकीज़ प्राप्त करने के लिए एक पायथन इंटरफ़ेस प्रदान करता है। आम ब्राउज़र कुकीज़ को फ़ाइलों के रूप में डिस्क पर संग्रहीत करते हैं, जिन्हें http.cookiejar मॉड्यूल द्वारा संचालित किया जा सकता है। http.server मॉड्यूल एक बुनियादी HTTP सर्वर को लागू करता है

  • urllib पायथन 2 में कुछ मॉड्यूल हैं जो URL को विश्लेषण, कोड और प्राप्त करने के लिए उपयोग किए जाते हैं, लेकिन ये मॉड्यूल माउस की तरह एक दूसरे पर ओवरलैप करते हैं। पायथन 3 में, ये मॉड्यूल एक अलग पैकेज, urllib में पुनर्गठित किए जाते हैं।
नोट्स पायथन 2 पायथन 3
आयात urllib आयात urllib.request
urllib.parse,urllib.error
आयात urllib2 आयात urllib.request
urllib.error
आयात URLparse urllib.parse आयात करें
रोबोट पार्सर आयात करें urllib.robotparser आयात करें
urllib आयात से FancyURLopener
urllib आयात urlencode से
urllib.request से आयात FancyURLopener
urllib.parse से आयात urlencode
urllib2 आयात से अनुरोध
urllib2 आयात से HTTPError
urllib.request से आयात अनुरोध
urllib.error से आयात HTTPError

पहले, पायथन 2 में urllib मॉड्यूल में विभिन्न प्रकार के फ़ंक्शन थे, जिनमें डेटा प्राप्त करने के लिए उपयोग किए जाने वाले urlopen () शामिल थे, और यह भी उपयोगी था कि URL को इसके घटक भागों में विभाजित किया जा सकता है। नए urllib पैकेज में, ये फ़ंक्शन अधिक तार्किक रूप से संगठित हैं। 2to3 इन फ़ंक्शनों के कॉल को संशोधित करेगा ताकि नए नामकरण कार्यक्रम को अनुकूलित किया जा सके। पायथन 3 में, पहले के urllib2 मॉड्यूल को urllib पैकेज में शामिल किया गया है; साथ ही urllib2 में आपके सभी पसंदीदा चीजें पायथन 3 के urllib मॉड्यूल में एक साथ दिखाई देंगी, जैसे कि build_opener () विधि, Request ऑब्जेक्ट, HTTPBasicAuthHandler और friends । पायथन 3 में urllib.parse मॉड्यूल में मूल पायथन 2 में urlparse मॉड्यूल के सभी पार्सल फ़ंक्शन शामिल हैं। urllib.robotparse मॉड्यूल robots.txt फ़ाइलों का विश्लेषण करता है। FancyURLopener वर्ग जो HTTP पुनर्निर्देशन और अन्य स्थिति कोड को संभालता है, अभी भी पायथन 3 में urllib.request मॉड्यूल में काम करता है. request ऑब्जेक्ट urllib.request में अभी भी मान्य है, लेकिन HTTPError जैसे स्थिरांक को urllib.error में स्थानांतरित कर दिया गया है। क्या मैंने उल्लेख किया है कि 2to3 आपके फ़ंक्शन कॉल को फिर से लिख देगा? उदाहरण के लिए, यदि आप अपने पायथन 2 कोड में urllib मॉड्यूल आयात करते हैं और urllib.urlopen () फ़ंक्शन को डेटा प्राप्त करने के लिए कॉल करते हैं, तो 2to3 आयात कथन और फ़ंक्शन कॉल को एक साथ संशोधित करेगा।

नोट्स पायथन 2 पायथन 3
आयात urllib प्रिंट urllib.urlopen (("http://diveintopython3.org/’) पढ़िए)) आयात urllib.request, urllib.parse, urllib.error
print ((urllib.request.urlopen)) "http://diveintopython3.org/’) पढ़िए))
  • dbm सभी डीबीएम क्लोन अब एक अलग पैकेज में हैं, जिसे डीबीएम कहा जाता है. यदि आपको इनमें से किसी एक विशिष्ट संस्करण की आवश्यकता है, जैसे कि जीएनयूडीबीएम, तो आप डीबीएम पैकेज में उपयुक्त मॉड्यूल आयात कर सकते हैं.
नोट्स पायथन 2 पायथन 3
आयात डीबीएम आयात dbm.ndbm
आयात gdbm आयातdbm.gnu
dbhash आयात करें आयात dbm.bsd
आयात dumbdbm आयात dbm.dumb
import anyydbm
import whichdb
आयात डीबीएम
  • xmlrpc XML-RPC एक हल्के स्तर का तरीका है जो HTTP प्रोटोकॉल के माध्यम से दूरस्थ RPC कॉल करने के लिए है। कुछ XML-RPC क्लाइंट और XML-RPC सर्वर के कार्यान्वयन को अब एक अलग पैकेज, xmlrpc में जोड़ा गया है।
नोट्स पायथन 2 पायथन 3
xmlrpclib आयात करें xmlrpc.client आयात करें
DocXMLRPCServer आयात करें
SimpleXMLRPCServer आयात करें
xmlrpc.server आयात करें
  • अन्य मॉड्यूल

नोट्स पायथन 2 पायथन 3
try:
cStringIO को StringIO के रूप में आयात करें
except ImportError:
import StringIO
आयात करना
try:
import cPickle as pickle
except ImportError:
import pickle
अचार के रूप में अचार आयात करें
आयातित अचार
आयात करेंनिर्माण_ आयातित भवन
आयात copy_reg आयात प्रतिलिपि
आयात कतार आयात कतार
SocketServer आयात करें आयात सॉकेट सर्वर
कॉन्फ़िग पार्सर आयात करें कॉन्फ़िगर पार्सर आयात करें
आयात आयात reprlib
आयात कमांड आयात उपप्रक्रिया

1. पायथन 2 में, आप आमतौर पर ऐसा करते हैं, पहले cStringIO को स्ट्रिंगIO के विकल्प के रूप में आयात करने का प्रयास करते हैं, यदि यह विफल रहता है, तो फिर से स्ट्रिंगIO आयात करें; पायथन 3 में ऐसा न करें; io मॉड्यूल आपको इस मामले में मदद करेगा; यह उपलब्ध सबसे तेज़ कार्यान्वयन का पता लगाएगा और फिर स्वचालित रूप से इसका उपयोग करेगा। 2. पायथन 2 में, सबसे तेज़ pickle कार्यान्वयन को आयात करना भी एक उपयोगी तरीका है। पायथन 3 में, pickle मॉड्यूल आपके लिए स्वचालित रूप से संभालता है, इसलिए इसे फिर से न करें। 3.builtins मॉड्यूल में वैश्विक फ़ंक्शन, वर्ग और स्थिरांक शामिल हैं जो पूरे पायथन भाषा में उपयोग किए जाते हैं.builtins मॉड्यूल में किसी फ़ंक्शन को फिर से परिभाषित करने का मतलब है कि हर जगह इस वैश्विक फ़ंक्शन को फिर से परिभाषित करना। यह शक्तिशाली लगता है, लेकिन यह भी भयानक है। 4. copyreg मॉड्यूल ने C भाषा में परिभाषित उपयोगकर्ता अनुकूलन प्रकारों के लिए pickle मॉड्यूल का समर्थन जोड़ा है। 5। कतार मॉड्यूल एक उत्पादक उपभोक्ता कतार (बहु-उत्पादक, बहु-उपभोक्ता कतार) को लागू करता है। 6. Socketserver मॉड्यूल विभिन्न सॉकेट सर्वरों को लागू करने के लिए एक सामान्य बुनियादी वर्ग प्रदान करता है। 7. configparser मॉड्यूल का उपयोग INI-style प्रोफाइल को पार्स करने के लिए किया जाता है। 8. reprlib मॉड्यूल ने repr () अंतर्निहित फ़ंक्शन को फिर से लागू किया है और स्ट्रिंग का प्रतिनिधित्व करने के लिए नियंत्रण जोड़ा गया है। 9. उपप्रक्रिया मॉड्यूल आपको उपप्रक्रियाओं को बनाने, उनके पाइप से जुड़ने और उनके रिटर्न मान प्राप्त करने की अनुमति देता है।

  • पैकेज के भीतर सापेक्ष आयात

पैकेज एक एकल इकाई है जो संबंधित मॉड्यूल के एक समूह से मिलकर बनती है। पायथन 2 में, आप एक ही पैकेज के भीतर मॉड्यूल के परस्पर संदर्भ को लागू करने के लिए आयात foo या फ़्रॉम foo आयात बार का उपयोग करते हैं।2解释器会先在当前目录里搜索foo.pyपायथन 3 में यह प्रक्रिया थोड़ा अलग है. पायथन 3 पहले वर्तमान पथ पर नहीं खोजता है, यह सीधे पायथन के खोज पथ में खोज करता है. यदि आप चाहते हैं कि पैकेज में एक मॉड्यूल पैकेज में दूसरे मॉड्यूल को आयात करे, तो आपको स्पष्ट रूप से दो मॉड्यूलों के सापेक्ष पथ प्रदान करने की आवश्यकता है।

मान लीजिए कि आपके पास एक ही निर्देशिका में कई फाइलें हैंः

चार्डेट/ ∙∙ ±-आरंभ करना.py ∙+--स्थिर.py | +--mbcharsetprober.py | +--यूनिवर्सल डिटेक्टर.पी.

अब मान लीजिए कि universaldector.py को पूरे constants.py को आयात करने की आवश्यकता है,另外还需要导入mbcharsetprober.py的一个类。你会怎样做?

नोट्स पायथन 2 पायथन 3
आयात स्थिरांक आयात स्थिरांक से
mbcharsetprober से आयात MultiByteCharSetProber .mbcharsetprober से आयात करें MultiByteCharsetProber

1, जब आपको पैकेज के अन्य हिस्सों से पूरे मॉड्यूल को आयात करने की आवश्यकता होती है, तो नए from.import सिंटैक्स का उपयोग करें.universaldetector.py) और आप फ़ाइल आयात करना चाहते हैं)))constants.py) के बीच का सापेक्ष पथ. इस उदाहरण में, दोनों फाइलें एक ही निर्देशिका में हैं, इसलिए एक ही वाक्य का उपयोग किया गया है. आप माता-पिता निर्देशिका ((from... import anothermodule) या किसी अन्य निर्देशिका से भी आयात कर सकते हैं. 2. किसी विशेष वर्ग या फ़ंक्शन को सीधे दूसरे मॉड्यूल से अपने मॉड्यूल के नामस्थान में आयात करने के लिए, आयात किए जाने वाले मॉड्यूल के पहले सापेक्ष पथ जोड़ें और अंतिम स्लैश हटा दें. इस उदाहरण में, mbcharsetprober.py और universaldetector.py एक ही निर्देशिका में हैं, इसलिए सापेक्ष पथ नाम एक वाक्य है. आप माता-पिता निर्देशिका ((from... import anothermodule) या बच्चे निर्देशिका से भी आयात कर सकते हैं.

  • आईरेटर विधि next (()

पायथन 2 में, आईडेंटिफ़ायर के पास एक next () विधि है, जिसका उपयोग अनुक्रम में अगले को लौटाने के लिए किया जाता है। यह पायथन 3 में भी काम करता है, लेकिन अब एक नया वैश्विक फ़ंक्शन next () है, जो एक आईडेंटिफ़ायर को पैरामीटर के रूप में उपयोग करता है।

नोट्स पायथन 2 पायथन 3
anIterator.next() next ((एन्टीट्रेटर)
a_function_that_returns_an_iterator().next() next ((a_function_that_returns_an_iterator())
वर्ग A:
def next(self):
पास
वर्ग A:
def _अगला_(स्व):
पास करने के लिए
वर्ग A:
def next ((self, x, y):
पास
कोई परिवर्तन नहीं
next = 42
एक_इटरेटर के_अनुक्रम_में_इटरेटर के लिएः
एक_इटरेटर.next()
next = 42
एक_इटरेटर के_अनुक्रम_में_इटरेटर के लिएः
एक_इटरेटर._अगला_()

1. सबसे सरल उदाहरण में, आप एक आईडेंटर के next() विधि को कॉल नहीं करते हैं, अब आप आईडेंटर को ही वैश्विक फ़ंक्शन next() के लिए एक पैरामीटर के रूप में पास करते हैं। 2, यदि आपके पास एक रिटर्न वैल्यू है जो एक आइडेंटर का फ़ंक्शन है, तो इस फ़ंक्शन को कॉल करें और परिणाम को एक पैरामीटर के रूप में next () फ़ंक्शन को पास करें। 3. यदि आप अपने स्वयं के वर्ग को परिभाषित करते हैं, और फिर इसे एक आइडेंटिफ़ायर के रूप में उपयोग करते हैं, तो पायथन 3 में आप विशेष तरीकों को परिभाषित करके कर सकते हैं।अगला_(i) इसे लागू करने के लिए। 4, यदि आपके द्वारा परिभाषित वर्ग में सिर्फ एक next ((() है, तो यह एक या अधिक पैरामीटर का उपयोग करता है, 2to3 इसे निष्पादित करने पर इसे चालू नहीं करेगा। इस वर्ग को आईडेंटिफ़ायर के रूप में उपयोग नहीं किया जा सकता है क्योंकि इसके next ((() तरीकों में पैरामीटर हैं। 5. यह थोड़ा जटिल है. यदि आप एक स्थानीय चर है जो कि अगले कहा जाता है के लिए होता है, तो यह वैश्विक फ़ंक्शन अगले की तुलना में अधिक प्राधान्य है Python 3. इस मामले में, आप एक विशेष तरीके से iterator कॉल करने की जरूरत है.अगला_() के लिए अगले तत्व को प्राप्त करने के लिए।// या, आप कोड को फिर से बना सकते हैं ताकि स्थानीय चर का नाम next न हो, लेकिन 2to3 आपके लिए ऐसा नहीं करेगा।//

  • वैश्विक फ़ंक्शन फ़िल्टर ((()

पायथन 2 में, फिल्टर () विधि एक सूची लौटाता है, जो एक फ़ंक्शन द्वारा प्राप्त की जाती है, जो True या False के रूप में लौटाता है। पायथन 3 में, फिल्टर () फ़ंक्शन एक पुनरावर्तक लौटाता है, जो सूची नहीं है।

नोट्स पायथन 2 पायथन 3
फ़िल्टर ((a_function, a_sequence) list(filter(a_function, a_sequence))
list(filter(a_function, a_sequence)) कोई परिवर्तन नहीं
फ़िल्टर ((कोई नहीं, a_sequence) [i इन a_sequence के लिए अगर i]
फ़िल्टर में i के लिए ((कोई नहीं, a_sequence): कोई परिवर्तन नहीं
[इन फ़िल्टर के लिए i ((a_function, a_sequence) ] कोई परिवर्तन नहीं

सबसे सरल स्थिति में, 2to3 फ़िल्टर को एक list () फ़ंक्शन के साथ पैक करता है, और list () फ़ंक्शन इसके पैरामीटर के माध्यम से चलता है और एक सूची लौटाता है। 2, हालांकि, अगर filter (() कॉल को list (() द्वारा कवर किया गया है, तो 2to3 आगे का प्रसंस्करण नहीं करेगा, क्योंकि इस स्थिति में filter (() का लौटाया गया मान एक आईडेंटिफ़ायर है या नहीं, इससे कोई फर्क नहीं पड़ता। 3, फ़िल्टर ((None,...) जैसे विशेष सिंटैक्स को संभालने के लिए, 2to3 इस कॉल को सिंटैक्स के बराबर से सूची विश्लेषण में परिवर्तित करता है। 4. चूंकि for लूप पूरे अनुक्रम में चलता है, इसलिए कोई और संशोधन करने की आवश्यकता नहीं है। 5. जैसा कि ऊपर बताया गया है, कोई संशोधन करने की आवश्यकता नहीं है, क्योंकि सूची का विश्लेषण पूरे अनुक्रम में होता है, और यहां तक कि अगर फिल्टर () एक पुनरावर्तक को लौटाता है, तो यह अभी भी ठीक उसी तरह काम करता है जैसे पिछले फिल्टर () सूची को लौटाता है।

  • वैश्विक फ़ंक्शन map ((()

फ़िल्टर के साथ किए गए परिवर्तनों के समान, map () फ़ंक्शन अब एक पुनरावर्तक देता है।

नोट्स पायथन 2 पायथन 3
नक्शा ((a_function,PapayaWhip) सूची ((मैप ((एक_फंक्शन,PapayaWhip))
नक्शा ((कोई नहीं,पापाया व्हिप) सूची ((PapayaWhip)
नक्शा ((लैम्ब्डा एक्सः x+1,रेंज ((42)) [x+1अंतराल में x के लिए ((42)]
नक्शा में i के लिए ((a_function, a_sequence): कोई परिवर्तन नहीं
[i के लिए इन नक्शा ((a_function,a_sequence) ] कोई परिवर्तन नहीं

1, फिल्टर के समान है, सबसे सरल मामले में, 2to3 एक सूची () फ़ंक्शन का उपयोग करके मैप () कॉल को पैक करता है। 2、 विशेष रूप से map ((None,...) सिंटैक्स के लिए, filter ((None,...) के समान, 2to3 इसे एक समान कॉल में परिवर्तित करता है जिसका उपयोग list (() द्वारा किया जाता है। 3, यदि map का पहला पैरामीटर एक लैम्बडा फ़ंक्शन है, तो 2to3 इसे समकक्ष रूप से सूची विश्लेषण में परिवर्तित करता है । 4. पूरे अनुक्रम में चलने वाले for loops के लिए, कोई बदलाव करने की आवश्यकता नहीं है. 5. फिर से, यहां कोई संशोधन करने की आवश्यकता नहीं है, क्योंकि सूची पार्सिंग पूरे अनुक्रम में होती है, और यह ठीक काम करती है, भले ही map () का रिटर्न आईडेंटिफ़ायर है, न कि सूची।

  • वैश्विक फ़ंक्शन reduce ((()

पायथन 3 में, reduce () फ़ंक्शन को वैश्विक नामस्थान से हटा दिया गया है और इसे अब fucntools मॉड्यूल में रखा गया है।

नोट्स पायथन 2 पायथन 3
घटाएँ (a, b, c) फंक्टुल्स से आयात घटाएँ घटाएँ (a, b, c)
  • वैश्विक फ़ंक्शन apply ((()

पायथन 2 में एक सार्वभौमिक फ़ंक्शन है जिसका नाम है apply ((), जो एक फ़ंक्शन f और एक सूची [a, b, c] को पैरामीटर के रूप में उपयोग करता है, जो f ((a, b, c) है। आप इस फ़ंक्शन को सीधे कॉल करके भी ऐसा ही कर सकते हैं और सूची के सामने एक तारांकन (*) जोड़कर इसे पैरामीटर के रूप में पास कर सकते हैं। पायथन 3 में, apply (() फ़ंक्शन अब मौजूद नहीं है; तारांकन विधि का उपयोग करना होगा।

नोट्स पायथन 2 पायथन 3
apply ((a_function, a_list_of_args) a_function ((*a_list_of_args)
apply ((a_function, a_list_of_args, a_dictionary_of_named_args) a_function ((*a_list_of_args,**a_dictionary_of_named_args)
लागू करें ((a_function, a_list_of_args+ z) a_function ((*a_list_of_args+z)
लागू करें ((aModule.a_function, a_list_of_args) aModule.a_function ((*a_list_of_args)

1, सबसे सरल रूप में, फ़ंक्शन को पैरामीटर सूची ((जैसे [a, b, c]) से पहले एक तारा जोड़कर बुलाया जा सकता है। यह पायथन 2 में apply))) फ़ंक्शन के बराबर है। 2. पायथन 2 में, apply () फ़ंक्शन वास्तव में 3 पैरामीटर ले सकता हैः एक फ़ंक्शन, एक पैरामीटर सूची, और एक शब्दकोश नामित तर्क।), शब्दकोश नामकरण पैरामीटर से पहले दो तारांकनों को जोड़ने के लिए एक ही प्रभाव प्राप्त करता है। 3, ऑपरेटर + यहाँ कनेक्टिंग सूची के लिए एक फ़ंक्शन के रूप में प्रयोग किया जाता है, जो ऑपरेटर से अधिक प्राथमिकता रखता है, इसलिए a_list_of_args + z के चारों ओर अतिरिक्त कोष्ठक जोड़ने की कोई आवश्यकता नहीं है. 4, 2to3 स्क्रिप्ट जटिल apply () कॉल को परिवर्तित करने के लिए पर्याप्त स्मार्ट है, जिसमें मॉड्यूल में फ़ंक्शन आयात करने के लिए कॉल शामिल हैं।

  • वैश्विक फ़ंक्शन intern

पायथन 2 में, आप एक स्ट्रिंग पर आंतरिक कार्य को सीमित कर सकते हैं ताकि प्रदर्शन अनुकूलन प्राप्त हो सके। पायथन 3 में, आंतरिक कार्य को sys मॉड्यूल में स्थानांतरित कर दिया गया है।

नोट्स पायथन 2 पायथन 3
intern ((aString) sys.intern ((aString)
  • exec कथन

जैसा कि प्रिंट कथन पायथन 3 में एक फ़ंक्शन बन जाता है, वैसे ही exec कथन भी ऐसा है ।exec () फ़ंक्शन एक स्ट्रिंग का उपयोग करता है जिसमें किसी भी प्रकार का पायथन कोड होता है, और फिर इसे निष्पादित करता है जैसे कि निष्पादन कथन या अभिव्यक्ति ।exec () औरeval () समान हैं, लेकिन exec () अधिक मजबूत और अधिक कुशल हैं ।

नोट्स पायथन 2 पायथन 3
exec कोडString exec ((codeString)
exec codea_global_namespace में स्ट्रिंग exec ((codeString, a_global_namespace)
exec codea_global_namespace,a_local_namespace में स्ट्रिंग exec ((codeString, a_global_namespace,a_local_namespace)

1, सबसे सरल रूप में, क्योंकि exec))) अब एक फ़ंक्शन है, न कि एक कथन, 2to3 इस स्ट्रिंग के कोड को कोष्ठक के साथ घेरता है। 2. पायथन 2 में exec कथन एक नामस्थान निर्दिष्ट कर सकता है, जिसका कोड वैश्विक वस्तुओं से बने इस निजी स्थान में निष्पादित किया जाएगा। पायथन 3 में भी ऐसा ही कार्य है; आपको केवल इस नामस्थान को दूसरे पैरामीटर के रूप में exec () फ़ंक्शन को पास करना होगा। 3. और भी अजीब बात यह है कि पायथन 2 में exec कथन एक स्थानीय नामस्थान (जैसे कि एक फ़ंक्शन में घोषित चर) निर्दिष्ट कर सकता है। पायथन 3 में, exec () फ़ंक्शन भी ऐसा करता है।

  • execfile कथन

पहले के exec कथन की तरह, पायथन 2 में execfile कथन भी Python कोड को निष्पादित करने की तरह स्ट्रिंग का उपयोग कर सकता है; इसके विपरीत, exec स्ट्रिंग का उपयोग करता है, जबकि execfile फ़ाइल का उपयोग करता है। पायथन 3 में, execfile कथन को हटा दिया गया है। यदि आप वास्तव में एक फ़ाइल में पायथन कोड निष्पादित करना चाहते हैं (लेकिन आप इसे आयात नहीं करना चाहते हैं), तो आप इस फ़ाइल को खोल सकते हैं, इसकी सामग्री पढ़ सकते हैं, और फिर compile () वैश्विक फ़ंक्शन को कॉल कर सकते हैं।

नोट्स पायथन 2 पायथन 3
execfile ((a_filename) exec(कंपाइल(खुला(a_filename).read(),a_filename,exec))
  • repr (प्रति चिह्नित)

पायथन 2 में, किसी भी ऑब्जेक्ट के लिए एक स्ट्रिंग प्राप्त करने के लिए, एक तरीका है कि ऑब्जेक्ट को उल्टे उद्धरण में पैक किया जाता है। उदाहरण के लिएx) का विशेष वाक्यविन्यास है. पायथन 3 में, यह क्षमता अभी भी मौजूद है, लेकिन आप इस स्ट्रिंग का प्रतिनिधित्व करने के लिए प्रति-उद्धरण का उपयोग नहीं कर सकते हैं. आपको वैश्विक फ़ंक्शन repr ((() का उपयोग करने की आवश्यकता है.

नोट्स पायथन 2 पायथन 3
`x` repr ((x)
`पापाया व्हिप + `2` रेप ((PapayaWhip+ रेप ((2))

१, याद रखें, x कुछ भी हो सकता है एक वर्ग, फ़ंक्शन, मॉड्यूल, बुनियादी डेटा प्रकार, आदि. 2. पायथन 2 में, प्रति-उद्धरण को नेस्ट किया जा सकता है, जिसके परिणामस्वरूप यह भ्रमित (लेकिन प्रभावी) अभिव्यक्ति होती है। 2to3 इस नेस्ट कॉल को repr () फ़ंक्शन में परिवर्तित करने के लिए पर्याप्त स्मार्ट है।

  • try...except वाक्यांश

पायथन 2 से पायथन 3 के लिए, असामान्यताओं को पकड़ने का सिंटैक्स थोड़ा बदल सकता है।

नोट्स पायथन 2 पायथन 3
try:
import mymodule
except ImportError, e
पास करें
try:
import mymodule
except ImportError as e:
pass
try:
import mymodule
except (RuntimeError, ImportError), e
पास करें
try:
import mymodule
except (RuntimeError, ImportError) के रूप में e:
पास करें
try:
import mymodule
except ImportError:
पास करें
कोई परिवर्तन नहीं
try:
import mymodule
except:
pass
कोई परिवर्तन नहीं

१, पायथन २ में असामान्य प्रकार के बाद अल्पविराम जोड़ने के विपरीत, पायथन ३ में एक नया कीवर्ड, as प्रयोग किया गया है. 2. as कीवर्ड का उपयोग एक ही समय में कई प्रकार के असामान्यताओं को पकड़ने के लिए भी किया जा सकता है। 3. यदि आप एक असामान्यता को पकड़ते हैं, लेकिन असामान्यता वस्तु को देखने के लिए उत्सुक नहीं हैं, तो पायथन 2 और पायथन 3 का सिंटैक्स समान है। 4. इसी तरह, यदि आप सभी असामान्यताओं को पकड़ने के लिए एक सुरक्षा विधि (fallback) का उपयोग करते हैं, तो पायथन 2 और पायथन 3 का सिंटैक्स समान है। 5. मॉड्यूल (या अधिकांश अन्य स्थितियों में) आयात करते समय, आपको इस विधि का उपयोग बिल्कुल नहीं करना चाहिए (ऊपर उल्लिखित फ़ॉलबैक को संदर्भित करें) । अन्यथा, प्रोग्राम असामान्यताओं को पकड़ सकता है जैसे कि कीबोर्ड रुकावट (यदि उपयोगकर्ता Ctrl-C दबाकर प्रोग्राम को रोकता है), जिससे डिबगिंग अधिक कठिन हो जाती है।

  • raise वाक्यांश

पायथन 3 में, कस्टम असामान्यताओं को फेंकने के लिए सिंटैक्स में मामूली बदलाव होते हैं।

नोट्स पायथन 2 पायथन 3
MyException उठाएँ अपरिवर्तित
MyException,त्रुटि संदेश उठाएँ raise MyException ((त्रुटि संदेश)
raise MyException,त्रुटि संदेश, a_traceback raise MyException ((errormessage).with_traceback ((a_traceback) के साथ)
त्रुटि संदेश उठाएँ असमर्थित

1, उपयोगकर्ता द्वारा अनुकूलित गलत सूचना के बिना असामान्यताओं को फेंकना, इस सरल रूप में, वाक्यविन्यास नहीं बदलता है । 2. जब आप किसी असामान्यता को छोड़ना चाहते हैं जिसमें उपयोगकर्ता द्वारा अनुकूलित त्रुटि संदेश है, तो परिवर्तन स्पष्ट है; पायथन 2 असामान्यताओं और त्रुटि संदेशों को एक अल्पविराम के साथ अलग करता है; पायथन 3 असामान्यताओं को एक पैरामीटर के रूप में त्रुटि संदेश देता है। 3. पायथन 2 में एक और जटिल वाक्यविन्यास का समर्थन किया जाता है जो उपयोगकर्ता द्वारा अनुकूलित बैकअप (स्टैक ट्रेस, स्टैक ट्रैकिंग) के साथ एक अपवाद को फेंक देता है। 4. पायथन 2 में, आप एक असामान्य वर्ग के बिना एक असामान्य को फेंक सकते हैं, केवल एक असामान्य संदेश के साथ। पायथन 3 में, यह रूप अब समर्थित नहीं है। 2to3 आपको चेतावनी देगा कि यह इस सिंटैक्स को स्वचालित रूप से ठीक नहीं कर सकता है।

  • जनरेटर का फेंकने का तरीका

पायथन 2 में, जनरेटर में एक throw (throw) विधि होती है. a_generator.throw (throw) को कॉल करने से जनरेटर को रोकते समय एक असामान्यता फेंक दी जाती है, और फिर जनरेटर फ़ंक्शन द्वारा प्राप्त अगले मान को वापस कर दिया जाता है. पायथन 3 में यह कार्य अभी भी उपलब्ध है, लेकिन थोड़ा सा अलग है।

नोट्स पायथन 2 पायथन 3
a_generator.throw(MyException) कोई परिवर्तन नहीं
a_generator.throw ((MyException, त्रुटि संदेश) a_generator.throw(MyException(त्रुटि संदेश))
a_generator.throw(त्रुटि संदेश) असमर्थित

1, सबसे सरल रूप में, जनरेटर उपयोगकर्ता द्वारा अनुकूलित त्रुटि संदेश के बिना असामान्यताओं को फेंक देता है; इस मामले में, कोई सिंटैक्स परिवर्तन नहीं है, जो कि पायथन 2 से पायथन 3 तक है। 2. यदि जनरेटर उपयोगकर्ता द्वारा अनुकूलित त्रुटि संदेश के साथ एक असामान्यता को फेंक देता है, तो आपको इसे उदाहरण बनाने के लिए त्रुटि संदेश स्ट्रिंग को असामान्यता वर्ग को पास करने की आवश्यकता है। 3. पायथन 2 केवल असामान्य संदेश के साथ असामान्यताओं को फेंकने का भी समर्थन करता है। पायथन 3 इस सिंटैक्स का समर्थन नहीं करता है, और 2to3 आपको एक चेतावनी संदेश दिखाता है कि आपको इस कोड को मैन्युअल रूप से ठीक करने की आवश्यकता है।

  • वैश्विक फ़ंक्शन xrange)))

पायथन 2 में, एक निश्चित श्रेणी के लिए संख्याओं को प्राप्त करने के दो तरीके हैंः रेंज (((), जो एक सूची लौटाता है, और रेंज (((), जो एक आईडेंटिफ़ायर लौटाता है। पायथन 3 में, रेंज ((() आईडेंटिफ़ायर लौटाता है, एक्सरेंज ((() मौजूद नहीं है।

नोट्स पायथन 2 पायथन 3
xrange ((10) सीमा ((10)
a_list = श्रेणी (१०) a_list = list(range(10))
[i इन xrange के लिए ((10) ] [i इन रेंज के लिए ((10) ]
श्रेणी में i के लिए ((१०): कोई परिवर्तन नहीं
राशि (रेंज) कोई परिवर्तन नहीं

1, सबसे सरल स्थिति में, 2to3 xrange (xrange) को range (range) में बदल देगा। 2. यदि आपका पायथन 2 कोड range का उपयोग करता है, तो 2to3 को पता नहीं है कि आपको एक सूची की आवश्यकता है या एक आईडेंटिफ़ायर भी चल रहा है। सावधानी के रूप में, 2to3 एक त्रुटि दे सकता है, और फिर list का उपयोग करके range का लौटाया गया मान को सूची प्रकार में बदल देता है। 3. यदि सूची पार्स में xrange () फ़ंक्शन है, तो इसके रिटर्न मान को सूची में परिवर्तित करना आवश्यक नहीं है, क्योंकि सूची पार्सिंग आईडेंटिफ़ायर के लिए समान रूप से प्रभावी है। 4, इसी तरह, for loop भी आईरेटर पर काम करता है, इसलिए यहाँ भी कुछ नहीं बदला गया है. 5, फ़ंक्शन sum () इरेटर पर काम कर सकता है, इसलिए 2to3 ने भी यहां कोई बदलाव नहीं किया है. जैसे कि लौटाया गया मान view () है और अब सूची नहीं है, यह min (), max (), sum (), list (), tuple (), set (), sorted (), any (), all (), all ()) के लिए भी लागू होता है.

  • वैश्विक फ़ंक्शन raw_input (()) और input (())

पायथन 2 में दो वैश्विक फ़ंक्शन हैं जिनका उपयोग कमांड लाइन पर उपयोगकर्ता इनपुट के लिए किया जाता है; पहला इनपुट कहा जाता है, जो उपयोगकर्ता के लिए एक पायथन अभिव्यक्ति दर्ज करने का इंतजार करता है और फिर परिणाम लौटाता है; दूसराraw_input कहा जाता है, जो उपयोगकर्ता दर्ज करता है, वह वापस आता है। यह शुरुआती लोगों के लिए बहुत भ्रमित है, और यह व्यापक रूप से पायथन भाषा के लिए एक मांसपेशी की तरह देखा जाता है।

नोट्स पायथन 2 पायथन 3
raw_input() इनपुट
raw_input ((prompt) इनपुट (( शीघ्र)
इनपुट eval ((इनपुट))

सबसे सरल रूप में, raw_input (() को input (() के रूप में बदल दिया जाता है। पायथन 2 में, raw_input () फ़ंक्शन एक संकेत को पैरामीटर के रूप में निर्दिष्ट कर सकता है। पायथन 3 में यह फ़ंक्शन संरक्षित है। 3. यदि आप वास्तव में एक पायथन अभिव्यक्ति में उपयोगकर्ता को इनपुट करने के लिए पूछना चाहते हैं, तो आप इनपुट () फ़ंक्शन को कॉल करके परिणामों को गणना कर सकते हैं और इसके बाद eval () को लौटा सकते हैं।

  • फ़ंक्शन गुण function_*

पायथन 2 में, फ़ंक्शन के अंदर का कोड फ़ंक्शन के स्वयं के विशेष गुणों तक पहुँच सकता है। पायथन 3 में, इन विशेष गुणों को निरंतरता के लिए नाम दिया गया है।

नोट्स पायथन 2 पायथन 3
a_function.func_name कार्य.नाम_
a_function.func_doc कार्य.डॉ_
a_function.func_defaults कार्य.डिफ़ॉल्ट
a_function.func_dict कार्य.निर्देशन
a_function.func_closure कार्य.समापन_
a_function.func_globals कार्य.वैश्विक_
a_function.func_code कार्य.कोड_

१,__name__ विशेषता ((मूल func_name) में फ़ंक्शन का नाम होता है. 2,__doc__ विशेषता ((originalfuncdoc) आपके द्वारा फ़ंक्शन स्रोत कोड में परिभाषित दस्तावेज़ स्ट्रिंग ((docstring) शामिल है 3. __defaults__ विशेषताएँ (मूल function_defaults) एक घटक समूह है जो पैरामीटर के डिफ़ॉल्ट मान को संग्रहीत करता है। 4. __dict__ विशेषता (मूल func_dict) एक नामस्थान है जो किसी भी फ़ंक्शन की विशेषता का समर्थन करता है। 5. _closure__ विशेषता (मूल function_closure) एक सेल ऑब्जेक्ट से बना एक घटक है जिसमें फ्री वेरिएबल पर फ़ंक्शन का बंधन होता है। 6. __globals__ विशेषता (मूल func_globals) एक संदर्भ है जो मॉड्यूल-व्यापी नामस्थान के लिए है, और फ़ंक्शन स्वयं को इस नामस्थान में परिभाषित किया गया है। 7. __code__ विशेषता (अंग्रेजीः _code__ attribute) एक कोड ऑब्जेक्ट है जो संकलित फ़ंक्शन बॉडी को दर्शाता है।

  • I/O विधि xreadlines

पायथन 2 में, फ़ाइल ऑब्जेक्ट में एक xreadlines () विधि है, जो एक बार में एक पंक्ति को पढ़ने के लिए एक आईडेंटिफ़ायर को लौटाता है। यह विशेष रूप से फॉर लूप में उपयोगी है। वास्तव में, बाद के पायथन 2 संस्करणों ने फ़ाइल ऑब्जेक्ट को स्वयं में इस तरह की सुविधा जोड़ी है।

पायथन 3 में, xreadlines (() विधि अब उपलब्ध नहीं है. 2to3 सरल स्थितियों को हल कर सकता है, लेकिन कुछ किनारे के मामलों में मैन्युअल हस्तक्षेप की आवश्यकता होती है.

नोट्स पायथन 2 पायथन 3
a_file.xreadlines में पंक्ति के लिए ((): a_file में पंक्ति के लिएः
a_file.xreadlines(5) में पंक्ति के लिएः कोई परिवर्तन नहीं (टूटा हुआ)

१, यदि आप पहले बिना पैरामीटर के xreadlines को कॉल करते हैं, तो २-३ इसे फ़ाइल ऑब्जेक्ट में परिवर्तित कर देता है। पायथन ३ में, यह परिवर्तित कोड पहले के समान कार्य कर सकता हैः एक पंक्ति को एक बार पढ़ता है, और फिर for लूप के लूप को निष्पादित करता है। 2, यदि आप पहले एक पैरामीटर का उपयोग कर रहे हैं ((हर बार पढ़े जाने वाले पंक्तियों की संख्या) xreadlines को कॉल करने के लिए ((), 2to3 आपके लिए पायथन 2 से पायथन 3 में रूपांतरण पूरा नहीं कर सकता है, तो आपका कोड इस तरह से विफल हो जाएगाः AttributeError: _io.TextIOWrapper object has no attribute xreadlines. आप मैन्युअल रूप से xreadlines को xreadlines में बदल सकते हैं ताकि कोड पायथन 3 में काम कर सके.

  • लैंबडा फ़ंक्शन जिसमें कई पैरामीटर के बजाय तत्वों का उपयोग किया जाता है

पायथन 2 में, आप एक अनाम लैंब्डा फ़ंक्शन को परिभाषित कर सकते हैं, जिससे यह फ़ंक्शन वास्तव में कई पैरामीटर प्राप्त करने में सक्षम हो सकता है, जैसे कि पैरामीटर के रूप में तत्वों की संख्या निर्दिष्ट करना। वास्तव में, पायथन 2 के व्याख्याता इस घटक को अनपैक करते हैं और इसे नामित पैरामीटर के रूप में संदर्भित करते हैं, और फिर आप उन्हें लैम्ब्डा फ़ंक्शन में नाम से संदर्भित कर सकते हैं। पायथन 3 में, आप अभी भी एक पैरामीटर को लैम्ब्डा फ़ंक्शन के पैरामीटर के रूप में पारित कर सकते हैं, लेकिन पायथन व्याख्याता इसे नामित पैरामीटर के रूप में हल नहीं करता है। आपको प्रत्येक पैरामीटर को स्थान सूचकांक के माध्यम से संदर्भित करने की आवश्यकता है।

नोट्स पायथन 2 पायथन 3
लैम्बडा (x,): x+ f(x लैम्बडा x1: x1[0]+f(x1[0])
लैम्बडा (x, y): x+f(y) लैम्बडा x_y: x_y[0]+f(x_y[1])
लैम्बडा (x,(y,z)): x+ y+ z लैम्बडा x_y_z: x_y_z[0]+x_y_z[1][0]+ x_y_z[1][1]
लैम्बडा x, y, z: x+y + z अपरिवर्तित

1, यदि आपने एक लैम्बडा फ़ंक्शन परिभाषित किया है, तो यह पैरामीटर के रूप में एक तत्व युक्त घटक का उपयोग करता है, जो पायथन 3 में x1[0] के संदर्भ वाले लैम्बडा फ़ंक्शन में परिवर्तित हो जाता है. x1 2to3 स्क्रिप्ट है जो मूल घटक में नामकरण पैरामीटर के आधार पर स्वचालित रूप से उत्पन्न होती है. 2, दो तत्वों वाला एक घटक ((x, y) का उपयोग करके पैरामीटर के रूप में लैम्ब्डा फ़ंक्शन को x_y में परिवर्तित किया जाता है, जिसमें दो स्थान पैरामीटर हैं, अर्थात् x_y[0] और x_y[1]। 3, 2to3 स्क्रिप्ट यहां तक कि लैंबडा फ़ंक्शन को भी संभाल सकती है जो नेस्टेड नामकरण पैरामीटर का उपयोग करके पैरामीटर के रूप में कार्य करता है। परिणामस्वरूप कोड थोड़ा कठिन है, लेकिन यह पायथन 3 में मूल कोड के समान ही काम करता है। 4. आप एक लैम्बडा फ़ंक्शन को परिभाषित कर सकते हैं जो कई पैरामीटर का उपयोग करता है. यदि पैरामीटर के चारों ओर कोई कोष्ठक नहीं है, तो पायथन 2 इसे एक लैम्बडा फ़ंक्शन के रूप में मानता है जिसमें कई पैरामीटर हैं; इस लैम्बडा फ़ंक्शन के शरीर में, आप इन पैरामीटरों को नाम से संदर्भित करते हैं, जैसा कि अन्य प्रकार के फ़ंक्शन में किया जाता है. यह वाक्यविन्यास पायथन 3 में भी काम करता है।

  • विशेष विधि गुण

पायथन 2 में, कक्षा के तरीके अपने वर्ग वस्तुओं को परिभाषित करने के लिए उपयोग किए जा सकते हैं, और विधि वस्तुओं को भी उपयोग कर सकते हैं; im_self कक्षा का एक उदाहरण वस्तु है; im_func फ़ंक्शन वस्तु है, im_class कक्षा है। पायथन 3 में, ये गुण अन्य गुणों के नामकरण समझौते का पालन करने के लिए नाम बदल दिए गए हैं।

नोट्स पायथन 2 पायथन 3
aClassInstance.aClassMethod.im_func aClassInstance.aClassMethod._ एक वर्ग उदाहरण. एक वर्ग विधि._कार्य_
aClassInstance.aClassMethod.im_self aClassInstance.aClassMethod._ एक वर्ग उदाहरण. एक वर्ग विधि._स्वयं_
aClassInstance.aClassMethod.im_class का उपयोग करना aClassInstance.aClassMethod._ एक वर्ग उदाहरण. एक वर्ग विधि._स्वयं_._वर्ग_
  • __nonzero__ विशेष विधि

पायथन 2 में, आप अपनी कक्षाएं बना सकते हैं और उन्हें बुल संदर्भ में उपयोग कर सकते हैं। उदाहरण के लिए, आप इस कक्षा को उदाहरण दे सकते हैं और इस उदाहरण के ऑब्जेक्ट को एक यदि कथन में उपयोग कर सकते हैं। इस उद्देश्य के लिए, आप एक विशेष परिभाषित करते हैं_शून्य_() विधि, जिसका रिटर्न वैल्यू True या False है, यह विधि तब कॉल की जाती है जब उदाहरण ऑब्जेक्ट बुल पर संदर्भ में होता है.बोल_()。

नोट्स पायथन 2 पायथन 3
वर्ग A:
def _शून्य_(स्व):
पास
वर्ग A:
def _बोल_(स्व):
पास
वर्ग A:
def _शून्य_(स्वयं, x, y):
पास
कोई परिवर्तन नहीं

1. जब आप एक class object को Boolean context में उपयोग करते हैं, तो Python 3 उसे _बोल_(), और नहीं _शून्य_() । लेकिन अगर आपके पास दो पैरामीटर के साथ एक परिभाषा है।शून्य_() विधि, 2to3 स्क्रिप्ट यह मानती है कि आपके द्वारा परिभाषित विधि का कोई अन्य उपयोग है, इसलिए कोड में कोई संशोधन नहीं किया जाता है।

  • आठ अंकों का प्रकार

पायथन 2 और पायथन 3 के बीच, ऑक्टाल संख्याओं को परिभाषित करने के सिंटैक्स में थोड़ा बदलाव हुआ है।

नोट्स पायथन 2 पायथन 3
x = 0755 x = 0o755
  • sys.maxint

पूर्ण आकार और पूर्ण आकार एक साथ एकीकृत होने के कारण, sys.maxint निरंतरता अब सटीक नहीं है; लेकिन क्योंकि यह मूल्य एक विशेष मंच का पता लगाने की क्षमता के लिए उपयोगी है, इसे पायथन 3 द्वारा रखा गया है और इसका नाम बदलकर sys.maxsize कर दिया गया है।

नोट्स पायथन 2 पायथन 3
sys importmaxint से sys importmaxsize से
a_function ((sys.maxint) a_function ((sys.maxsize)

1, maxint को maxsize कर दिया गया है. 2. सभी sys.maxint को sys.maxsize में बदल दिया गया है.

  • वैश्विक फ़ंक्शन callable ((()

पायथन 2 में, आप एक ऑब्जेक्ट को कॉल करने योग्य है या नहीं, यह जांचने के लिए वैश्विक फ़ंक्शन callable का उपयोग कर सकते हैं। पायथन 3 में, यह वैश्विक फ़ंक्शन रद्द कर दिया गया है। किसी ऑब्जेक्ट को कॉल करने योग्य है या नहीं, यह जांचने के लिए विशेष तरीकों का उपयोग किया जा सकता है।call_() का अस्तित्व ।

नोट्स पायथन 2 पायथन 3
बुलाया जा सकता है (कुछ भी) कुछ भी नहीं है,_call_’)
  • वैश्विक फ़ंक्शन ((zip)

पायथन 2 में, सार्वभौमिक फ़ंक्शन zip ((() को किसी भी प्रकार के कई अनुक्रमों के लिए एक पैरामीटर के रूप में उपयोग किया जा सकता है, जो एक सूची को वापस करता है जो घटकों से बनी होती है। पहला घटक प्रत्येक अनुक्रम का पहला तत्व शामिल करता है; दूसरा घटक प्रत्येक अनुक्रम का दूसरा तत्व शामिल करता है; क्रमशः आगे और नीचे चला जाता है। पायथन 3 में, zip ((() एक आईडेंटिफ़ायर को वापस करता है, न कि सूची को।

नोट्स पायथन 2 पायथन 3
zip ((a, b, c) सूची ((zip ((a, b, c))
d.join ((zip ((a, b, c)) कोई परिवर्तन नहीं

सबसे सरल रूप में, आप zip () फ़ंक्शन के पहले के फ़ंक्शन को वापस करने के लिए list () फ़ंक्शन को zip () में पैक करने के लिए कॉल कर सकते हैं, और list () फ़ंक्शन इस zip () फ़ंक्शन को वापस करने वाले आईडेंटिफ़ायर में चलता है, और फिर परिणामों की सूची का प्रतिनिधित्व करता है। zip लौटने वाला आईडेंटिफ़ायर सामान्य रूप से काम करता है, जब यह पहले से ही सभी तत्वों के माध्यम से चलता है (जैसे कि यहाँ join () विधि को कॉल करना) । 2to3 स्क्रिप्ट इन स्थितियों का पता लगाएगी और आपके कोड में कोई बदलाव नहीं करेगी ।

  • मानक त्रुटि

पायथन 2 में, StandardError सभी अंतर्निहित असामान्यताओं के लिए आधार है, सिवाय StopIteration, GeneratorExit, KeyboardInterrupt, और SystemExit के। पायथन 3 में, StandardError को समाप्त कर दिया गया है; Exception का उपयोग किया गया है।

नोट्स पायथन 2 पायथन 3
x =StandardError() x = अपवाद
x =StandardError ((a, b, c) x = अपवाद ((a, b, c)
  • प्रकार मॉड्यूल में स्थिर

types मॉड्यूल में विभिन्न प्रकार के स्थिरांक हैं जो आपको किसी ऑब्जेक्ट के प्रकार को निर्धारित करने में मदद करते हैं. पायथन 2 में यह उन स्थिरांकों को शामिल करता है जो सभी बुनियादी डेटा प्रकारों का प्रतिनिधित्व करते हैं, जैसे कि dict और int.

नोट्स पायथन 2 पायथन 3
types.UnicodeType str
types.StringType बाइट्स
types.DictType निशाना
types.IntType इंट
types.LongType इंट
types.ListType सूची
types.NoneType प्रकार ((कोई नहीं)
types.BooleanType बोल
types.BufferType स्मृतिदृश्य
types.ClassType प्रकार
types.ComplexType जटिल
types.EllipsisType प्रकार (एलिप्सिस)
types.FloatType तैरना
types.ObjectType वस्तु
types.NotImplementedType प्रकार ((निष्पादित नहीं)
types.SliceType टुकड़ा करना
types.TupleType टपली
types.TypeType प्रकार
types.XRangeType रेंज

types.StringType को बाइट्स के रूप में मैप किया गया है, न कि स्ट्र, क्योंकि पायथन 2 में स्ट्रिंग स्ट्रिंग (गैर-यूनिकोड एन्कोडेड स्ट्रिंग, यानी साधारण स्ट्रिंग) वास्तव में कुछ बाइट्स का एक अनुक्रम है जो किसी प्रकार के वर्णों का उपयोग करके एन्कोडेड है।

  • विश्वव्यापी फ़ंक्शन in instance (())

isinstance () फ़ंक्शन यह जांचता है कि क्या कोई ऑब्जेक्ट किसी विशेष वर्ग या प्रकार का उदाहरण है. पायथन 2 में, आप किसी प्रकार के प्रकार से बने एक तत्व को एक उदाहरण को पास कर सकते हैं, और यदि यह वस्तु किसी भी प्रकार का है, तो फ़ंक्शन True लौटाता है. पायथन 3 में, आप अभी भी ऐसा कर सकते हैं, लेकिन एक प्रकार को पैरामीटर के रूप में दो बार पास करने की सिफारिश नहीं की जाती है।

नोट्स पायथन 2 पायथन 3
isinstance(x,(int,float,int)) isinstance(x,(int,float))
  • basestring डेटा प्रकार

पायथन 2 में दो प्रकार के स्ट्रिंग प्रकार होते हैंः यूनिकोड कोडित स्ट्रिंग और गैर-यूनिकोड कोडित स्ट्रिंग; लेकिन वास्तव में एक और प्रकार है, जिसे बेसस्ट्रिंग कहा जाता है। यह एक अमूर्त डेटा प्रकार है, जो कि स्ट्र और यूनिकोड प्रकार के सुपरक्लास है। इसे सीधे कॉल या उदाहरण नहीं किया जा सकता है, लेकिन आप इसे एक पैरामीटर के रूप में उपयोग कर सकते हैं ताकि यह पता लगाया जा सके कि कोई ऑब्जेक्ट यूनिकोड स्ट्रिंग या गैर-यूनिकोड स्ट्रिंग है। पायथन 3 में, केवल एक स्ट्रिंग प्रकार है, इसलिए बेसस्ट्रिंग की आवश्यकता नहीं है।

नोट्स पायथन 2 पायथन 3
isinstance ((x, बेसस्ट्रिंग) isinstance ((x, str)
  • itertools मॉड्यूल

पायथन 2.3 में इटरटूल मॉड्यूल को पेश किया गया है, जो वैश्विक फ़ंक्शंस (zip), मैप (map), फिल्टर (filter) के वेरिएंट (variant) को परिभाषित करता है, जिनके रिटर्न टाइप आईडेंटिज़र होते हैं, न कि सूची। पायथन 3 में, इन वैश्विक फ़ंक्शनों के रिटर्न टाइप के कारण इन इटरटूल में वेरिएंट फ़ंक्शन को रद्द कर दिया गया है।

नोट्स पायथन 2 पायथन 3
itertools.izip ((a, b) zip ((a, b)
itertools.imap ((a, b) नक्शा (a, b)
itertools.ifilter ((a, b) फ़िल्टर (a, b)
itertools से IMAP, Izip, Foo आयात करें itertools से आयात foo

1, वैश्विक zip () फ़ंक्शन का उपयोग करें, itertools.izip () के बजाय । 2, itertools.imap के बजाय map का उपयोग करें। 3,itertools.ifilter))) filter))) बन गया है। 4. पायथन 3 में इटरटूल मॉड्यूल अभी भी मौजूद है, यह केवल उन कार्यों को शामिल नहीं करता है जो वैश्विक नामस्थान में स्थानांतरित हो गए हैं। 2to3 स्क्रिप्ट पर्याप्त रूप से बुद्धिमान हैं कि वे उन आयात कथनों को हटा दें जो अब उपयोगी नहीं हैं, जबकि अन्य आयात कथनों की अखंडता को बनाए रखते हैं।

  • sys.exc_type, sys.exc_value, sys.exc_traceback

जब आप असामान्यताओं से निपटते हैं, तो सिज़ मॉड्यूल में तीन चर हैं जिन्हें आप एक्सेस कर सकते हैंः sys.exc_type, sys.exc_value, और sys.exc_traceback. (वास्तव में, ये सभी पायथन 1 के समय में मौजूद थे।)

नोट्स पायथन 2 पायथन 3
sys.exc_type sys.exc_info()[0]
sys.exc_value sys.exc_info (() [1]
sys.exc_traceback sys.exc_info (() [2]
  • तत्वों की सूची का विश्लेषण करें

पायथन 2 में, यदि आपको किसी घटक के माध्यम से जाने वाले सूची विश्लेषण को लिखने की आवश्यकता है, तो आपको घटक मान के चारों ओर कोष्ठक जोड़ने की आवश्यकता नहीं है। पायथन 3 में, ये कोष्ठक आवश्यक हैं।

नोट्स पायथन 2 पायथन 3
[i इन 1,2] के लिए [i के लिए iin(1,2)]
  • os.getcwdu))) फ़ंक्शन

पायथन 2 में os.getcwd () नामक एक फ़ंक्शन है जो वर्तमान कार्य निर्देशिका को एक गैर-यूनिकोड कोडित स्ट्रिंग के रूप में लौटाता है। चूंकि आधुनिक फ़ाइल सिस्टम किसी भी वर्ण-संक्रमित निर्देशिका नाम को संभाल सकते हैं, इसलिए पायथन 2.3 में os.getcwdu () फ़ंक्शन को पेश किया गया है। os.getcwdu () फ़ंक्शन वर्तमान कार्य निर्देशिका को यूनिकोड कोडित स्ट्रिंग के रूप में लौटाता है। पायथन 3 में, आपको केवल os.getcwd () की आवश्यकता है क्योंकि केवल एक स्ट्रिंग है।

नोट्स पायथन 2 पायथन 3
os.getcwdu (() os.getcwd()
  • मेटाक्लास

पायथन 2 में, आप वर्ग की घोषणा में मेटाक्लास पैरामीटर को परिभाषित करके, या एक विशेष वर्ग-स्तर के लिए __metaclass__ गुण को परिभाषित करके, एक मेटाक्लास बना सकते हैं। पायथन 3 में, __metaclass__ गुण को समाप्त कर दिया गया है।

नोट्स पायथन 2 पायथन 3
वर्ग C ((metaclass=PapayaMeta):
पास
अपरिवर्तित
वर्ग चाकूः
_मेटाक्लास_= पपीता मेटा
class Whip ((metaclass=PapayaMeta):
पास
वर्ग C ((विप्पर, बीटर):
_मेटाक्लास_= पपीता मेटा
वर्ग C ((Whipper,Beater,metaclass=PapayaMeta): पास

१, जब एक वर्ग घोषित किया जाता है तो मेटाक्लास पैरामीटर घोषित किया जाता है, जो कि पायथन २ और पायथन ३ में समान है। 2. कक्षा की परिभाषा में __metaclass__ गुण को पायथन 2 में मान्य घोषित किया गया है, लेकिन पायथन 3 में नहीं है। 3, 2to3 एक वैध वर्ग घोषणा का निर्माण कर सकता है, भले ही यह वर्ग कई माता-पिता वर्गों से विरासत में मिला हो।

  • कोड शैली के बारे में

नीचे सूचीबद्ध फिक्स मूल रूप से वास्तविक फिक्स नहीं हैं; इसका मतलब है कि वे कोड की शैली के बारे में हैं और कोड के सार से संबंधित नहीं हैं; लेकिन पायथन के डेवलपर्स को कोड की शैली को यथासंभव समान बनाने में बहुत दिलचस्पी है। इसके लिए, एक आधिकारिक गाइड है जो पायथन कोड की शैली का वर्णन करता है।

  • set (() शाब्दिक मान ((literal)) ((स्पष्ट))

पायथन 2 में, एक शाब्दिक मान सेट को परिभाषित करने का एकमात्र तरीका सेट (a_sequence) को कॉल करना है; पायथन 3 में यह अभी भी काम करता है, लेकिन नए शाब्दिक संकेतन का उपयोग करना अधिक स्पष्ट तरीका हैः बड़ा ब्रैकेट। यह तरीका खाली सेट के अलावा भी काम करता है, क्योंकि शब्दकोश भी बड़े ब्रैकेट के साथ चिह्नित है, इसलिए {} एक खाली शब्दकोश को दर्शाता है, न कि एक खाली सेट।

2to3 स्क्रिप्ट डिफ़ॉल्ट रूप से set() literal मान को ठीक नहीं करती है. इस फ़ंक्शन को चालू करने के लिए, कमांड लाइन पर 2to3 को कॉल करते समय -f set_literal पैरामीटर निर्दिष्ट करें.

नोट्स पहले बाद में
सेट (([1,2,3]) {1,2,3}
सेट (((1,2,3)) {1,2,3}
set (([i इन a_sequence के लिए]) {i इन a_sequence के लिए}
  • वैश्विक फ़ंक्शन बफ़र

पायथन ऑब्जेक्ट को C में लागू करने के लिए एक बफर इंटरफ़ेस निकाला जा सकता है जो अन्य पायथन कोड को सीधे मेमोरी को पढ़ने और लिखने की अनुमति देता है। यह बहुत शक्तिशाली लगता है, लेकिन यह भी भयानक है। पायथन 3 में, बफर को मेमोरीव्यू के रूप में नामित किया गया है। वास्तविक संशोधन अधिक जटिल हैं, लेकिन आप इन अंतरों को लगभग अनदेखा कर सकते हैं।

2to3 स्क्रिप्ट डिफ़ॉल्ट रूप से buffer ()) फ़ंक्शन को ठीक नहीं करती है. इस फ़ंक्शन को चालू करने के लिए, कमांड लाइन पर 2to3 को कॉल करते समय -f buffer पैरामीटर निर्दिष्ट करें.

नोट्स पहले बाद में
x = बफर ((y) x =मेमोरी व्यू ((y)
  • कॉमा के चारों ओर रिक्त स्थान (स्पष्ट)

यद्यपि पायथन में इनडेटिंग और आउटडेटिंग के लिए रिक्त स्थानों के लिए बहुत सख्त आवश्यकताएं हैं, लेकिन अन्य पहलुओं में रिक्त स्थान का उपयोग करने के लिए पायथन बहुत स्वतंत्र है। सूची, घटक, सेट और शब्दकोश में, रिक्त स्थान कोमा के पहले या बाद में दिखाई दे सकते हैं, इससे कोई बुरा प्रभाव नहीं पड़ता है। हालांकि, पायथन कोड शैली गाइड में कहा गया है कि कॉमा से पहले कोई रिक्त स्थान नहीं हो सकता है और कॉमा के बाद एक रिक्त स्थान होना चाहिए। हालांकि यह केवल एक सौंदर्य विचार कोड है जो अभी भी ठीक से काम कर सकता है, यह पायथन 2 और पायथन 3 में भी हो सकता है, लेकिन 2to3 स्क्रिप्ट आपके लिए मैनुअल मानकों के आधार पर इस मरम्मत को पूरा कर सकती है।

2to3 स्क्रिप्ट डिफ़ॉल्ट रूप से कॉमा के आसपास के रिक्त स्थान को ठीक नहीं करती है. इस सुविधा को चालू करने के लिए, कमांड लाइन पर 2to3 को कॉल करते समय -f wscomma पैरामीटर निर्दिष्ट करें.

नोट्स पहले बाद में
a, b a, b
{a:b} {a: b}
  • आम मुहावरे (सामान्य)

पायथन समुदाय में कई अनुष्ठान स्थापित किए गए हैं. कुछ उदाहरण हैं जबकि 1: लूप, जो पायथन 1 से वापस आता है. (पायथन में वास्तव में अर्थपूर्ण बुल प्रकार पायथन 2.3 तक नहीं थे, इसलिए डेवलपर्स ने पहले 1 और 0 के विकल्पों का उपयोग किया था.) समकालीन पायथन प्रोग्रामर को इन अनुष्ठानों का उपयोग करने के लिए अपने दिमाग को प्रशिक्षित करना चाहिए।

2to3 स्क्रिप्ट इन अनुष्ठानों के लिए डिफ़ॉल्ट रूप से मरम्मत नहीं करती है। इस सुविधा को चालू करने के लिए, कमांड लाइन पर 2to3 को कॉल करते समय -f idioms पैरामीटर निर्दिष्ट करें।

नोट्स पहले बाद में
जबकि 1:
do_stuff()
जबकि True:
do_stuff()
प्रकार ((x) == T उदाहरण ((x, T)
प्रकार ((x) T है उदाहरण ((x, T)
a_list = list ((a_sequence) a_list = sorted ((a_sequence)
a_list.sort() do_stuff ((a_list)
do_stuff ((a_list)

अनुवादित सेसीएसडीएन ब्लॉग

पायथन 2 कोड को पायथन 3 में कैसे परिवर्तित करें

पायथन 2.x के कोड को पायथन 3.x के कोड में कैसे परिवर्तित किया जाए। पायथन 2.x कोड को पायथन 3.x कोड में कैसे परिवर्तित करें

  • 1.自己手动转换

यह बहुत ज्यादा कहने की जरूरत नहीं है, अगर यह केवल कुछ ही कार्यों जैसे प्रिंट आदि से संबंधित है।

तो आप अपना कोड बदल सकते हैं।

  • 2.利用Python内置(Python脚本)工具,帮你自动转换

पायथन 2.x संस्करण, जैसे कि मेरे द्वारा स्थापित पायथन 2.7.2, विंडोज डाउनलोड करने के बाद स्थापित होने के लिए कुछ उपयोगी उपकरण लाता है।

其中一个叫做2to3.pyऔर यह आपको Python 2.x के कोड को Python 3.x के कोड में बदलने में मदद करता है।

इसका स्थान हैः पायथन स्थापित रूट निर्देशिका \Python27\Tools\Scripts\2to3.py

如何利用2to3.py, पायथन 2.x के कोड को पायथन 3.x के कोड स्टिक में परिवर्तित करने का कार्यान्वयन उदाहरण के लिए, मेरे पास एक पायथन स्क्रिप्ट है जो कि पायथन 2.x के लिए है:

D:\tmp\tmp_dev_root\python\python2_to_python3\34563264_data_from_site.py

अब, मैं इसे पायथन 3.x के कोड में बदलना चाहता हूँ.

आप विंडोज के cmd को खोलने के द्वारा, परिवर्तित करने के लिए स्क्रिप्ट के नीचे की ओर ले जा सकते हैं और फिर चला सकते हैं

D:\tmp\WordPress\DevRoot\Python27\Tools\Scripts\2to3.py -w 34563264_data_from_site.py

यदि रूपांतरण सफल हो जाता है, तो निष्पादन का परिणाम होगाः

D:\tmp\tmp_dev_root\python\python2_to_python3>D:\tmp\WordPress\DevRoot\Python27\Tools\Scripts\2to3.py -w 34563264_data_from_site.py
RefactoringTool: Skipping implicit fixer: buffer
RefactoringTool: Skipping implicit fixer: idioms
RefactoringTool: Skipping implicit fixer: set_literal
RefactoringTool: Skipping implicit fixer: ws_comma
RefactoringTool: Refactored 34563264_data_from_site.py
--- 34563264_data_from_site.py  (original)
+++ 34563264_data_from_site.py  (refactored)
@@ -18,7 +18,7 @@
 import time;
 import codecs;
 import logging;
-import urllib;
+import urllib.request, urllib.parse, urllib.error;
 from datetime import datetime,timedelta;
 from optparse import OptionParser;
 from string import Template,replace;
@@ -90,7 +90,7 @@
         foundPhone = eachItemSoup.find(attrs={"class":"phone"});
         logging.debug("foundPhone=%s", foundPhone);
         if(foundPhone):
-            foundPhoneUni = unicode(foundPhone);
+            foundPhoneUni = str(foundPhone);
             logging.debug("foundPhoneUni=%s", foundPhoneUni);
             # case 1:
             #<p class="phone"><strong>phone:</strong>&nbsp;800.206.7886<br />
@@ -122,7 +122,7 @@
         foundWeb = eachItemSoup.find(attrs={"class":"web"});
         logging.debug("foundWeb=%s", foundWeb);
         if(foundWeb):
-            foundWebUni = unicode(foundWeb);
+            foundWebUni = str(foundWeb);
             logging.debug("foundWebUni=%s", foundWebUni);
 
             # <p class="web"><strong>e-mail:</strong>&nbsp;<a href="#">sales@cinesysinc.com</a><br />
@@ -151,7 +151,7 @@
         foundAddr = eachItemSoup.find(attrs={"class":"addr"});
         logging.debug("foundAddr=%s", foundAddr);
         if(foundAddr):
-            foundAddrUni = unicode(foundAddr);
+            foundAddrUni = str(foundAddr);
 
             # <p class="addr">
                 # <strong>address:</strong>&nbsp;740 SW 21st Ave, Suite #310<br />
RefactoringTool: Files that were modified:
RefactoringTool: 34563264_data_from_site.py

इस बिंदु पर, आप देख सकते हैं कि मूल 345636264_data_from_site.py, जो कि पायथन 3.x का संस्करण बन गया है।


अधिक

फंगबेईbotvs Python 2 का उपयोग कर रहे हैं?

आविष्कारक मात्रा - छोटे सपनेBotVS का रिज़ॉल्यूशन सर्वर Python 2.7 संस्करण का उपयोग करता है, जो BotVS प्लेटफॉर्म Python2 और Python3 दोनों के लिए समर्थित है।