0

Bài 2. Các phần tử cơ bản của Python

Các phần tử cơ bản của Python

Như mọi ngôn ngữ lập trình khác, Python có các thành phần cơ bản sau:

  • Các từ khóa keyword;
  • Các biến số và hằng số;
  • Các kiểu dữ liệu cơ bản (các cấu trúc dữ liệu được xây dựng sẵn built-in types);
  • Các câu lệnh và khối lệnh;
  • Chú thích.

Trong chương này, chúng ta sẽ giới thiệu qua về các thành phần cơ bản trên. Lưu ý, Python có phân biệt chữ HOA và chữ thường. Đối với Python 3, mặc định, các xâu kí tự string sẽ ở dưới dạng unicode. Trong tài liệu này, đa số các ví dụ được viết bằng tiếng Việt không dấu, nhưng bạn hoàn toàn có thể sử dụng tiếng Việt có dấu thoải mái.

1. Các từ khóa của Python

Từ khóa keyword là các từ dùng riêng của mỗi ngôn ngữ, được dùng cho những mục đích nhất định và không thể định nghĩa lại nhằm mục đích khác.

Python có rất ít từ khóa, tất cả chỉ gồm 33 từ khóa, các từ khóa này đều bằng tiếng Anh và viết dưới dạng chữ thường. Tùy vào phiên bản Python bạn sử dụng mà số lượng các từ khóa có thể khác nhau. Để lấy danh sách các từ khóa của phiên bản hiện tại đang dùng, bạn sử dụng thư viện keyword và lệnh print(keyword.kwlist)

>>> import keyword
>>> print(keyword.kwlist)
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

2. Tên và cách đặt tên trong Python

Một chương trình sử dụng rất nhiều tên hay còn gọi là định danh để làm tên chương trình, tên hàm, tên biến, tên hằng số…

  • Tên trong Python có độ dài tuỳ ý.
  • Chúng có thể gồm cả chữ cái cả in hoa và in thường, các  chữ số và dấu gạch dưới, nhưng bắt buộc phải bắt đầu bằng một chữ cái hoặc dấu gạch dưới.
  • Chúng ta nên đặt tên sao cho có ý nghĩa, và để dễ đọc ta thường ngăn cách giữa các từ bằng dấu gạch dưới, ví dụ ho_ten, dia_chi

Vì Python là ngôn ngữ tạo kiểu dữ liệu động, nên đối với các biến, bạn không cần khai báo nó trước khi sử dụng. Lưu ý rằng, như đã nói ở phần trước, Python có phân biệt chữ HOA và chữ thường, nên hai tên anhANH là hoàn toàn khác nhau!

