Thứ tư, 17/08/2016 | 00:00 GMT+7

Python 2 và Python 3: Cân nhắc thực tế

Python là một ngôn ngữ lập trình cực kỳ dễ đọc và linh hoạt. Với cái tên lấy cảm hứng từ group hài Monty Python của Anh, đó là mục tiêu cơ bản quan trọng của group phát triển Python là làm cho ngôn ngữ này trở nên thú vị khi sử dụng. Dễ cài đặt và được viết theo phong cách tương đối đơn giản với phản hồi ngay lập tức về lỗi, Python là một lựa chọn tuyệt vời cho người mới bắt đầu.

Vì Python là một ngôn ngữ đa ký tự - nghĩa là, nó hỗ trợ nhiều kiểu lập shell gồm cả tập lệnh và hướng đối tượng - nó rất tốt cho mục đích sử dụng chung. Ngày càng được sử dụng nhiều trong ngành công nghiệp bởi các tổ chức như United Space Alliance (nhà thầu hỗ trợ tàu con thoi chính của NASA) và Industrial Light & Magic (VFX và studio hoạt hình của Lucasfilm), Python cung cấp rất nhiều tiềm năng cho những người muốn học thêm một ngôn ngữ lập trình .

Được phát triển vào cuối những năm 1980 và xuất bản lần đầu tiên vào năm 1991, Python được tạo ra bởi Guido van Rossum, người vẫn rất tích cực trong cộng đồng. Được coi là kế thừa của ngôn ngữ lập trình ABC, lần lặp đầu tiên của Python đã bao gồm xử lý ngoại lệ, các hàmcác lớp có tính kế thừa . Khi một diễn đàn thảo luận quan trọng của group tin Usenet có tên comp.lang.python được thành lập vào năm 1994, cơ sở user của Python đã tăng lên, mở đường cho Python trở thành một trong những ngôn ngữ lập trình phổ biến nhất để phát triển open-souce .

Tổng quan chung

Trước khi xem xét các cơ hội tiềm năng liên quan đến - và sự khác biệt chính về lập trình giữa - Python 2 và Python 3, ta hãy xem xét nền tảng của các bản phát hành chính gần đây của Python.

Python 2

Được xuất bản vào cuối năm 2000, Python 2 báo hiệu một quy trình phát triển ngôn ngữ minh bạch và toàn diện hơn so với các version Python trước đó với việc triển khai PEP (Đề xuất nâng cao Python), một đặc điểm kỹ thuật cung cấp thông tin cho các thành viên cộng đồng Python hoặc mô tả một tính năng mới của ngôn ngữ.

Ngoài ra, Python 2 còn bao gồm nhiều tính năng lập trình hơn bao gồm bộ thu gom rác phát hiện chu kỳ để tự động hóa quản lý bộ nhớ, hỗ trợ Unicode tăng cường để chuẩn hóa các ký tự và khả năng hiểu danh sách để tạo danh sách dựa trên danh sách hiện có. Khi Python 2 tiếp tục phát triển, nhiều tính năng hơn đã được thêm vào, bao gồm hợp nhất các loại và lớp của Python thành một hệ thống phân cấp trong version Python 2.2.

Python 3

Python 3 được coi là tương lai của Python và là version của ngôn ngữ hiện đang được phát triển. Một cuộc đại tu lớn, Python 3 đã được phát hành vào cuối năm 2008 để giải quyết và sửa đổi các lỗi thiết kế nội tại của các version trước của ngôn ngữ này. Trọng tâm của sự phát triển Python 3 là làm sạch cơ sở mã và loại bỏ dư thừa, làm rõ rằng chỉ có một cách để thực hiện một tác vụ nhất định.

Các sửa đổi lớn đối với Python 3.0 bao gồm thay đổi câu lệnh print thành một hàm tích hợp, cải thiện cách phân chia số nguyên và cung cấp thêm hỗ trợ Unicode.

