12/08/2018, 13:39

Những điều lập trình viên Python cần biết (Phần 1)

Bài viết này được tác giả viết vào 5/6/2013. Dịch lại cho anh em tham khảo. Tác giả nói rằng: "Tôi đã từng là lập trình viên Java trước khi tôi chuyển qua Python. Và bây giờ tôi đã trở thành một fan bự của Python, tôi nghĩ rằng tôi nên chia sẻ 10 điều cơ bản nhưng rất quan trọng về Python. Tất ...

Bài viết này được tác giả viết vào 5/6/2013. Dịch lại cho anh em tham khảo.

Tác giả nói rằng: "Tôi đã từng là lập trình viên Java trước khi tôi chuyển qua Python. Và bây giờ tôi đã trở thành một fan bự của Python, tôi nghĩ rằng tôi nên chia sẻ 10 điều cơ bản nhưng rất quan trọng về Python. Tất cả những điều này đều rất hữu ích khi Python là ngôn ngữ lập trình chính của tôi."

Và sau đây là 10 điều đó:

1. Các phiên bản Python

Đây không phải là một tính năng về kỹ thuật lập trình nhưng việc biết phiên bản hiện tại của ngôn ngữ vẫn rất quan trọng. Ví dụ, từ phiên bản 2.7.3 lên 2.7.4 thì Python đã hoàn thiện một số lỗi nhỏ, trong khi từ phiên bản Python 2.x.x lên Python 3.x.x lại là một sự thay đổi lớn.

Tại thời điểm viết bài này, Python có 2 phiên bản thường được sử dụng là 2.7 và 3.3 và cụ thể mới nhất là 2.7.5 và 3.3.2. Cả hai đều được phát hành vào 15/5/2013. Tuy cả hai đều đã rất hoàn thiện để sử dụng nhưng những ai đang bắt đầu với Python tại thời điểm này thì nên sử dung Python 3.3 hơn là 2.7.

Một chú ý quan trọng là Python 3 được thiết kế có chủ đích không tương thích ngược với Python 2. Khả năng tương thích ngược thường rất quan trọng đối với những ngôn ngữ hay phần mềm thường xuyên có sự sửa đổi, nghĩa là những phiên bản cũ vẫn có thể chạy ở phiên bản mới, nhưng với Python thì những dòng lệnh của Python 2 sẽ không thể chạy ở Python 3. Điều này cho phép Python 3 có được sự rõ ràng, súc tích và nhiều tính năng hơn.

Nói về sự thay đổi này, trong một lần phòng vấn, cha để của Python, Guido van Rossum đã nói:

"Tuy nhiên, sau khi trải nghiệm phiên bản mới, bạn sẽ nhận ra rằng Python thực ra không có thay đổi gì nhiều, chúng tôi chủ yếu chỉ sửa lại những lỗi thường gặp, và xóa bớt những câu lệnh cũ."

Bạn có thể thử đoạn lệnh sau ở Python 3

import sys
print ("My version Number: {}".format(sys.version))

Ở đây sys.version sẽ được thay thế vào dấu {} để hàm print in ra phiên bản Python hiện tại mà bạn đang sử dụng

2. Sử dụng Python Shell (cửa sổ dòng lệnh của Python)

Một trong điều tuyệt vời nhất của Python đó là nó tự động cài đặt một cửa sổ shell của nó. Python Shell có thể được thực thi bằng việc gõ python vào command line (cmd của Windows). Làm như vậy, bạn sẽ thấy phiên bản của Python đang sử dụng, một vài dòng về bản quyền và dấu nhắc >>> để bạn nhập lệnh vào. Nếu có nhiều phiên bản cùng cài trên máy bạn thì bạn có thể phải gõ ví dụ 'python3.3' để chạy đúng phiên bản.