Một số quy ước bắt buộc khi đặt tên của Python

  • Ký tự bắt đầu của tên phải là một dấu gạch dưới _ hoặc một chữ cái (có thể là chữ hoa hoặc chữ thường). Tiếp theo có thể là một hoặc nhiều ký tự, con số hoặc thậm chí bỏ trống (tức tên chỉ gồm một kí tự).
  • Trong tên không được có dấu cách trắng hoặc các ký tự đặc biệt như: @ , $ . % ^ ! = + - * / % & ~ ` \
  • Tên không được trùng với các từ khóa của Python.

Một số quy ước không bắt buộc khi đặt tên của Python

  • Nên đặt tên có ý nghĩa sao cho dễ hiểu, dễ nhớ.
  • Tên của class bắt đầu với một ký tự hoa, tiếp theo là chữ thường (có thể viết hoa đầu mỗi từ của tên, ví dụ MyClass).
  • Tên của biến thường bắt đầu bởi chữ cái in thường.
  • Tên bắt đầu với một ký tự gạch dưới duy nhất, được hiểu rằng đây là một định danh private.
  • Tên bắt đầu với hai ký tự gạch dưới liên tiếp thì đây là một định danh có tính private mạnh.
  • Nếu tên bắt đầu và kết thúc với hai dấu gạch dưới (chẳng hạn __init__), định danh là một cái tên đặc biệt của ngôn ngữ được định nghĩa; hoặc khi ta viết lại một hàm đã có sẵn của Python.

 3. Chú thích trong ngôn ngữ Python

Khi viết chương trình, đôi khi chúng ta cần ghi chú những điểm quan trọng, để người khác và chính chúng ta sau này, đọc lại sẽ hiểu được mã nguồn một cách tốt nhất. Lúc này chúng ta sẽ ghi chú trực tiếp vào mã nguồn, các ghi chú này gọi là chú thích comment, trong chương trình mà không làm ảnh hưởng tới chương trình, chương trình dịch sẽ bỏ qua các chú thích này.

Một dòng chú thích trong Python bắt đầu với kí tự #. Nếu chú thích trên nhiều dòng thì đặt chúng vào trong cặp ngoặc nháy tam, thường sử dụng cặp ba nháy kép """. Ví dụ:

# Đây là chú thích trên một dòng
"""
Đây là chú thích trên nhiều dòng
khác nhau
Blah Blah…
"""

 4. Câu lệnh và khối lệnh

Trong một chương trình, ngoài các biến và kiểu dữ liệu của nó; chúng ta còn cần phải có các mô tả những hành động, công việc mà chương trình cần thực hiện. Như trong tiếng Việt, mỗi một câu phải có ý nghĩa nhất định, thì trong Python cũng thế, mỗi một câu lệnh phải để thực hiện một nhiệm vụ nào đó. Các câu lệnh có thể chỉ để thực hiện một hành động, nhiệm vụ nào đó, như gán giá trị vào một biến, gọi một hàm… Mỗi lệnh như vậy được gọi là một câu lệnh hoặc lệnh đơn. Ngoài các lệnh đơn này, Python còn có các câu lệnh ghép (lệnh hợp thành) mà ta sẽ gọi là khối lệnh, các câu lệnh lựa chọn, câu lệnh kiểm tra điều kiện, và các vòng lặp. Chúng được gọi chung là các câu lệnh có cấu trúc mà chúng ta sẽ tìm hiểu ở các chương sau.

Mỗi câu lệnh được viết trên một dòng và phải kết thúc bằng kí tự xuống dòng CR. Do đó, muốn kết thúc một câu lệnh, ta chỉ việc xuống một dòng mới. Ví dụ, trong hai câu lệnh sau, câu lệnh thứ nhất sẽ in ra màn hình dòng chữ: Toi la Phu Ong, còn câu lệnh thứ hai sẽ in tiếp dòng chữ: Ban ten la gi?

print("Toi la Phu Ong")
print("Ban ten la gi?")

Tuy nhiên, đôi khi có những câu lệnh quá dài, để dễ nhìn ta có thể chủ động xuống dòng bằng cách gõ thêm kí tự \ (backslash) trước khi xuống dòng mới. Một dòng kết thúc bởi dấu \ thì không thể chứa các chú thích. Ví dụ sau đây, ta chủ động xuống dòng ở chỗ + 11, thì trước khi xuống dòng, ta gõ thêm kí tự \, lúc này Python sẽ hiểu là chưa kết thúc một câu lệnh và sẽ chờ đến khi ta gõ + 13 và ấn Enter, mới thực hiện câu lệnh và trả về kết quả bằng 91. Mặc dù về mặt hình thức văn bản, ta thấy câu lệnh này được viết trên hai dòng, nhưng ta vẫn gọi đây là một câu lệnh, hoặc một dòng lệnh nếu không gây hiểu lầm.

>>> 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 +\
... 11 + 12 + 13
91

Vậy khi nào thì nên chủ động xuống dòng? Để cho mã nguồn của chúng ta được đẹp, mỗi dòng không nên dài quá 80 kí tự, nên đối với những câu lệnh quá dài ta có thể chủ động xuống dòng để cho mã nguồn dễ đọc hơn[1].

Tuy nhiên, có đôi khi xuống một dòng mới mà không cần kí tự \, đó là khi ta liệt kê các phần tử của một danh sách[2] list, một bộ tuple… Chẳng hạn, khi ta nhập các phần tử của list

l = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,
      ... 144, 233]

thì trước khi nhập phần tử 144, ta ấn xuống dòng nhưng Python vẫn đủ thông minh để hiểu là chưa kết thúc một câu lệnh. Và, đối với các chú thích trên nhiều dòng, thì đương nhiên sẽ không cần gõ thêm kí tự \ trước khi xuống dòng mới.

Khi chúng ta cần thực hiện một nhóm các lệnh khác nhau, ví dụ khi giải phương trình bậc hai, thì trong trường hợp biệt số Δ dương, chúng ta phải thực hiện các thao tác in ra màn hình thông báo phương trình có hai nghiệm, rồi lần lượt in ra hai nghiệm đó. Khi này, ta cần đến lệnh ghép hay lệnh hợp thành. Câu lệnh ghép, được hợp thành bởi nhiều câu lệnh đơn nằm trên nhiều dòng khác nhau mà ta gọi là một khối lệnh thì Python sẽ sử dụng các khoảng cách trắng để phân biệt. Trong các ngôn ngữ khác, một khối lệnh thường được đánh dấu bằng cặp ký hiệu hoặc từ khóa. Ví dụ, trong C/C++, cặp ngoặc nhọn { } được dùng để bao bọc một khối lệnh. Python, trái lại, có một cách rất đặc biệt để tạo khối lệnh, đó là thụt lề indent các câu lệnh trong khối vào sâu hơn (về bên phải) so với các câu lệnh của khối lệnh cha chứa nó.

Ví dụ, đoạn mã so sánh Δ với số 0, nếu lớn hơn thì in ra màn hình dòng chữ Phương trình có hai nghiệm phân biệt và in ra hai nghiệm đó, trái lại thì in ra dòng chữ Phương trình không có hai nghiệm phân biệt.

#không được dùng kí hiệu Delta nên ta đặt tên sao cho dễ hiểu
if delta > 0:
      # bắt đầu khối lệnh mới, thụt đầu dòng so với lệnh trước đó
      print("Phương trình có hai nghiệm phân biệt là:")
      print(x_1 = (-b + sqrt(delta)) / (2 * a))
      print(x_1 = (-b - sqrt(delta)) / (2 * a))
# kết thúc khối lệnh, trở về khối lệnh cha bằng cách không thụt đầu dòng
else:
      print("Phương trình không có hai nghiệm phân biệt")

Để làm điều này, ta có thể sử dụng dấu cách trắng (space) hoặc dấu nhảy Tab đều được, tuy nhiên từ phiên bản 3.x trở đi, Python chỉ cho phép sử dụng một trong hai loại, không được trộn lẫn (mix) cả hai trong cùng một tệp của chương trình. Thông thường, theo quy ước ngầm, người ta sử dụng 4 dấu cách trắng để thụt các câu lệnh trong khối.

Nếu bạn quen sử dụng phím Tab, có thể cài đặt để mỗi lần gõ phím Tab sẽ tương đương với 4 dấu cách trắng. Chẳng hạn, đối với Visual Studio Code, bạn bấm chuột vào vị trí Spaces ở trên thanh trạng thái (Status Bar) và chọn Indent Using Spaces, sau đó chọn số lượng dấu cách tương ứng với một lần bấm phím Tab.

5. Một số quy tắc khi viết chương trình

Để chương trình dễ đọc, gỡ lổi, vận hành và bảo trì chúng ta nên tuân thủ một số quy tắc sau:

  • Nên viết chú thích rõ ràng và sử dụng chú thích thường xuyên, nếu cần thiết có thể ghi rõ ngày tháng sửa, lí do sửa… Đặc biệt, đối với mỗi hàm, mỗi mô-đun ta nên có mô tả chi tiết về nó như mục đích, cách sử dụng… Sau mỗi tên biến, nếu cần cũng nên giải thích biến này sử dụng để làm gì.

Đối với những chỗ code chưa tối ưu, cần phải sửa chữa, có thể comment

# FIXME -- fix these code later

Đối với những chỗ cần thêm chức năng, nhiệm vụ… nên comment

# TODO -- in future you have to do this
  • Nên dùng dấu cách thay cho dấu nhảy Tab, và nên dùng 4 dấu cách. Không được trộn lẫn (mix) giữa hai loại dấu này.
  • Giữa các hàm cách nhau bởi một dòng trắng.
  • Giữa các lớp cách nhau bởi hai dòng trắng.
  • Tên biến nên bắt đầu bằng chữ in thường, tên lớp nên bắt đầu bằng chữ in hoa.

[1]Chính vì lí do một dòng không nên quá dài, sẽ gây mỏi mắt, mà các tờ báo giấy mới in thành nhiều cột 🙂

[2]Trong cuốn sách này, hầu hết các từ khóa, thuật ngữ của Python sẽ được giữ nguyên tiếng Anh mà không dịch sang tiếng Việt.

hocbaicungcon

Leave a Reply

Your email address will not be published. Required fields are marked *