Có gì mới trong Python 3

Mô-đun __future__

Python 3.x đã giới thiệu một số từ khóa và tính năng không tương thích với Python 2 có thể được nhập qua mô-đun __future__ được tích hợp sẵn trong Python 2. Bạn nên sử dụng nhập __future__, nếu bạn đang lập kế hoạch hỗ trợ Python 3.x cho mã của mình.

Ví dụ: nếu chúng ta muốn hành vi chia số nguyên của Python 3.x trong Python 2, hãy thêm câu lệnh nhập sau.

from __future__ import division

Chức năng in

Thay đổi đáng chú ý nhất và được biết đến rộng rãi nhất trong Python 3 là cách printchức năng được sử dụng. Việc sử dụng dấu ngoặc đơn () với hàm in hiện là bắt buộc. Nó là tùy chọn trong Python 2.

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

Theo mặc định, hàm print () sẽ chèn một dòng mới vào cuối. Trong Python 2, nó có thể bị chặn bằng cách đặt ',' vào cuối. Trong Python 3, "end = ''" thêm dấu cách thay vì dòng mới.

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

Đọc đầu vào từ bàn phím

Python 2 có hai phiên bản hàm đầu vào, input()raw_input(). Hàm input () xử lý dữ liệu nhận được dưới dạng chuỗi nếu nó được bao gồm trong dấu ngoặc kép '' hoặc "", nếu không, dữ liệu được coi là số.

Trong Python 3, hàm raw_input () không được dùng nữa. Hơn nữa, dữ liệu nhận được luôn được coi là chuỗi.

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

Phân chia số nguyên

Trong Python 2, kết quả của phép chia hai số nguyên được làm tròn thành số nguyên gần nhất. Kết quả là, 3/2 sẽ hiển thị 1. Để có được phép chia dấu phẩy động, tử số hoặc mẫu số phải được sử dụng rõ ràng như float. Do đó, 3.0 / 2 hoặc 3 / 2.0 hoặc 3.0 / 2.0 sẽ dẫn đến 1.5

Python 3 đánh giá 3/2 là 1.5 theo mặc định, điều này trực quan hơn cho các lập trình viên mới.

Biểu diễn Unicode

Python 2 yêu cầu bạn đánh dấu một chuỗi bằng au nếu bạn muốn lưu trữ nó dưới dạng Unicode.

Python 3 lưu trữ các chuỗi dưới dạng Unicode, theo mặc định. Chúng ta có chuỗi Unicode (utf-8) và 2 lớp byte: mảng byte và mảng byte.

xrange () Hàm đã bị loại bỏ

Trong Python 2, phạm vi () trả về một danh sách và xrange () trả về một đối tượng sẽ chỉ tạo các mục trong phạm vi khi cần thiết, tiết kiệm bộ nhớ.

Trong Python 3, hàm range () bị loại bỏ và xrange () đã được đổi tên thành range (). Ngoài ra, đối tượng range () hỗ trợ cắt trong Python 3.2 trở lên.

nêu ra ngoại lệ

Python 2 chấp nhận cả hai ký hiệu, cú pháp 'cũ' và 'mới'; Python 3 gây ra lỗi SyntaxError nếu chúng ta không đặt đối số ngoại lệ trong dấu ngoặc đơn.

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

Đối số trong trường hợp ngoại lệ

Trong Python 3, các đối số cho ngoại lệ phải được khai báo bằng từ khóa 'as'.

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

Hàm next () và phương thức .next ()

Trong Python 2, next () như một phương thức của đối tượng trình tạo, được phép. Trong Python 2, hàm next (), để lặp qua đối tượng trình tạo, cũng được chấp nhận. Tuy nhiên, trong Python 3, tiếp theo (0 làm phương thức trình tạo bị ngừng và tăngAttributeError.

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

Tiện ích 2to3

Cùng với trình thông dịch Python 3, tập lệnh 2to3.py thường được cài đặt trong thư mục công cụ / tập lệnh. Nó đọc mã nguồn Python 2.x và áp dụng một loạt trình sửa lỗi để biến nó thành mã Python 3.x hợp lệ.

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)