Vậy tại sao sử dụng Python shell lại hữu ích? Rất đơn giản, nó cho phép bạn test những dòng lệnh một cách độc lập. Trong nhiều trường hợp, bạn có thể sẽ nhận ra rằng sẽ có một lỗi cú pháp hay lỗi logic trong một số dòng lệnh bạn muốn dùng. Và bạn nên test nó trước khi đưa vào một scripts khổng lồ, nếu không nó có thể làm tốn bộ nhớ hoặc tốn nhiều thời gian.

Dưới đây là hình ảnh cho Python Shell (sử dụng PowerShell của Windows)

alt text

Để chỉ ra tại sao shell lại hữu dụng. giả sử bạn quên viết số 2 vào hàm range() và chỉ là range(2, 16), khi đó kết quả in ra sẽ là tất cả các con số từ 2 đến 15, và nếu như bạn không test nó trước ở Shell thì sau khi đưa đoạn lệnh này vào trong một script lớn gồm hàng nghìn dòng lệnh thì sẽ rất tệ đó.

3. Sử dụng các module os và sys

Đầu tiên, hãy nói về module sys. Có lẽ, lợi ích lớn nhất là nó cung cấp cho các lập trình viên những hàm và phương thức có sẵn để đưa vào chương trình. Giả sử bạn xây dựng một chương trình lớn mà sẽ thực hiện một số công việc phụ thuộc vào đầu vào từ người dùng. Ví dụ, để triển khai thuật toán k-means clustering trong Machine Learning. Đây là một thuật toán có thể phân loại dữ liệu vào các nhóm phụ thuộc vào việc có bao nhiêu cluster. Điều này rõ ràng là một ứng dụng rất hữu ích trong đời thực. Ví dụ một ai đó có những dữ liệu đã được chuẩn hóa trong một hồ sơ bệnh án (lượng đường trong máu, chiều cao, cân nặng,...) và muốn phân loại bệnh nhân thành 2 cluster(nhóm), nhóm 1 khỏe mạnh, nhóm 2 bị bệnh.

Để thực hiện thuật toán này, cần 2 đầu vào: (1) là các file dữ liệu và (2) là các cluster. Một ý kiến là đưa những thứ này trực tiếp vào chương trình và chạy. Nhưng điều gì sẽ xảy ra nếu chúng ta có nhiều file dữ liệu hay nhiều cluster? Mỗi lần chương trình thực thi xong, chúng ta lại phải chỉnh sửa trong file script trước khi chạy lại chương trình.

Cách tốt hơn là sử dụng biến dòng lệnh. Thay đổi đầu vào trong cửa sổ dòng lệnh thường nhanh hơn là việc mở script và nhập lại các biến. Chúng ta có thể làm điều này với sys.argv, cái này sẽ lấy đầu vào từ cửa sổ dòng lệnh. Để đảm bảo người dùng nhập vào đúng số biến. Tôi có đoạn code sau:

import sys
if (len(sys.argv) != 3):
     print ("USAGE: kmeans_clustering.py [filedata] [clusters]")
     sys.exit()
num_clusters = int(sys.argv[2])

with open(sys.argv[1], 'r') as feature_file:

Ngoài việc trên, một tiện ích khác của biến dòng lệnh đó là chúng ta có thể dùng nó để thực thi các cùng một file script rất nhiều lần. Giả sử tôi muốn thực thi file script kmeans_clustering nhiều lần với các giá trị cluster từ 2 - 100. Cách thông thường là gọi file đó với biến 2, sau đó đợi nó kết thúc và gọi tiếp biến 3, tiếp tục cho đến 100. Tôi phải nhập biến dòng lệnh và gọi chương trình đến 99 lần!

Một cách tốt hơn là tạo một script khác sử dụng os.system để gọi file kmeans_clustering bất kể bao nhiêu lần tôi muốn.

import os

for i in range(2, 101):
     input_string = "python kmeans_clustering data1.txt " + str(i)
     os.system(input_string)

Có thể chạy script này một lần và sau đó file kmeans_clustering sẽ tự động chạy 99 lần sau đó với các cluster khác nhau. Quá tiện phải không? Đây là một trong những lợi ích lớn nhất của việc dùng một chương trình để gọi chương trình khác.

0