Nhiều người dùng Python có thể sẽ tự hỏi mình nên bắt đầu phiên bản Python nào? Và tất nhiên câu trả lời thường là ta hãy cứ dùng cái nào quen thuộc trước, sau đó tìm hiểu xem sự khác biệt giữa các phiên bản với nhau như thế chẳng phải sẽ thú vị hơn sao? Cả Python 2.x và Python 3.x đều có các thư viện hỗ trợ mà bạn dự định sử dụng. Tuy nhiên, bạn nên xem xét sự khác biệt chính giữa hai phiên bản phổ biến nhất của Python này để tránh những lỗi phổ biến khi viết code, và cũng là những chú ý để nhận biết dự án của bạn sử dụng phiên bản python nào?

Tại sao lại có 2 phiên bản?

wiki.python.org đã có một bài viết rất chi tiết về sự khác biệt giữa 2 phiên bản Python, mỗi phiên bản đều có những ưu điểm so với phiên bản kia, tuy nhiên, bài viết cũng đưa ra một kết luận:

“Python 2.x is legacy, Python 3.x is the present and future of the language”.

Có thể hiểu rằng Python 3.x được thiết kế để trở thành tương lai của ngôn ngữ này. Tuy nhiên Python 2.x đã được cộng đồng tin dùng tới mức có lẽ phải mất khá nhiều thời gian nữa để Python 3.x có thể hoàn toàn thay thế được người đàn anh “legacy”.

Để hiểu rõ hơn về câu chuyện Python 2&3 này, chúng ta sẽ bắt đầu một chút từ lịch sử của Python. Được phát triển từ cuối những năm 1980 và lần đầu tiên được biết đến rộng rãi vào năm 1991, cha đẻ của Python Guido van Rossum đã tạo ra ngôn ngữ này khi mà ông ấy quá rảnh rỗi trong dịp giáng sinh. Từ thời điểm diễn đàn về Python (comp.lang.python) được mở ra trên Usenet vào năm 1994, Python đã nhanh chóng trở thành một trong những ngôn ngữ phổ biến nhất trong cộng đồng lập trình viên mã nguồn mở.

Có lẽ bắt đầu từ việc chưa hài lòng với một phiên bản ngôn ngữ được thiết kế hơi lộn xộn trong lúc “rảnh rỗi”, Guido van Rossum luôn muốn dọn dẹp Python 2.x cho đẹp đẽ và ngăn nắp hơn qua nhiều phiên bản. Tuy nhiên việc phải luôn tương thích ngược với các phiên bản cũ hơn đã cản trở những nâng cấp toàn diện của ngôn ngữ này, bao gồm cả việc tăng hiệu suất, thêm tính năng cũng như thay đổi cú pháp …

Python3.x được tạo ra như một rẽ nhánh mới và không tương thích với phiên bản cũ. Phiên bản đầu tiên của Python 3.x được phát hành vào 2008, phiên bản cuối cùng của Python 2.x (Python 2.7) được phát hành vào giữa năm 2010, đây được coi là phiên bản kết thúc của Python 2.x, từ sau phiên bản này không có thêm cập nhật lớn nào nữa cho Python 2.x.

Trong khi đó, Python 3.x vẫn được tiếp tục phát triển và hoàn thiện, nhiều phiên bản ổn định đã được phát hành bao gồm: v3.3 (2012), v3.4 (2014), v3.5 (2015), v3.7 (2017).

Nên sử dụng phiên bản nào?

Tùy vào mục đích sử dụng cũng như môi trường chạy chương trình của bạn.

Trong trường hợp bạn không thể update lên Python 3.x (khi bạn làm việc với một server đang chạy ổn định Python 2.x chẳng hạn), hoặc khi một thư viện nào đó quan trọng chưa hỗ trợ Python 3.x, đó là khi bạn sử dụng Python 2.x

