Nên chọn Python 2 hay Python 3 để bắt đầu?

Post by dangsonbk on 23-08-2018

Last update: 23-08-2018

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 (giống giống Linux ^^). 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.

Ở thời điểm bài viết được update, cá nhân mình cho rằng bạn nên bắt đầu luôn với Python 3, trừ những trường hợp bất khả kháng đã liệt kê ở trê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:

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)

print "Python 2"     # Python 2 only
print("Python 3")
print("Foo", end='')

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:

# https://hackaday.com/2018/08/15/stop-using-python-2-what-you-need-to-know-about-python-3/
person = ("Steve", "Hammond", 34, "England", "spaces")
name, surname, age, country, indent_pref = person

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:

# https://hackaday.com/2018/08/15/stop-using-python-2-what-you-need-to-know-about-python-3/
person = ("Steve", "Hammond", 34, "England", "spaces")
name, *misc, indent_pref = person
# These would also work
name, surname, age, *misc = person
*misc, indent_pref = person

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:

>>> 3/2
1.5

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

>>> 1 / 3
0
>>> 5 / 2
2

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à:


Cover image credit: learntocodewith.me

Tham khảo:

tags: python2, python3