Lúc đầu, Python 3 chậm được chấp nhận do ngôn ngữ này không tương thích ngược với Python 2, đòi hỏi mọi người phải đưa ra quyết định nên sử dụng version ngôn ngữ nào. Ngoài ra, nhiều thư viện gói chỉ có sẵn cho Python 2, nhưng khi group phát triển đằng sau Python 3 đã nhắc lại rằng hỗ trợ Python 2 đã kết thúc, nhiều thư viện hơn đã được chuyển sang Python 3.Việc tăng cường áp dụng Python 3 có thể được thể hiện bằng số lượng các gói Python hiện cung cấp hỗ trợ Python 3, tại thời điểm viết bài này bao gồm 339 trong số 360 gói Python phổ biến nhất.

Python 2.7

Sau version Python 3.0 năm 2008, Python 2.7 được xuất bản vào ngày 3 tháng 7 năm 2010 và được lên kế hoạch là version cuối cùng trong số các version 2.x. Mục đích đằng sau Python 2.7 là giúp user Python 2.x chuyển các tính năng sang Python 3 dễ dàng hơn bằng cách cung cấp một số thước đo về khả năng tương thích giữa cả hai. Hỗ trợ khả năng tương thích này bao gồm các module cho version 2.7 nâng cao như unittest để tự động kiểm tra hỗ trợ, argparse cho phân tích tùy chọn dòng lệnh, và các lớp học thuận tiện hơn trong collections .

Do vị trí độc nhất của Python 2.7 như một version nằm giữa các lần lặp lại trước đó của Python 2 và Python 3.0, nó đã tiếp tục là một lựa chọn rất phổ biến cho các lập trình viên do khả năng tương thích với nhiều thư viện mạnh mẽ. Khi ta nói về Python 2 ngày hôm nay, ta thường đề cập đến bản phát hành Python 2.7 vì đó là version được sử dụng thường xuyên nhất.

Tuy nhiên, Python 2.7 được coi là một ngôn ngữ kế thừa và sự phát triển tiếp tục của nó, ngày nay chủ yếu bao gồm các bản sửa lỗi, sẽ chấm dứt hoàn toàn vào năm 2020.

Sự khác biệt chính

Mặc dù Python 2.7 và Python 3 chia sẻ nhiều khả năng tương tự, nhưng chúng không nên được coi là hoàn toàn có thể swap cho nhau. Mặc dù bạn có thể viết mã tốt và các chương trình hữu ích trong cả hai version , nhưng cần hiểu rằng sẽ có một số khác biệt đáng kể trong cú pháp và xử lý mã.

Dưới đây là một vài ví dụ, nhưng bạn nên nhớ rằng bạn có thể sẽ gặp phải nhiều khác biệt về cú pháp hơn khi tiếp tục học Python.

In

Trong Python 2, print được coi như một câu lệnh thay vì một hàm, đây là một khu vực điển hình gây nhầm lẫn vì nhiều hành động khác trong Python yêu cầu các đối số bên trong dấu ngoặc đơn để thực thi. Nếu bạn muốn console của bạn in ra Sammy the Shark is my favorite sea creature trong Python 2, bạn có thể làm như vậy với câu lệnh print sau:

print "Sammy the Shark is my favorite sea creature" 

Với Python 3, print() hiện được coi là một hàm rõ ràng, vì vậy, để in ra cùng một chuỗi ở trên, bạn có thể thực hiện đơn giản và dễ dàng bằng cách sử dụng cú pháp của một hàm:

print("Sammy the Shark is my favorite sea creature") 

Thay đổi này làm cho cú pháp của Python nhất quán hơn và cũng giúp dễ dàng thay đổi giữa các hàm in khác nhau. Thuận tiện, cú pháp print() cũng tương thích ngược với Python 2.7, vì vậy các hàm print() trong Python 3 của bạn có thể chạy ở một trong hai version .

Phép chia với số nguyên

