มีอะไรใหม่ใน 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)