มีอะไรใหม่ใน Python 3

โมดูล __future__

Python 3.x แนะนำคีย์เวิร์ดและฟีเจอร์ที่เข้ากันไม่ได้กับ Python 2 ซึ่งสามารถนำเข้าผ่านโมดูล __future__ ในตัวใน Python 2 ขอแนะนำให้ใช้การนำเข้า __future__ หากคุณกำลังวางแผนรองรับ Python 3.x สำหรับโค้ดของคุณ

ตัวอย่างเช่นหากเราต้องการให้ Python 3.x มีพฤติกรรมการหารจำนวนเต็มใน Python 2 ให้เพิ่มคำสั่งนำเข้าต่อไปนี้

from __future__ import division

ฟังก์ชันการพิมพ์

การเปลี่ยนแปลงที่น่าสังเกตและเป็นที่รู้จักมากที่สุดใน Python 3 คือวิธีที่ printใช้ฟังก์ชัน ตอนนี้จำเป็นต้องใช้วงเล็บ () กับฟังก์ชันการพิมพ์ เป็นทางเลือกใน Python 2

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

ฟังก์ชัน print () จะแทรกบรรทัดใหม่ที่ส่วนท้ายตามค่าเริ่มต้น ใน Python 2 สามารถระงับได้โดยใส่ ',' ที่ส่วนท้าย ใน Python 3 "end = ''" ต่อท้ายช่องว่างแทนการขึ้นบรรทัดใหม่

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

การอ่านข้อมูลจากแป้นพิมพ์

Python 2 มีฟังก์ชันอินพุตสองเวอร์ชัน input() และ raw_input(). ฟังก์ชัน input () จะถือว่าข้อมูลที่ได้รับเป็นสตริงหากรวมอยู่ในเครื่องหมายคำพูด '' หรือ "" มิฉะนั้นข้อมูลจะถือว่าเป็นตัวเลข

ใน Python 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

กองจำนวนเต็ม

ใน Python 2 ผลลัพธ์ของการหารจำนวนเต็มสองจำนวนจะถูกปัดเศษเป็นจำนวนเต็มที่ใกล้เคียงที่สุด ด้วยเหตุนี้ 3/2 จะแสดง 1 เพื่อให้ได้การหารทศนิยมต้องใช้ตัวเศษหรือตัวส่วนเป็นทศนิยมอย่างชัดเจน ดังนั้น 3.0 / 2 หรือ 3 / 2.0 หรือ 3.0 / 2.0 จะได้ผล 1.5

Python 3 จะประเมิน 3/2 เป็น 1.5 โดยค่าเริ่มต้นซึ่งง่ายกว่าสำหรับโปรแกรมเมอร์มือใหม่

การเป็นตัวแทนของ Unicode

Python 2 ต้องการให้คุณทำเครื่องหมายสตริงด้วย au หากคุณต้องการจัดเก็บเป็น Unicode

Python 3 เก็บสตริงเป็น Unicode ตามค่าเริ่มต้น เรามีสตริง Unicode (utf-8) และคลาส 2 ไบต์: ไบต์และไบต์อาร์เรย์

xrange () ฟังก์ชันถูกลบออก

ใน Python 2 range () ส่งคืนรายการและ xrange () ส่งคืนอ็อบเจ็กต์ที่จะสร้างเฉพาะรายการในช่วงเมื่อจำเป็นเท่านั้นซึ่งจะช่วยประหยัดหน่วยความจำ

ใน Python 3 ฟังก์ชัน range () จะถูกลบออกและ xrange () ถูกเปลี่ยนชื่อเป็น range () นอกจากนี้ออบเจ็กต์ range () ยังรองรับการแบ่งส่วนใน Python 3.2 และใหม่กว่า

เพิ่มข้อยกเว้น

Python 2 ยอมรับทั้งสองสัญกรณ์ไวยากรณ์ 'เก่า' และ 'ใหม่' Python 3 เพิ่ม SyntaxError ถ้าเราไม่ใส่อาร์กิวเมนต์ข้อยกเว้นไว้ในวงเล็บ

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

อาร์กิวเมนต์ในข้อยกเว้น

ใน Python 3 อาร์กิวเมนต์ถึงข้อยกเว้นควรประกาศด้วยคีย์เวิร์ด 'as'

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

next () ฟังก์ชันและ .next () วิธีการ

ใน Python 2, next () เป็นวิธีการสร้างวัตถุได้รับอนุญาต ใน Python 2 ยังยอมรับฟังก์ชัน next () เพื่อวนซ้ำบนวัตถุตัวสร้าง อย่างไรก็ตามใน Python 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 ยูทิลิตี้

พร้อมกับล่าม Python 3 สคริปต์ 2to3.py มักจะติดตั้งในโฟลเดอร์ tools / scripts มันอ่านซอร์สโค้ด Python 2.x และใช้ชุดตัวแก้ไขเพื่อแปลงเป็นรหัส Python 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)