Trong Python 2, bất kỳ số nào bạn nhập không có số thập phân được coi là kiểu lập trình được gọi là số nguyên . Thoạt nhìn, đây có vẻ là một cách dễ dàng để xử lý các kiểu lập trình, nhưng khi bạn cố gắng chia các số nguyên với nhau, đôi khi bạn mong đợi nhận được câu trả lời có chữ số thập phân (được gọi là số float ), như trong:

5 / 2 = 2.5 

Tuy nhiên, trong Python 2, các số nguyên được nhập mạnh và sẽ không thay đổi thành số float với các chữ số thập phân ngay cả trong trường hợp điều đó có ý nghĩa trực quan.

Khi hai số ở hai bên của phép chia / ký hiệu là số nguyên, Python 2 thực hiện phép chia tầng sao cho thương số x , số trả về là số nguyên lớn nhất nhỏ hơn hoặc bằng x . Điều này có nghĩa rằng khi bạn viết 5 / 2 để chia hai số, Python 2.7 trả về số nguyên lớn nhất nhỏ hơn hoặc bằng 2,5, trong trường hợp này 2 :

a = 5 / 2 print a 
Output
2

Để overrides điều này, bạn có thể thêm các vị trí thập phân như trong 5.0 / 2.0 để nhận được câu trả lời mong đợi 2.5 .

Trong Python 3, phép chia số nguyên trở nên trực quan hơn, như trong:

a = 5 / 2 print(a) 
Output
2.5

Bạn vẫn có thể sử dụng 5.0 / 2.0 để trả về 2.5 , nhưng nếu bạn muốn thực hiện phân chia tầng, bạn nên sử dụng cú pháp Python 3 của // , như sau:

b = 5 // 2 print(b) 
Output
2

Sửa đổi này trong Python 3 làm cho việc chia cho các số nguyên trực quan hơn nhiều và là một tính năng không tương thích ngược với Python 2.7.

Hỗ trợ Unicode

Khi các ngôn ngữ lập trình xử lý kiểu chuỗi - tức là một chuỗi ký tự - chúng có thể làm như vậy theo một vài cách khác nhau để máy tính có thể chuyển đổi số sang chữ cái và các ký hiệu khác.

Python 2 sử dụng bảng chữ cái ASCII theo mặc định, vì vậy khi bạn nhập "Hello, Sammy!" Python 2 sẽ xử lý chuỗi dưới dạng ASCII. Giới hạn tối đa là vài trăm ký tự ở nhiều dạng mở rộng khác nhau, ASCII không phải là một phương pháp rất linh hoạt để mã hóa các ký tự, đặc biệt là các ký tự không phải tiếng Anh.

Để sử dụng mã hóa ký tự Unicode linh hoạt và mạnh mẽ hơn, hỗ trợ hơn 128.000 ký tự trên các tập lệnh và bộ ký hiệu hiện đại và lịch sử, bạn sẽ phải nhập u"Hello, Sammy!" , với tiền tố u tắt của Unicode.

Python 3 sử dụng Unicode theo mặc định, điều này giúp tiết kiệm thêm thời gian phát triển cho lập trình viên và bạn có thể dễ dàng nhập và hiển thị nhiều ký tự trực tiếp vào chương trình của bạn . Bởi vì Unicode hỗ trợ đa dạng ký tự ngôn ngữ hơn cũng như hiển thị biểu tượng cảm xúc, việc sử dụng nó làm mã hóa ký tự mặc định đảm bảo các thiết bị di động trên khắp thế giới luôn được hỗ trợ trong các dự án phát triển của bạn.

Tuy nhiên, nếu bạn muốn mã Python 3 của bạn tương thích ngược với Python 2, bạn có thể giữ chữ u trước chuỗi của bạn .

Tiếp tục phát triển

Sự khác biệt lớn nhất giữa Python 3 và Python 2 không phải là cú pháp, mà thực tế là Python 2.7 sẽ mất hỗ trợ tiếp tục vào năm 2020 và Python 3 sẽ tiếp tục được phát triển với nhiều tính năng hơn và nhiều bản sửa lỗi hơn.

