Computer >> Máy Tính >  >> Lập trình >> Python

Sự khác biệt giữa Python 2.x và Python 3.x?

Luôn có một cuộc tranh luận trong cộng đồng mã hóa về việc phiên bản python nào là tốt nhất để học:Python 2.x hay Python 3.x.

Dưới đây là những điểm khác biệt chính giữa pyton 2.x và python 3.x

1. Chức năng in

Trong python 2.x, “print” được coi là một câu lệnh và python 3.x xử lý rõ ràng “print” như một hàm. Điều này có nghĩa là chúng tôi cần chuyển các mục bên trong bản in của bạn vào dấu ngoặc đơn của hàm theo cách tiêu chuẩn, nếu không bạn sẽ gặp lỗi cú pháp.

 #Python 2.7print 'Python', python_version () print 'Hello, World!' print ('Hello, World!') print "text",; in 'thêm một số văn bản ở đây' 

Đầu ra

 Python 2.7.6Hello, World! Hello, World! text in thêm một số văn bản tại đâyPython 3import sysprint ("Phiên bản Python là% s.% s.% s"% sys.version_info [:3]) print ('Xin chào, World! ') Print ("some text,", end ="") print (' some more text here ') 

Đầu ra

 Phiên bản Python là 3.6.1. 

2. Phép chia số nguyên

Python 2 xử lý các số bạn nhập mà không có bất kỳ chữ số nào sau dấu thập phân là số nguyên, điều này có thể dẫn đến một số kết quả không mong muốn trong quá trình chia. Ví dụ:nếu bạn nhập biểu thức 3/2 bằng mã Python 2, kết quả đánh giá sẽ là 1, không phải 1,5 như bạn mong đợi. Bạn nên sử dụng float (x) thay vì chỉ sử dụng x trong mã python 3 của bạn (bao gồm cổng codebase thành python 2) hoặc sử dụng từ phân chia nhập __future__ trong tập lệnh python 2 của bạn.

#Python 2

 print 'Python', python_version () print '3/2 =', 3 / 2print '3 // 2 =', 3 // 2print '3 / 2.0 =', 3 / 2.0print '3 // 2.0 =', 3 // 2.0 

Đầu ra

 Python 2.7.63 / 2 =13 // 2 =13 / 2.0 =1.53 // 2.0 =1.0 

#Python 3.6.1

 import sysprint ('Python% s.% s.% s'% sys.version_info [:3]) print ('3/2 =', 3/2) print ('3 // 2 =', 3 // 2) print ('3 / 2.0 =', 3 / 2.0) print ('3 // 2.0 =', 3 // 2.0) 

Đầu ra

 Python 3.6.13 / 2 =1.53 // 2 =13 / 2.0 =1.53 // 2.0 =1.0 

3. Chuỗi Unicode

Theo mặc định, Python 3 lưu trữ các chuỗi dưới dạng Unicode trong khi Python 2 yêu cầu bạn đánh dấu một chuỗi bằng chữ “u” nếu bạn muốn lưu nó dưới dạng Unicode. Chuỗi Unicode linh hoạt hơn chuỗi ASCII, là chuỗi mặc định của Python 2, vì chúng có thể lưu trữ các chữ cái từ tiếng nước ngoài cũng như biểu tượng cảm xúc và các chữ cái và chữ số La Mã tiêu chuẩn.

#Python 2

>>> print type (unicode ('this like a python3 str type')) >>> print type (type b'byte khong tồn tại ') >>> in 'chúng thực sự giống nhau' + b 'giống nhau không chúng thực sự giống nhau 

#Python 3

 nhập sysprint ('Python% s.% s.% s'% sys.version_info [:3]) print ('các chuỗi hiện là utf-8 \ u03BCnico \ u0394é!') print ('Python% s.% s.% s '% sys.version_info [:3], end ="") print (' has ', type (b' bytes for storage data ')) print (' Python% s.% s.% s '% sys.version_info [:3], end ="") print ('also has', type (bytearray (b'bytearrays '))) 

Đầu ra

 Các chuỗi của Python 3.6.1 hiện là utf-8 μnicoΔé! Python 3.6.1 có  Python 3.6.1 cũng có  

"String" + b "byte dữ liệu" sẽ gặp lỗi.

>>> print ('chúng thực sự là' + b 'giống nhau') Traceback (lần gọi gần đây nhất):Tệp "", dòng 1, trong  print ('chúng thực sự là '+ b' giống nhau ') TypeError:phải là str, không phải byte 

4. Nâng cao ngoại lệ

Python 3 yêu cầu các cú pháp khác nhau để tăng các ngoại lệ. Nếu bạn muốn xuất thông báo lỗi cho người dùng, bạn cần sử dụng cú pháp -

 nâng IOError (“thông báo lỗi của bạn”) 

Cú pháp trên hoạt động trên cả python 2 và python 3.

Tuy nhiên, mã sau chỉ hoạt động trong python 2, không hoạt động trong python 3

 nêu ra IOError, “thông báo lỗi của bạn” 

5. Liệt kê các biến vòng lặp đọc hiểu

Trong python 2, việc đặt tên cho biến được lặp lại trong “vòng lặp for” giống với tên biến toàn cục có thể dẫn đến giá trị của biến toàn cục bị thay đổi - điều mà chúng tôi thường không muốn. Sự cố này đã được khắc phục trong Python 3, vì vậy bạn có thể sử dụng tên biến mà bạn đã sử dụng cho biến điều khiển trong “vòng lặp for” của mình mà không phải lo lắng về việc nó bị rò rỉ ra ngoài và gây nhầm lẫn với các giá trị của các biến trong phần còn lại của mã của bạn.

 #Python 2print 'Python', python_version () i =1print 'before:i =', iprint 'hieu:', [i for i in range (5)] print 'after:i =', i  

Đầu ra

 Python 2.7.6before:i =1compilities:[0, 1, 2, 3, 4] after:i =4 

#Python 3

 import sysprint ('Python% s.% s.% s'% sys.version_info [:3]) i =1print ('before:i =', i) print ('hieu:', [i for i trong phạm vi (5)]) print ('sau:i =', i) 

Đầu ra

 Python 3.6.1before:i =1compilities:[0, 1, 2, 3, 4] after:i =1