पायथन 3 में नया क्या है

__Future__ मॉड्यूल

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

उदाहरण के लिए, यदि हम Python 2 में Python 3.x का पूर्णांक विभाजन व्यवहार चाहते हैं, तो निम्न आयात विवरण जोड़ें।

from __future__ import division

प्रिंट समारोह

पायथन 3 में सबसे उल्लेखनीय और सबसे व्यापक रूप से ज्ञात परिवर्तन है कि कैसे printफ़ंक्शन का उपयोग किया जाता है। प्रिंट फ़ंक्शन के साथ कोष्ठक () का उपयोग अब अनिवार्य है। यह पायथन 2 में वैकल्पिक था।

print "Hello World" #is acceptable in Python 2
print ("Hello World") # in Python 3, print must be followed by ()

प्रिंट () फ़ंक्शन डिफ़ॉल्ट रूप से, अंत में एक नई लाइन सम्मिलित करता है। पायथन 2 में, अंत में ',' लगाकर इसे दबाया जा सकता है। पायथन 3 में, "एंड = ''" न्यूलाइन की जगह स्पेस देता है।

print x,           # Trailing comma suppresses newline in Python 2
print(x, end=" ")  # Appends a space instead of a newline in Python 3

कीबोर्ड से इनपुट पढ़ना

पायथन 2 में इनपुट फ़ंक्शंस के दो संस्करण हैं, input() तथा raw_input()। इनपुट () फ़ंक्शन प्राप्त डेटा को स्ट्रिंग के रूप में मानता है यदि यह उद्धरण '' या "" में शामिल है, अन्यथा डेटा को संख्या के रूप में माना जाता है।

पायथन 3 में, raw_input () फ़ंक्शन को हटा दिया गया है। इसके अलावा, प्राप्त डेटा को हमेशा स्ट्रिंग के रूप में माना जाता है।

In Python 2

>>> x = input('something:') 
something:10 #entered data is treated as number
>>> x
10

>>> x = input('something:')
something:'10' #entered data is treated as string
>>> x
'10'

>>> x = raw_input("something:")
something:10 #entered data is treated as string even without ''
>>> x
'10'

>>> x = raw_input("something:")
something:'10' #entered data treated as string including ''
>>> x
"'10'"

In Python 3

>>> x = input("something:")
something:10
>>> x
'10'

>>> x = input("something:")
something:'10' #entered data treated as string with or without ''
>>> x
"'10'"

>>> x = raw_input("something:") # will result NameError
Traceback (most recent call last):
   File "<pyshell#3>", line 1, in 
  <module>
   x = raw_input("something:")
NameError: name 'raw_input' is not defined

इंटेगर डिवीजन

पायथन 2 में, दो पूर्णांकों के विभाजन का परिणाम निकटतम पूर्णांक तक होता है। परिणामस्वरूप, 3/2 दिखाएगा 1. फ्लोटिंग-पॉइंट डिवीजन प्राप्त करने के लिए, अंश या हर को स्पष्ट रूप से फ्लोट के रूप में उपयोग किया जाना चाहिए। इसलिए, या तो 3.0 / 2 या 3 / 2.0 या 3.0 / 2.0 का परिणाम 1.5 होगा

पायथन 3 डिफ़ॉल्ट रूप से 3/2 को 1.5 के रूप में मूल्यांकन करता है, जो नए प्रोग्रामर के लिए अधिक सहज है।

यूनिकोड प्रतिनिधित्व

यदि आप इसे यूनिकोड के रूप में संग्रहीत करना चाहते हैं, तो पायथन 2 को आपको एक स्ट्रिंग को au के साथ चिह्नित करना होगा।

पायथन 3 डिफ़ॉल्ट रूप से यूनिकोड के रूप में तार संग्रहीत करता है। हमारे पास यूनिकोड (utf-8) स्ट्रिंग्स और 2 बाइट कक्षाएं हैं: बाइट और बाइट सरणियाँ।

xrange () फ़ंक्शन निकाला गया

पायथन 2 रेंज में () एक सूची देता है, और xrange () एक ऑब्जेक्ट देता है जो केवल मेमोरी में बचत करने पर आवश्यक सीमा में आइटम उत्पन्न करेगा।

पायथन 3 में, श्रेणी () फ़ंक्शन को हटा दिया गया है, और xrange () का नाम बदलकर रेंज () कर दिया गया है। इसके अलावा, रेंज () ऑब्जेक्ट पायथन 3.2 और बाद में स्लाइसिंग का समर्थन करता है।

अपवाद उठाना

अजगर 2 दोनों धारणाओं को स्वीकार करता है, 'पुराना' और 'नया' वाक्य रचना; यदि हम कोष्ठक में अपवाद तर्क को शामिल नहीं करते हैं, तो पायथन 3 एक सिंटेक्सऑयर को उठाता है।

raise IOError, "file error" #This is accepted in Python 2
raise IOError("file error") #This is also accepted in Python 2
raise IOError, "file error" #syntax error is raised in Python 3
raise IOError("file error") #this is the recommended syntax in Python 3

अपवादों में तर्क

पायथन 3 में, अपवाद को 'कीवर्ड' के रूप में घोषित किया जाना चाहिए।

except Myerror, err: # In Python2
except Myerror as err: #In Python 3

अगला () फ़ंक्शन .next () विधि

पाइथन 2 में, जेनरेटर ऑब्जेक्ट की एक विधि के रूप में अगला () की अनुमति है। पायथन 2 में, जनरेटर ऑब्जेक्ट पर पुनरावृति करने के लिए अगला () फ़ंक्शन भी स्वीकार किया जाता है। पाइथन 3 में, हालांकि, अगले (0 के रूप में एक जनरेटर विधि बंद हो जाती है और उठती हैAttributeError

gen = (letter for letter in 'Hello World') # creates generator object
next(my_generator) #allowed in Python 2 and Python 3
my_generator.next() #allowed in Python 2. raises AttributeError in Python 3

2to3 उपयोगिता

पायथन 3 इंटरप्रेटर के साथ, 2to3.py स्क्रिप्ट आमतौर पर टूल / स्क्रिप्ट फ़ोल्डर में स्थापित होती है। यह पायथन 2.x स्रोत कोड पढ़ता है और इसे एक वैध पायथन 3.x कोड में बदलने के लिए फिक्सर की एक श्रृंखला लागू करता है।

Here is a sample Python 2 code (area.py):

def area(x,y = 3.14): 
   a = y*x*x
   print a
   return a

a = area(10)
print "area",a

To convert into Python 3 version:

$2to3 -w area.py

Converted code :

def area(x,y = 3.14): # formal parameters
   a = y*x*x
   print (a)
   return a

a = area(10)
print("area",a)