1. Cú Pháp In

Python 2 sử dụng cú pháp in như một câu lệnh:

print "Hello, World!"  # Cú pháp in cũ

Trong khi đó, Python 3 xem print như một hàm:

print("Hello, World!")  # Cú pháp in mới

2. Quản Lý Chuỗi

Trong Python 2, có hai kiểu chuỗi: chuỗi byte (str) và chuỗi Unicode (unicode). Mặc định, chuỗi được coi là chuỗi byte:

my_string = "Hello"  # Chuỗi byte
my_unicode_string = u"Hello"  # Chuỗi Unicode

Còn trong Python 3, chuỗi str được coi là Unicode, và bytes được sử dụng cho chuỗi byte:

my_string = "Hello"  # Chuỗi Unicode
my_bytes = b"Hello"  # Chuỗi byte

3. Tính Toán Số Học

Trong Python 2, phép chia giữa hai số nguyên trả về một số nguyên. Để có kết quả số thực, bạn cần ép kiểu ít nhất một trong hai số:

result = 5 / 2  # Kết quả: 2
result_float = 5.0 / 2  # Kết quả: 2.5

Ngược lại, trong Python 3, phép chia giữa hai số nguyên trả về số thực. Để lấy phần nguyên, bạn phải sử dụng //:

result = 5 / 2  # Kết quả: 2.5
result_integer = 5 // 2  # Kết quả: 2

4. Xử Lý Lỗi

Trong Python 2, cú pháp xử lý lỗi sử dụng as không bắt buộc:

try:
    # code
except Exception, e:
    print e

Còn trong Python 3, cú pháp xử lý lỗi yêu cầu sử dụng as:

try:
    # code
except Exception as e:
    print(e)

5. Iterators và Generators

Trong Python 2, hàm range() trả về một danh sách:

numbers = range(5)  # Trả về [0, 1, 2, 3, 4]

Trong Python 3, hàm range() trả về một iterator, giúp tiết kiệm bộ nhớ hơn:

numbers = range(5)  # Trả về một iterator

6. Thư Viện Mặc Định

Nhiều thư viện được cập nhật hoặc thay đổi giữa hai phiên bản:

Trong Python 2, một số thư viện không còn được hỗ trợ trong Python 3.

Còn trong Python 3, nhiều thư viện và module được cải thiện, và một số được loại bỏ hoàn toàn.

7. Chuỗi Định Dạng

Trong Python 2, bạn có thể sử dụng % để định dạng chuỗi:

name = "Alice"
greeting = "Hello, %s!" % name  # Kết quả: "Hello, Alice!"

Còn trong Python 3, có nhiều cách để định dạng chuỗi, bao gồm f-strings (Python 3.6 trở đi):

name = "Alice"
greeting = f"Hello, {name}!"  # Kết quả: "Hello, Alice!"

8. Hỗ Trợ Kết Nối

Trong Python 2, hỗ trợ kết nối (byte) hạn chế.

Trong khi đó, Python 3 cung cấp hỗ trợ tốt hơn cho các loại dữ liệu nhị phân và mã hóa.

Kết Luận

Việc chuyển từ Python 2 sang Python 3 không chỉ đơn thuần là cập nhật cú pháp mà còn mang lại nhiều cải tiến về hiệu suất, khả năng mở rộng và khả năng xử lý Unicode. Python 3 hiện nay là phiên bản được khuyến nghị cho tất cả các dự án mới, và việc sử dụng Python 2 đã không còn được hỗ trợ chính thức. Nếu bạn đang bắt đầu một dự án mới, hãy sử dụng Python 3 để tận dụng những cải tiến và tính năng mới nhất.