Những phát triển gần đây đã bao gồm cácký tự chuỗi được định dạng , tùy chỉnh đơn giản hơn trong việc tạo lớp và một cách cú pháp rõ ràng hơn để xử lý phép nhân ma trận.

Tiếp tục phát triển Python 3 nghĩa là các nhà phát triển có thể dựa vào việc khắc phục các sự cố kịp thời và các chương trình có thể hiệu quả hơn với việc tăng cường chức năng được tích hợp theo thời gian.

Các điểm bổ sung cần xem xét

Là một người bắt đầu Python với quyền là một lập trình viên mới hoặc một lập trình viên có kinh nghiệm mới sử dụng ngôn ngữ Python, bạn cần xem xét những gì bạn hy vọng đạt được khi học ngôn ngữ này.

Nếu bạn đang hy vọng chỉ học mà không có một dự án đã định sẵn, bạn có thể sẽ muốn lưu ý Python 3 sẽ tiếp tục được hỗ trợ và phát triển, trong khi Python 2.7 thì không.

Tuy nhiên, nếu bạn đang có kế hoạch tham gia một dự án hiện có, bạn có thể sẽ muốn xem version Python mà group đang sử dụng, cách một version khác có thể tương tác với cơ sở mã kế thừa, nếu các gói mà dự án sử dụng được hỗ trợ trong version khác nhau và chi tiết triển khai của dự án là gì.

Nếu bạn đang bắt đầu một dự án mà bạn có ý định, sẽ rất đáng giá để điều tra những gói nào có sẵn để sử dụng và chúng tương thích với version Python nào. Như đã lưu ý ở trên, mặc dù các version trước đó của Python 3 có ít khả năng tương thích hơn với các thư viện được xây dựng cho các version của Python 2, nhưng nhiều người đã chuyển sang Python 3 hoặc commit làm như vậy trong bốn năm tới.

Kết luận

Python là một ngôn ngữ lập trình đa năng và được tài liệu hóa tốt để học, và cho dù bạn chọn làm việc với Python 2 hay Python 3, bạn có thể làm việc trên các dự án phần mềm thú vị.

Mặc dù có một số điểm khác biệt chính, không quá khó để chuyển từ Python 3 sang Python 2 với một vài chỉnh sửa và bạn thường thấy rằng Python 2.7 có thể dễ dàng chạy mã Python 3, đặc biệt là khi bạn mới bắt đầu. Bạn có thể tìm hiểu thêm về quy trình này bằng cách đọc hướng dẫn Cách chuyển mã Python 2 sang Python 3 .

Điều quan trọng cần lưu ý là khi sự chú ý của nhà phát triển và cộng đồng tập trung nhiều hơn vào Python 3, ngôn ngữ này sẽ trở nên tinh tế hơn và phù hợp với nhu cầu phát triển của các lập trình viên và sẽ ít hỗ trợ hơn cho Python 2.7.


Tags:

Các tin liên quan

Cách triển khai các ứng dụng web Python với Khung Micro Chai trên Ubuntu 14.04
2015-10-19
Cách triển khai các ứng dụng web Python với Framework Micro Chai trên CentOS 7
2015-10-19
Cách triển khai ứng dụng Python Web2py với uWSGI và Nginx trên Ubuntu 14.04
2015-03-17
Cách triển khai các ứng dụng Python Web2py với uWSGI và Nginx trên CentOS 7
2015-03-17
Cách xác thực một ứng dụng Python với Twitter bằng Tweepy trên Ubuntu 14.04
2015-02-04
Cách gửi tin nhắn dựa trên các phím định tuyến bằng thư viện RabbitMQ và Puka Python
2014-02-26
Cách đóng gói và phân phối các ứng dụng Python
2014-01-14
Cách triển khai ứng dụng web WSGI Python dựa trên kim tự tháp
2013-12-30
Cách triển khai ứng dụng WSGI Python bằng server Gunicorn HTTP đằng sau Nginx
2013-12-12
Cách triển khai ứng dụng WSGI Python bằng web server uWSGI với Nginx
2013-12-11