Trong trường hợp bạn muốn sử dụng những tính năng mới của Python 3.x (dĩ nhiên), thì tại sao bạn lại không thử “future of Python”.

Nói tóm gọn, Python 2.x có thư viện và cộng đồng, Python 3.x có tương lai.

Nếu để ra lựa chọn cho người mới bắt đầu, thì hiển nhiên rồi Python 3 sẽ có lợi thế hơn. Trên thực tế thì số lượng thư viện hỗ trợ Python 3 đã rất nhiều rồi, số còn lại thường là các thư viện lỗi thời, ít người dùng hoặc không được duy trì phát triển nữa.

Python 2.x có phải đã quá cũ và nhiều lỗi?

Không hẳn, rất nhiều cải tiến của Python 3.x đã được cập nhật ngược lại cho phiên bản Python 2.x (Python 2.6, Python 2.7). Về cơ bản, nếu bạn viết script tốt thì sẽ không có nhiều khác biệt khi sử dụng Python 2.x và Python 3.x.

Python 2 và 3, những điểm khác biệt cần chú ý

Khác biệt giữa Python 2 và 3 không phải chỉ là về mặt cú pháp, có rất nhiều thay đổi ở bên trong giúp cho Python trở thành ngôn ngữ “tốt hơn” qua từng phiên bản. Mình sẽ chỉ liệt kê một số khác biệt thường gặp và dễ thấy nhất ở phần bên dưới. Trong trường hợp bạn cần nâng cấp từ Python 2 lên Python 3, hãy thử những tool dưới đây:

  • 2to3 Cho phép convert code từ Python 2 sang Python 3, dĩ nhiên không chắc chắn được code của bạn sẽ chạy nguyên xi do vấn đề thư viện cũng như nhiều vấn đề phức tạp khác.
  • caniusepython3 Kiểm tra xem code của bạn có thể chuyển lên Python 3 được không bằng cách kiểm tra xem thư viện được sử dụng có hỗ trợ Python 3 hay không.

Print

Ở phiên bản Python 2.x, print là từ khóa, trong khi đó ở Python 3.x, print là một hàm. Cách sử dụng cũng có đôi chút thay đổi (thêm ngoặc đơn)

Unpacking dữ liệu linh hoạt hơn

Giả sử chúng ta có 1 tuple, ở Python 2, có thể unpack dữ liệu trong tuple đó như sau:

Tuy nhiên trong nhiều trường hợp chúng ta chỉ quan tâm đến phần tử đầu và cuối của tuple đó, Python 3 cho phép unpack tuple một cách linh hoạt hơn:

Cách unpacking mới này giúp ích rất nhiều khi làm việc với những tuple dài.

Phép chia

Mặc định phép chia trong Python 3 sẽ trả về dữ liệu kiểu float:

Còn trong Python 2 thì là kiểu Integer:

Một số khác biệt khác

Trên đây chỉ là một số khách biệt cơ bản và thường gặp, mọi người có thể tìm hiểu thêm danh sách chi tiết hơn ở các đường dẫn tham khảo ngay bên dưới bài viết này. Một số thay đổi khác có thể kể đến đó là:

  • input(), raw_input().
  • Xử lý chuỗi các sự kiện exceptions
  • Đường dẫn import
  • Unicode and bytes
  • asyncio
  • Trong Python 3, rất nhiều hàm như zip()map() … sẽ trả về iterator thay vì list.

Nguồn tham khảo:

  1. Cuccode.com
  2. Python 2 vs Python 3: Practical Considerations
  3. Should I use Python 2 or Python 3 for my development activity?
  4. WHAT SHOULD I LEARN AS A BEGINNER: PYTHON 2 OR PYTHON 3?

 

Author: Bùi Đức Thịnh

Đăng ký nhận bộ tài liệu kỹ năng dành cho lập trình viên (video hướng dẫn + slide) tại đây

Tìm hiểu thêm về mô hình Coding Bootcamp tại đây


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.