लगभग सभी पायथन 2 प्रोग्रामों को पायथन 3 के वातावरण में ठीक से चलाने के लिए कुछ संशोधनों की आवश्यकता होती है। इस रूपांतरण प्रक्रिया को सरल बनाने के लिए, पायथन 3 एक 2 से 3 उपयोगिता स्क्रिप्ट के साथ आता है, जिसे यूटिलिटी स्क्रिप्ट कहा जाता है, जो आपके पायथन 2 प्रोग्राम की स्रोत फ़ाइल को इनपुट के रूप में लेता है और फिर इसे स्वचालित रूप से पायथन 3 में बदल देता है। केस स्टडीः पोर्टिंग चार्डट टू पायथन 3 इस स्क्रिप्ट को कैसे चलाया जाए, इसके बारे में बताता है, और फिर कुछ स्थितियों को दिखाता है जहां इसे स्वचालित रूप से ठीक नहीं किया जा सकता है। यह अनुलग्नक बताता है कि यह स्वचालित रूप से क्या ठीक कर सकता है।
पायथन 2 में, print एक वाक्य है। आप जो कुछ भी आउटपुट करना चाहते हैं, बस उन्हें प्रिंट कीवर्ड के बाद रखें। पायथन 3 में, print () एक फ़ंक्शन है। अन्य फ़ंक्शंस की तरह, print () आपको उस चीज़ को पैरामीटर के रूप में पास करने की आवश्यकता है जिसे आप आउटपुट करना चाहते हैं।
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | print() | |
| ② | print 1 | print(1) |
| ③ | print 1,2 | print(1,2) |
| ④ | print 1,2, | print(1,2,end=’ ‘) |
| ⑤ | print >>sys.stderr,1,2,3 | print(1,2,3, file=sys.stderr) |
1। एक खाली पंक्ति को आउटपुट करने के लिए, बिना पैरामीटर के print () को कॉल करने की आवश्यकता है। 2। एक अलग मान को आउटपुट करने के लिए, एक पैरामीटर को प्रिंट () के रूप में रखना आवश्यक है। 3। आउटपुट के लिए एक रिक्त स्थान से अलग दो मानों का उपयोग करें, दो मापदंडों के साथ कॉल करें print (()) । 4। इस उदाहरण में कुछ चालें हैं। पायथन 2 में, यदि आप print वाक्य के अंत में एक अल्पविराम ((,) का उपयोग करते हैं, तो यह आउटपुट को एक रिक्त स्थान के साथ अलग कर देगा, और फिर एक अनुवर्ती रिक्त स्थान ((trailing space) का उत्पादन करेगा, बिना carriage return () का उत्पादन किया। पायथन 3 में, एक ही प्रभाव को end=’ ‘के रूप में एक कीवर्ड पैरामीटर के रूप में print पर पारित करके प्राप्त किया जा सकता है। पैरामीटर पैरामीटर का डिफ़ॉल्ट मान ‘\n’ है, इसलिए अंत में आउटपुट कार्ट को समाप्त करने के लिए पैरामीटर पैरामीटर को फिर से निर्दिष्ट करके समाप्त किया जा सकता है। 5. पायथन 2 में, आप एक पाइपलाइन में आउटपुट को पुनर्निर्देशित कर सकते हैं, उदाहरण के लिए, sys.stderr के लिए >>pipe_name सिंटैक्स का उपयोग करके। पायथन 3 में, आप पाइपलाइन को प्रिंट () को पास करके एक ही कार्य कर सकते हैं। पैरामीटर फ़ाइल का डिफ़ॉल्ट मान std.stdout है, इसलिए इसका पुनः निर्दिष्ट करने से प्रिंट () एक और पाइपलाइन में आउटपुट करेगा।
पायथन 2 में दो प्रकार के स्ट्रिंग प्रकार हैंःयूनिकोड स्ट्रिंगऔरगैर यूनिकोड स्ट्रिंगपायथन 3 में केवल एक प्रकार हैःयूनिकोड स्ट्रिंग्स。
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | u’PapayaWhip’ | ‘PapayaWhip’ |
| ② | ur’PapayaWhip\foo’ | r’PapayaWhip\foo’ |
पायथन 2 में यूनिकोड स्ट्रिंग्स पायथन 3 में सामान्य स्ट्रिंग्स हैं, क्योंकि पायथन 3 में स्ट्रिंग्स हमेशा यूनिकोड के रूप में होती हैं। यूनिकोड मूल स्ट्रिंग ((raw string) ((इस तरह की स्ट्रिंग का उपयोग करते हुए, पायथन स्वचालित रूप से उलटा तिरछा नहीं करता है”“) को सामान्य स्ट्रिंग के रूप में भी बदल दिया गया है, क्योंकि पायथन 3 में, सभी मूल स्ट्रिंग्स यूनिकोड में एन्कोड की जाती हैं।
पायथन 2 में दो वैश्विक फ़ंक्शंस हैं जो ऑब्जेक्ट्स को स्ट्रिंग्स में परिवर्तित करने के लिए मजबूर करते हैंः यूनिकोड ((() ऑब्जेक्ट्स को यूनिकोड स्ट्रिंग्स में परिवर्तित करता है, और str ((() ऑब्जेक्ट्स को गैर-यूनिकोड स्ट्रिंग्स में परिवर्तित करता है। पायथन 3 में केवल एक स्ट्रिंग प्रकार है, यूनिकोड स्ट्रिंग्स, इसलिए str ((() फ़ंक्शन सभी कार्यों को पूरा करता है।unicode() फ़ंक्शन अब पायथन 3 में मौजूद नहीं है )
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | unicode(anything) | str(anything) |
पायथन 2 में गैर-फ्लोटिंग संख्याओं के लिए तैयार int और long प्रकार हैं। int प्रकार का अधिकतम मूल्य sys.maxint से अधिक नहीं हो सकता है, और यह अधिकतम मूल्य प्लेटफ़ॉर्म से संबंधित है। लंबे पूर्णांक को संख्या के अंत में एक L जोड़कर परिभाषित किया जा सकता है, जो स्पष्ट रूप से, int प्रकार द्वारा दर्शाए गए संख्याओं की तुलना में अधिक है। पायथन 3 में, केवल एक पूर्णांक प्रकार int है, जो ज्यादातर मामलों में, पायथन 2 में लंबे पूर्णांक की तरह है। चूंकि दो प्रकार के पूर्णांक मौजूद नहीं हैं, इसलिए उन्हें अलग करने के लिए विशेष सिंटैक्स का उपयोग करने की आवश्यकता नहीं है।
आगे की पढाई: पीईपी २३७ः एकजुटता और एकजुटता
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | x = 1000000000000L | x = 1000000000000 |
| ② | x = 0xFFFFFFFFFFFFL | x = 0xFFFFFFFFFFFF |
| ③ | long(x) | int(x) |
| ④ | type(x) is long | type(x) is int |
| ⑤ | isinstance(x,long) | isinstance(x,int) |
पायथन 2 में दशमलव दीर्घ पूर्णांक को पायथन 3 में दशमलव पूर्ण पूर्णांक के रूप में प्रतिस्थापित किया गया है। पायथन 2 में सोलह अंकों का लंबा पूर्णांक पायथन 3 में सोलह अंकों का सामान्य पूर्णांक के रूप में प्रतिस्थापित किया गया है। Python 3 में, क्योंकि लंबे पूर्णांक प्रकार अब मौजूद नहीं हैं,प्राकृतिक मूल long () फ़ंक्शन भी नहीं है. एक चर को एक पूर्णांक में बदलने के लिए, int () फ़ंक्शन का उपयोग किया जा सकता है。 जांचें कि क्या एक चर एक पूर्णांक है, इसका डेटा प्रकार प्राप्त करें, और इसकी तुलना int प्रकार के साथ करें (long नहीं) । डेटा प्रकार की जांच करने के लिए आप inisinstance () फ़ंक्शन का उपयोग कर सकते हैं; एक बार फिर, int का उपयोग करें, न कि long का, पूर्णांक प्रकार की जांच करने के लिए।
पायथन 2 समर्थन <> के रूप में! = का पर्यायवाची. पायथन 3 केवल! = का समर्थन करता है, अब <> का समर्थन नहीं करता है।
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | if x <> y: | if x != y: |
| ② | if x <> y<> z: | if x != y!= z: |
पायथन 2 में, शब्दकोश ऑब्जेक्ट का has_key() विधि का उपयोग करने के लिए परीक्षण करने के लिए कि शब्दकोश में एक विशेष कुंजी है या नहीं))) पायथन 3 अब इस विधि का समर्थन नहीं करता))) आपको उपयोग करने की आवश्यकता हैinऑपरेटर
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | a_dictionary.has_key(‘PapayaWhip’) | ‘PapayaWhip’ in a_dictionary |
| ② | a_dictionary.has_key(x) or a_dictionary.has_key(y) | x in a_dictionary or y in a_dictionary |
| ③ | a_dictionary.has_key(x or y) | (x or y) in a_dictionary |
| ④ | a_dictionary.has_key(x + y) | (x + y) in a_dictionary |
| ⑤ | x + a_dictionary.has_key(y) | x + (y in a_dictionary) |
पायथन 2 में, कई शब्दकोश विधियों के लिए लौटाए गए मान सूची हैं। इनमें से सबसे अधिक उपयोग की जाने वाली विधियों में कुंजी, आइटम और मान हैं। पायथन 3 में, उपरोक्त सभी विधियों के लिए लौटाए गए मानों को गतिशील दृश्य में बदल दिया गया है। कुछ संदर्भों में, इस परिवर्तन का कोई प्रभाव नहीं पड़ता है। यदि इन विधियों के लिए लौटाए गए मान तुरंत किसी अन्य फ़ंक्शन को दिए जाते हैं, और वह फ़ंक्शन पूरे अनुक्रम में चलता है, तो उपरोक्त विधियों के लिए लौटाए गए मान सूची या दृश्य हैं और इससे कोई फर्क नहीं पड़ता है। अन्य मामलों में, पायथन 3 में ये परिवर्तन महत्वपूर्ण हैं। यदि आप एक सूची की उम्मीद करते हैं जो तत्वों को स्वतंत्र रूप से पता लगाया जा सकता है, तो पायथन 3 में ये परिवर्तन आपके कोड कार्ड को रोक देंगे, क्योंकि दृश्य अनुक्रमण का समर्थन नहीं करता है।
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | a_dictionary.keys() | list(a_dictionary.keys()) |
| ② | a_dictionary.items() | list(a_dictionary.items()) |
| ③ | a_dictionary.iterkeys() | iter(a_dictionary.keys()) |
| ④ | [i for iin a_dictionary.iterkeys()] | [i for iin a_dictionary.keys()] |
| ⑤ | min(a_dictionary.keys()) | no change |
1 ⇒ list () फ़ंक्शन का उपयोग करके keys () के रिटर्न को एक स्थिर सूची में परिवर्तित किया जाता है, सुरक्षा के लिए, 2to3 त्रुटि रिपोर्ट कर सकता है ⇒ ऐसा कोड प्रभावी है, लेकिन यह दृश्य का उपयोग करने के लिए कम कुशल है ⇒ आपको यह देखने के लिए रूपांतरण के बाद कोड की जांच करनी चाहिए कि क्या आपको निश्चित रूप से सूची की आवश्यकता है, शायद दृश्य भी ऐसा ही काम कर सकता है ⇒ 2. यह एक और दृश्य है ([items] विधि के बारे में) सूची में रूपांतरण △ 2to3 पर values () विधि में लौटाए गए मानों का रूपांतरण भी समान है △ 3। पाइथन 3 में अब iterkeys को समर्थन नहीं दिया गया है। यदि आवश्यक हो, तो iter () का उपयोग करके keys () के रिटर्न को एक iterator में परिवर्तित करें। 4, 2to3 यह पहचानने में सक्षम है कि iterkeys () विधि का उपयोग सूची विश्लेषण में किया जाता है, और फिर इसे पायथन 3 में keys () विधि में परिवर्तित किया जाता है। इसके लिए अतिरिक्त iter () का उपयोग करने की आवश्यकता नहीं होती है ताकि इसके रिटर्न को पैक किया जा सके। यह संभव है क्योंकि दृश्य पुनरावर्ती है। 5 2to3 यह भी पहचानता है कि keys (()) विधि का रिटर्न तुरंत एक और फ़ंक्शन को दिया जाता है जो पूरे अनुक्रम को पार करता है, इसलिए पहले keys (()) के रिटर्न को एक सूची में बदलने की आवश्यकता नहीं है। इसके विपरीत, min ((() फ़ंक्शन दृश्य को पार करने के लिए खुश होगा। यह प्रक्रिया min (((), max (((), sum (((), list (((), tuple (((), set (((), sorted (((), any ((() और all (()) के लिए भी प्रभावी है।
पायथन 2 से पायथन 3 तक, मानक कुरी में कुछ मॉड्यूल का नाम बदल दिया गया है। कुछ अन्य संबंधित मॉड्यूल को गठबंधन या पुनर्गठित किया गया है ताकि यह संबंध अधिक तार्किक हो सके।
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | import httplib | import http.client |
| ② | import Cookie | import http.cookies |
| ③ | import cookielib | import http.cookiejar |
| ④ | import BaseHTTPServer import SimpleHTTPServer import CGIHttpServer |
import http.server |
http.client मॉड्यूल एक अंतर्निहित पुस्तकालय को लागू करता है जिसका उपयोग HTTP संसाधनों के लिए अनुरोध करने और HTTP प्रतिक्रिया को पार्स करने के लिए किया जा सकता है। http.cookies मॉड्यूल HTTP हेडर सेट-कुकी के माध्यम से भेजे गए कुकीज़ को प्राप्त करने के लिए एक पायथनिक इंटरफ़ेस प्रदान करता है आम ब्राउज़र कुकीज़ को फ़ाइलों के रूप में डिस्क पर संग्रहीत करते हैं, और http.cookiejar मॉड्यूल इन फ़ाइलों को संचालित कर सकता है। http.server मॉड्यूल एक बुनियादी HTTP सर्वर को लागू करता है
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | import urllib | import urllib.request urllib.parse,urllib.error |
| ② | import urllib2 | import urllib.request urllib.error |
| ③ | import urlparse | import urllib.parse |
| ④ | import robotparser | import urllib.robotparser |
| ⑤ | from urllib import FancyURLopener from urllib import urlencode |
from urllib.request import FancyURLopener from urllib.parse import urlencode |
| ⑥ | from urllib2 import Request from urllib2 import HTTPError |
from urllib.request import Request from urllib.error import HTTPError |
पहले, पाइथन 2 में urllib मॉड्यूल में विभिन्न प्रकार के फ़ंक्शंस थे, जिनमें urlopen () शामिल थे, जो डेटा प्राप्त करने के लिए उपयोग किए जाते थे, और यह यूआरएल को अपने घटक भागों में विभाजित करने के लिए भी उपयोगी है। splitype ()), splithost () और splituser () फ़ंक्शंस। नए urllib पैकेज में, ये फ़ंक्शंस अधिक तार्किक रूप से संगठित किए गए हैं। 2to3 इन फ़ंक्शंस के कॉल को नए नामकरण योजनाओं के अनुकूल संशोधित करेगा। पाइथन 3 में, पिछले urllib2 मॉड्यूल को urllib पैकेज में शामिल किया गया है। साथ ही, urllib2 में आपकी पसंदीदा चीजें पाइथन 3 के urllib मॉड्यूल में एक बार में दिखाई देंगी, जैसे कि build_opener () विधि, अनुरोध ऑब्जेक्ट, HTTPBasicAuthHandler और मित्र। पायथन 3 में urllib.parse मॉड्यूल में मूल पायथन 2 में urlparse मॉड्यूल के सभी पार्सिंग फ़ंक्शंस शामिल हैं। urllib.robotparse मॉड्यूल robots.txt फ़ाइल को पार्स करता है। FancyURLopener वर्ग जो HTTP पुनर्निर्देशन और अन्य स्थिति कोड को संभालता है, अभी भी पायथन 3 में urllib.request मॉड्यूल में काम करता है। urlencode () फ़ंक्शन को urllib.parse में स्थानांतरित कर दिया गया है। अनुरोध ऑब्जेक्ट अभी भी urllib.request में मान्य है, लेकिन HTTPError जैसे स्थिरांक urllib.error में स्थानांतरित कर दिए गए हैं। उदाहरण के लिए, यदि आप अपने Python 2 कोड में urllib मॉड्यूल को आयात करते हैं और urllib.urlopen () फ़ंक्शन को डेटा प्राप्त करने के लिए कहते हैं, तो 2to3 आयात कथन और फ़ंक्शन कॉल को संशोधित करेगा।
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | import urllib print urllib.urlopen(’http://diveintopython3.org/‘).read() | import urllib.request, urllib.parse, urllib.error print(urllib.request.urlopen(’http://diveintopython3.org/‘).read()) |
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | import dbm | import dbm.ndbm |
| ② | import gdbm | import dbm.gnu |
| ③ | import dbhash | import dbm.bsd |
| ④ | import dumbdbm | import dbm.dumb |
| ⑤ | import anydbm import whichdb |
import dbm |
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | import xmlrpclib | import xmlrpc.client |
| ② | import DocXMLRPCServer import SimpleXMLRPCServer |
import xmlrpc.server |
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | try: import cStringIO as StringIO except ImportError: import StringIO |
import io |
| ② | try: import cPickle as pickle except ImportError: import pickle |
import pickle |
| ③ | import _builtin_ | import builtins |
| ④ | import copy_reg | import copyreg |
| ⑤ | import Queue | import queue |
| ⑥ | import SocketServer | import socketserver |
| ⑦ | import ConfigParser | import configparser |
| ⑧ | import repr | import reprlib |
| ⑨ | import commands | import subprocess |
एक पैकेज एक एकल इकाई है जो संबंधित मॉड्यूल के एक समूह से मिलकर बना है। पायथन 2 में, आप एक ही पैकेज के भीतर मॉड्यूल के लिए एक-दूसरे को संदर्भित करने के लिए आयात foo या from foo import Bar का उपयोग करते हैं। पायथन 2 व्याख्याकार वर्तमान निर्देशिका में foo.py की खोज करेंगे, फिर पायथन खोज पथ ((sys.path) में खोज करेंगे। पायथन 3 में यह प्रक्रिया थोड़ी अलग है। पायथन 3 पहले वर्तमान पथ पर खोज नहीं करेगा, यह सीधे पायथन के खोज पथ में खोज करेगा। यदि आप एक पैकेज में एक मॉड्यूल को दूसरे पैकेज में एक मॉड्यूल में लाना चाहते हैं, तो आपको स्पष्ट रूप से दो मॉड्यूल के लिए संबंधित पथ प्रदान करने की आवश्यकता है।
मान लीजिए कि आपके पास एक ही निर्देशिका में कई फाइलें हैंः
chardet/ | +–init.py | +–constants.py | +–mbcharsetprober.py | +–universaldetector.py
अब मान लीजिए कि universaldetector.py को constants.py को आयात करने की आवश्यकता है, और इसके अलावा mbcharsetprober.py की एक श्रेणी को आयात करने की आवश्यकता है। आप क्या करेंगे?
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | import constants | from .import constants |
| ② | from mbcharsetprober import MultiByteCharSetProber | from .mbcharsetprober import MultiByteCharsetProber |
पायथन 2 में, iterator के पास एक next () विधि है जो अनुक्रम में अगले आइटम को वापस करने के लिए है। पायथन 3 में यह भी काम करता है, लेकिन अब एक नया वैश्विक फ़ंक्शन next () है, जो एक iterator को पैरामीटर के रूप में उपयोग करता है।
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | anIterator.next() | next(anIterator) |
| ② | a_function_that_returns_an_iterator().next() | next(a_function_that_returns_an_iterator()) |
|③|class A:
def next(self):
pass|class A:
def next(self):
pass|
|④|class A:
def next(self, x, y):
pass|no change |
|⑤|next = 42
for an_iterator in a_sequence_of_iterators:
an_iterator.next()|next = 42
for an_iterator in a_sequence_of_iterators:
an_iterator.next() |
1. सबसे सरल उदाहरण में, अब आप एक iterator के next (() विधि को नहीं बुलाते हैं, अब आप iterator को स्वयं को एक पैरामीटर के रूप में वैश्विक फ़ंक्शन next (()) में पास करते हैं।
2. यदि आपके पास एक फ़ंक्शन है जिसका रिटर्न एक इनडेक्टर है, तो उस फ़ंक्शन को कॉल करें और परिणाम को next () फ़ंक्शन के लिए एक पैरामीटर के रूप में पास करें।
3. यदि आप अपनी खुद की कक्षा को परिभाषित करते हैं, और फिर इसे एक iterator के रूप में उपयोग करते हैं, तो Python 3 में, आप विशेष विधियों को परिभाषित करकेnext() को पूरा करने के लिए।
4. यदि आपके द्वारा परिभाषित कक्षा में एक next () है, तो यह एक या अधिक पैरामीटर का उपयोग करता है, इसे 2to3 निष्पादन के दौरान स्थानांतरित नहीं करता है। इस वर्ग को एक एडेप्टर के रूप में उपयोग नहीं किया जा सकता है, क्योंकि इसकी next () विधि में पैरामीटर हैं।
5। यह थोड़ा जटिल है। यदि आपके पास एक स्थानीय चर है जिसे next कहा जाता है, तो यह Python 3 में वैश्विक फ़ंक्शन next की तुलना में अधिक प्राथमिकता प्राप्त करता है))) । इस मामले में, आपको एक विशेष विधि का आह्वान करने की आवश्यकता हैnext() क्रम में अगला तत्व प्राप्त करने के लिए。(या, आप कोड को फिर से बना सकते हैं ताकि स्थानीय चर का नाम next न हो, लेकिन 2to3 आपके लिए ऐसा नहीं करेगा。)
पायथन 2 में, filter() विधि एक सूची लौटाता है, जो एक फ़ंक्शन द्वारा प्राप्त की जाती है जो अनुक्रम में प्रत्येक तत्व को सही या गलत मान देता है। पायथन 3 में, filter() फ़ंक्शन एक iterator लौटाता है, जो सूची नहीं है।
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | filter(a_function, a_sequence) | list(filter(a_function, a_sequence)) |
| ② | list(filter(a_function, a_sequence)) | no change |
| ③ | filter(None, a_sequence) | [i for iin a_sequence if i] |
| ④ | for i in filter(None, a_sequence): | no change |
| ⑤ | [i for iin filter(a_function, a_sequence)] | no change |
1, सबसे सरल स्थिति में, 2to3 एक सूची () फ़ंक्शन का उपयोग करके फ़िल्टर () को पैक करता है, और सूची () फ़ंक्शन इसके पैरामीटर के माध्यम से चलता है और फिर एक सूची देता है। 2. हालांकि, यदि filter() को सूचीबद्ध किया गया है, तो 2to3 इसे संसाधित नहीं करता है, क्योंकि इस स्थिति में यह महत्वपूर्ण नहीं है कि filter() का लौटाया गया मान एक iterator है या नहीं। 3। फ़िल्टर ((None, …) की इस विशेष सिंटैक्स को संभालने के लिए, 2to3 इस कॉलिंग को सिंटैक्सिक रूप से समकक्ष रूप से सूची विश्लेषण में परिवर्तित करता है। 4. चूंकि for loop पूरे sequence में चलता है, इसलिए इसे बदलने की कोई आवश्यकता नहीं है 5. जैसा कि ऊपर किया गया है, कोई संशोधन करने की आवश्यकता नहीं है, क्योंकि सूची पार्सिंग पूरे अनुक्रम को पार करती है, और यहां तक कि अगर filter (() एक iterator लौटाता है, तो यह पहले की तरह ठीक से काम कर सकता है filter (() सूची लौटाता है।
फ़िल्टर () द्वारा किए गए परिवर्तनों की तरह, map () फ़ंक्शन अब एक iterator देता है। पायथन 2 में, यह एक सूची देता है।
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | map(a_function,‘PapayaWhip’) | list(map(a_function,‘PapayaWhip’)) |
| ② | map(None,‘PapayaWhip’) | list(‘PapayaWhip’) |
| ③ | map(lambda x: x+1,range(42)) | [x+1for x in range(42)] |
| ④ | for i in map(a_function, a_sequence): | no change |
| ⑤ | [i for iin map(a_function,a_sequence)] | no change |
1। फ़िल्टर () के समान ही, 2to3 एक सूची () फ़ंक्शन का उपयोग करता है जो कि सबसे सरल स्थिति में, map () कॉल को पैक करता है। 2। विशेष map ((None, …) सिंटैक्स के लिए, फ़िल्टर ((None, …) की तरह, 2to3 इसे एक समकक्ष कॉल में बदल देगा जो list (() का उपयोग करता है 3 , यदि map () का पहला पैरामीटर एक lambda फ़ंक्शन है, तो 2to3 इसे समान रूप से सूची विश्लेषण में परिवर्तित करता है। 4. For loop जो पूरे sequence में चलता है, उसे बदलने की आवश्यकता नहीं है। 5. एक बार फिर, यहाँ कोई संशोधन करने की आवश्यकता नहीं है, क्योंकि सूची विश्लेषण पूरे अनुक्रम में चलता है, और यह ठीक से काम कर सकता है, भले ही map () के लिए लौटाया गया मान सूची के बजाय एक iterator है।
पायथन 3 में, reduce () फ़ंक्शन को वैश्विक नामस्थान से हटा दिया गया है और अब इसे fucntools मॉड्यूल में रखा गया है।
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | reduce(a, b, c) | from functools import reduce reduce(a, b, c) |
पायथन 2 में एक वैश्विक फ़ंक्शन है जिसका नाम है apply (), जो एक फ़ंक्शन f और एक सूची का उपयोग करता है[a, b, c] एक पैरामीटर के रूप में, यह f ((a, b, c) को लौटाता है। आप इस फ़ंक्शन को सीधे कॉल करके सूची से पहले एक तारांकन जोड़ सकते हैं।*) एक पैरामीटर के रूप में इसे पारित करने के लिए एक ही काम करता है। पायथन 3 में, apply (()) फ़ंक्शन अब मौजूद नहीं है; एक तारांकन विधि का उपयोग करना होगा।
| Notes | Python 2 | Python 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) |
| ③ | apply(a_function, a_list_of_args+ z) | a_function(*a_list_of_args+ z) |
| ④ | apply(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 में, आप पैरामीटर सूची से पहले एक तारांकन जोड़कर कर सकते हैं), शब्दकोश नामकरण पैरामीटर से पहले दो तारांकन जोड़ें ((**) एक ही प्रभाव प्राप्त करने के लिए। 3। ऑपरेटर + को यहाँ लिंक सूची के फ़ंक्शन के रूप में उपयोग किया जाता है, जो ऑपरेटर से अधिक प्राथमिकता रखता है, इसलिए a_list_of_args + z के चारों ओर अतिरिक्त कोष्ठक जोड़ने की कोई आवश्यकता नहीं है 4, 2to3 स्क्रिप्ट काफी बुद्धिमान है जो जटिल apply () कॉल को परिवर्तित करने के लिए है, जिसमें आयात मॉड्यूल में फ़ंक्शन कॉल शामिल हैं।
पायथन 2 में, आप इंटरनल () फ़ंक्शन का उपयोग कर सकते हैं एक स्ट्रिंग पर कार्य करने के लिए इसे सीमित करने के लिए ताकि यह प्रदर्शन अनुकूलन प्राप्त कर सके। पायथन 3 में, इंटरनल () फ़ंक्शन को sys मॉड्यूल में स्थानांतरित कर दिया गया है।
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | intern(aString) | sys.intern(aString) |
जैसा कि प्रिंट कथन पायथन 3 में एक फ़ंक्शन बन जाता है, वैसे ही exec कथन भी होता है। .exec () फ़ंक्शन एक स्ट्रिंग का उपयोग करता है जिसमें किसी भी पायथन कोड को पैरामीटर के रूप में शामिल किया जाता है, और फिर इसे एक वाक्य या अभिव्यक्ति की तरह निष्पादित करता है। .exec () और eval () समान हैं, लेकिन exec () अधिक शक्तिशाली और अधिक कुशल हैं। .eval () फ़ंक्शन केवल एक एकल अभिव्यक्ति निष्पादित कर सकता है, लेकिन exec () कई वाक्यों को निष्पादित कर सकता है, आयात () और फ़ंक्शन घोषणाएँ कर सकता है।
| Notes | Python 2 | Python 3 |
|---|
|①|exec codeString|exec(codeString) |②|exec codeString in a_global_namespace|exec(codeString, a_global_namespace)| |③|exec codeString in a_global_namespace, a_local_namespace|exec(codeString, a_global_namespace,a_local_namespace)| 1,