4
ध्यान केंद्रित करना
1271
समर्थक

पायथन 2.x.x और पायथन 3.x.x के बीच परिवर्तन और पायथन 2.x.x को पायथन 3.x.x में कैसे परिवर्तित करें

में बनाया: 2016-10-09 12:36:49, को अपडेट: 2017-10-11 10:18:05
comments   2
hits   5325

python2 और python3 के सिंटैक्स में अंतर और बदलाव

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

  • #### print वाक्य

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

Notes Python 2 Python 3
print 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:
  1. सरल तुलना
  2. तीन अपेक्षाकृत जटिल मानों के बीच तुलना।
  • #### शब्दकोश विधि has_key()

पायथन 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)
  1. सबसे सरल रूप 2। ऑपरेटर or की प्राथमिकता ऑपरेटर in से कम है, इसलिए यहां कोष्ठक जोड़ने की आवश्यकता नहीं है। 3। दूसरी ओर, उसी कारण से, or को in से कम प्राथमिकता दी जाती है, और यहां कोष्ठक जोड़ने की आवश्यकता होती है। ध्यान देंः यहां कोड पिछले पंक्ति से पूरी तरह से अलग है। पायथन पहले x या y को व्याख्या करेगा, परिणाम प्राप्त करेगा x ((यदि x बुल पर संदर्भ में सही है) या y। फिर पायथन जांचता है कि क्या परिणाम a है_dictionary की एक कुंजी ) 4। ऑपरेटर in की प्राथमिकता ऑपरेटर + से कम है, इसलिए कोड में इस रूप को तकनीकी रूप से कोष्ठक की आवश्यकता नहीं है, लेकिन 2to3 जोड़ा गया है।
  2. इस प्रकार के प्रारूप को कोष्ठक की आवश्यकता होती है, क्योंकि in की प्राथमिकता + से कम है
  • #### शब्दकोश श्रेणी विधि जो सूची को लौटाता है

पायथन 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 तक, मानक कुरी में कुछ मॉड्यूल का नाम बदल दिया गया है। कुछ अन्य संबंधित मॉड्यूल को गठबंधन या पुनर्गठित किया गया है ताकि यह संबंध अधिक तार्किक हो सके।

  • http पायथन 3 में, कई संबंधित एचटीटीपी मॉड्यूल एक अलग पैकेज में गठित किए गए हैं, http
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 सर्वर को लागू करता है

  • urllib पायथन 2 में कुछ मॉड्यूल हैं जो यूआरएल का विश्लेषण, एन्कोडिंग और एक्सेस करते हैं, लेकिन ये मॉड्यूल एक दूसरे पर एक माउस कॉर्ड की तरह ओवरलैप करते हैं। पायथन 3 में, इन मॉड्यूलों को एक अलग पैकेज, urllib, में पुनर्गठित किया गया है।
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())
  • dbm सभी डीबीएम क्लोन अब एक अलग पैकेज, डीबीएम में हैं। यदि आपको इनमें से किसी विशेष संस्करण की आवश्यकता है, जैसे कि जीएनयूडीबीएम, तो आप डीबीएम पैकेज में उपयुक्त मॉड्यूल आयात कर सकते हैं।
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
  • xmlrpc XML-RPC HTTP प्रोटोकॉल के माध्यम से रिमोट RPC कॉल करने के लिए एक हल्के-स्तर का तरीका है। कुछ XML-RPC क्लाइंट और XML-RPC सर्वर-एंड कार्यान्वयन पुस्तकालयों को अब एक अलग पैकेज में जोड़ा गया है, xmlrpc।
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
  1. Python 2 में, आप आमतौर पर ऐसा करते हैं, पहले cStringIO को StringIO के विकल्प के रूप में आयात करने का प्रयास करें, और यदि यह विफल रहता है, तो StringIO को आयात करें। Python 3 में ऐसा न करें; io मॉड्यूल आपको इस मामले में मदद करेगा। यह सबसे तेज़ उपलब्ध कार्यान्वयन का पता लगाएगा और फिर इसे स्वचालित रूप से उपयोग करेगा।
  2. पायथन 2 में, सबसे तेज़ पिकल कार्यान्वयन को आयात करना भी एक उपयोगी तरीका है, जैसा कि ऊपर बताया गया है। पायथन 3 में, पिकल मॉड्यूल आपके लिए इसे स्वचालित रूप से संभालता है, इसलिए ऐसा न करें।
  3. Builtins मॉड्यूल में वैश्विक फ़ंक्शंस, कक्षाएं और स्थिरांक शामिल हैं जो पूरे पायथन में उपयोग किए जाते हैं। Builtins मॉड्यूल में एक फ़ंक्शन को फिर से परिभाषित करने का मतलब है कि यह वैश्विक फ़ंक्शन हर जगह फिर से परिभाषित किया गया है। यह शक्तिशाली लगता है, लेकिन यह भी डरावना है।
  4. कॉपीरेग मॉड्यूल ने C भाषा में परिभाषित उपयोगकर्ता कस्टम प्रकारों के लिए पिकल मॉड्यूल का समर्थन जोड़ा है।
  5. क्यू मॉड्यूल एक उत्पादक-उपभोक्ता कतार (बहु-उत्पादक, बहु-उपभोक्ता कतार) को लागू करता है। 6। socketserver मॉड्यूल विभिन्न प्रकार के सॉकेट सर्वर को लागू करने के लिए एक सामान्य बुनियादी वर्ग प्रदान करता है। 7। configparser मॉड्यूल का उपयोग आईएनआई-स्टाइल कॉन्फ़िगरेशन फ़ाइलों को पार्स करने के लिए किया जाता है। 8, reprlib मॉड्यूल ने अंतर्निहित फ़ंक्शन repr (() को फिर से लागू किया और स्ट्रिंग को काटने से पहले लंबाई के लिए नियंत्रण जोड़ा।
  6. 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
  1. जब आपको पैकेज के अन्य हिस्सों से पूरे मॉड्यूल को आयात करने की आवश्यकता होती है, तो नए from.import सिंटैक्स का उपयोग करें। यहाँ वाक्य संख्या (((.) वर्तमान फ़ाइल (universaldetector.py) और उस फ़ाइल (constants.py) के बीच के सापेक्ष पथ को दर्शाता है जिसे आप आयात करना चाहते हैं। इस उदाहरण में, ये दोनों फाइलें एक ही निर्देशिका में हैं, इसलिए एक एकल वाक्य संख्या का उपयोग किया गया है। आप इसे मूल निर्देशिका (((from .. import anothermodule) या उप-निर्देशिकाओं से भी आयात कर सकते हैं।
  2. किसी विशेष वर्ग या फ़ंक्शन को अन्य मॉड्यूल से सीधे आपके मॉड्यूल के नामस्थान में आयात करने के लिए, आयात किए जाने वाले मॉड्यूल नाम में सापेक्ष पथ जोड़ें और अंतिम स्लैश को हटा दें। इस उदाहरण में, mbcharsetprober.py और universaldetector.py एक ही निर्देशिका में हैं, इसलिए सापेक्ष पथ का नाम एक वाक्य संख्या है। आप इसे मूल निर्देशिका से भी आयात कर सकते हैं।
  • #### Next ()

पायथन 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)
  • #### exec कथन

जैसा कि प्रिंट कथन पायथन 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,