Ngôn ngữ lập trình Python được biết đến với tính dễ đọc và cấu trúc rõ ràng, phần lớn nhờ vào cú pháp mạch lạc của. Việc hiểu rõ cú pháp là bước đầu tiên quan trọng trên hành trình học lập trình Python. Vậy, cú pháp Python bao gồm những yếu tố gì? Bài viết này sẽ giới thiệu một số khía cạnh cốt lõi của cú pháp, giúp bạn bắt đầu làm quen với ngôn ngữ lập trình này.
Cú pháp trong Python là gì?
Cú pháp trong Python đóng vai trò như một bộ quy tắc được sử dụng để tạo nên một chương trình Python hoàn chỉnh. Cú pháp của ngôn ngữ lập trình Python có nhiều điểm tương đồng với các ngôn ngữ lập trình khác như Perl, C, và Java. Tuy nhiên, giữa các ngôn ngữ này vẫn có những khác biệt nhất định.
Viết chương trình Python đầu tiên
Chúng ta hãy cùng thực thi một chương trình Python để in ra dòng chữ “Hello Vietnix” theo hai cách khác nhau: Chế độ lập trình tương tác (Interactive Mode) và Chế độ lập trình script (Script Mode).
Chế độ lặp trình tương tác (Interactive Mode)
Chế độ lập trình tương tác cho phép bạn thực thi các dòng lệnh Python trực tiếp ngay tại trình thông dịch (interpreter). Để khởi động trình thông dịch Python, bạn có thể gõ lệnh python3 (hoặc python nếu bạn dùng Python 2) trên dòng lệnh (command prompt):
$ python3
Python 3.10.6 (main, Mar 10 2023, 10:55:28) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
Dấu >>>
chính là dấu nhắc lệnh của Python, cho biết trình thông dịch đã sẵn sàng để nhận lệnh của bạn. Bây giờ, hãy gõ dòng lệnh sau và nhấn phím Enter:
>> print ("Hello Vietnix")
Nếu bạn đang dùng phiên bản Python cũ hơn, chẳng hạn như Python 2.4.x, bạn có thể bỏ qua dấu ngoặc đơn và viết print “Hello Vietnix”. Tuy nhiên, với phiên bản Python 3.x trở lên, dòng code trên sẽ cho ra kết quả như sau:
Hello Vietnix
Giải thích code:
- Trong phần ví dụ trên, chúng ta thấy câu lệnh
print("Hello Vietnix")
. print()
: Đây là một hàm (function) cơ bản của Python, hàm này được dùng để hiển thị một giá trị hoặc một thông báo nào đó ra màn hình."Hello Vietnix"
: Đây là một chuỗi (string) ký tự, mà trong trường hợp này, chúng ta muốn hàmprint()
hiển thị chuỗi này.
Chế độ lập trình script (Script Mode)
Ngoài chế độ tương tác, chúng ta có thể sử dụng Python ở chế độ script. Ở chế độ này, chương trình Python được viết trong một file, và trình thông dịch sẽ đọc, dịch, và thực thi từng dòng lệnh từ file đó. Sau khi chạy xong các lệnh, trình thông dịch sẽ tự động kết thúc. Đây là cách thường được sử dụng khi viết các chương trình Python thực tế, phức tạp.
Để bắt đầu, chúng ta hãy tạo một file văn bản có phần mở rộng .py
, ví dụ my_program.py
. Bên trong file này, hãy viết đoạn code sau:
# my_program.py
print("Học Python thật thú vị!")
Giả sử rằng bạn đã thiết lập đường dẫn đến trình thông dịch Python trong biến môi trường PATH, bạn có thể chạy chương trình bằng cách sử dụng lệnh sau trên dòng lệnh (command prompt):
$ python3 my_program.py
Kết quả hiển thị trên màn hình sẽ là:
Học Python thật thú vị!
Bên cạnh đó, còn có một cách khác để chạy chương trình Python bằng script. Ta hãy chỉnh sửa file my_program.py
một chút như sau:
#!/usr/bin/python3
# my_program.py
print("Học Python thật thú vị!")
Dòng #!/usr/bin/python3
là dòng shebang (còn gọi là hashbang). Dòng này chỉ định vị trí của trình thông dịch Python trên hệ thống của bạn.
Giả sử trình thông dịch Python nằm trong thư mục /usr/bin, ta có thể thực thi chương trình với các lệnh sau trên terminal:
$ chmod +x my_program.py # Làm cho file trở nên có thể chạy (executable)
$ ./my_program.py
Và bạn cũng sẽ thấy kết quả hiển thị trên màn hình:
Học Python thật thú vị!
Giải thích code:
# my_program.py
: Đây là dòng chú thích. Dòng chú thích không có ảnh hưởng đến quá trình thực thi code, mục đích dùng để giải thích ý nghĩa hoặc mục đích của code#!/usr/bin/python3
: Đây là dòng Shebang (hashbang), được sử dụng trong các hệ thống Unix để cho biết tập tin nào sẽ được dùng để thực thi (trong trường hợp này là Python).print("Học Python thật thú vị!")
: Hàmprint()
được sử dụng để in thông báo ra màn hình.$ chmod +x my_program.py
: Lệnh này cho phép bạn cấp quyền thực thi cho tập tin script.
Định danh trong Python
Trong Python, định danh (identifier) là tên được sử dụng để đặt tên cho các đối tượng trong chương trình, ví dụ như: biến (variable), hàm (function), lớp (class), module hoặc bất kỳ đối tượng nào khác. Có thể coi định danh giống như một cái nhãn giúp ta dễ dàng tham chiếu đến các phần khác nhau của chương trình.
Một định danh trong Python cần phải tuân theo các quy tắc sau:
- Bắt đầu: Định danh phải bắt đầu bằng một chữ cái (từ A đến Z hoặc từ a đến z), hoặc bằng một dấu gạch dưới _.
- Tiếp theo: Sau ký tự đầu tiên, định danh có thể chứa các chữ cái, dấu gạch dưới, hoặc các chữ số (từ 0 đến 9).
- Không chứa: Python không cho phép sử dụng các ký tự đặc biệt như @, $, và % bên trong định danh.
- Phân biệt chữ hoa chữ thường: Python là một ngôn ngữ phân biệt chữ hoa chữ thường. Điều này có nghĩa myVariable và MyVariable là hai định danh hoàn toàn khác nhau.
- Không dùng từ khóa: Python có một số từ khóa được định nghĩa sẵn như if, else, for,… các từ khóa này bạn không được sử dụng để đặt tên định danh, nếu không sẽ bị lỗi.
Dưới đây là một số quy ước đặt tên cho các định danh trong Python:
- Tên lớp: Nên bắt đầu bằng chữ cái viết hoa. Ví dụ: MyClass
- Tên các đối tượng khác (biến, hàm,…): Nên bắt đầu bằng chữ cái viết thường. Ví dụ:
my_function
,my_variable
. - Định danh riêng (private identifier): Nếu bắt đầu bằng một dấu gạch dưới (
_
), định danh được coi là riêng tư. (Có tính chất ẩn dụ hơn trong một vài trường hợp cụ thể). Ví dụ:_my_private_variable
. Còn nếu bắt đầu bằng hai dấu gạch dưới (__
), định danh có tính riêng tư mạnh hơn. (Trong thực tế còn có 1 chút ngoại lệ nhất định, nhưng để cho dễ hiểu, ta nên hiểu chúng là một dạng riêng tư mạnh). Ví dụ:__my_strongly_private_variable
- Định danh đặc biệt: Nếu định danh bắt đầu và kết thúc bằng hai dấu gạch dưới, nó là một tên đặc biệt được định nghĩa sẵn trong ngôn ngữ Python. Ví dụ:
__init__
Reserved Words trong Python
Trong Python, một số từ đã được định nghĩa sẵn và mang ý nghĩa đặc biệt, gọi là từ khóa (keywords). Các từ này được dành riêng cho ngôn ngữ Python, và bạn không thể sử dụng chúng để đặt tên cho biến, hàm, lớp hay bất kỳ đối tượng nào khác trong chương trình của mình. Các từ khóa trong Python luôn được viết bằng chữ thường.
Dưới đây là danh sách các từ khóa trong Python:
and | as | assert |
break | class | continue |
def | del | elif |
else | except | False |
finally | for | from |
global | if | import |
in | is | lamda |
None | nonlocal | not |
or | pass | raise |
return | True | try |
while | with | yield |
Dòng và thụt lề trong Python
Khác với nhiều ngôn ngữ lập trình khác (như C, Java) sử dụng dấu ngoặc nhọn {}
để xác định các khối mã (code block), Python sử dụng thụt lề (indentation) để thể hiện cấu trúc và phân chia các khối code. Việc này được quy định một cách chặt chẽ, bắt buộc trong Python.
Mỗi khối mã trong Python (ví dụ: bên trong hàm, vòng lặp, câu lệnh if/else
) đều phải được thụt vào so với dòng lệnh chứa nó. Số lượng khoảng trắng thụt lề có thể thay đổi, miễn là tất cả các lệnh trong cùng một khối đều phải có cùng số lượng khoảng trắng thụt lề.
Ví dụ, đoạn code sau đây là hợp lệ:
if True:
print("Điều kiện đúng")
else:
print("Điều kiện sai")
Tuy nhiên, đoạn code dưới đây sẽ gây ra lỗi, vì các câu lệnh trong khối if
và else
không có cùng mức thụt lề:
if True:
print ("Trả lời")
print ("Điều kiện đúng")
else:
print ("Trả lời")
print ("Điều kiện sai") # Lỗi ở dòng này, thiếu thụt lề
Như vậy, trong Python, tất cả các dòng liên tiếp được thụt lề cùng một số lượng khoảng trắng sẽ tạo thành một khối lệnh. Ví dụ sau minh họa các khối lệnh khác nhau:
Lưu ý: Không cần phải cố gắng hiểu ý nghĩa logic của ví dụ, quan trọng là bạn thấy cách các khối lệnh được thụt lề để phân biệt chúng
import sys
try:
# mở luồng đọc file
file = open("ten_file.txt", "w")
except IOError:
print ("Lỗi khi ghi vào file", "ten_file.txt")
sys.exit()
print ("Nhập '", "ket_thuc",
print ("' khi hoàn thành")
file_text = ""
while file_text != "ket_thuc":
file_text = input("Nhập nội dung: ")
if file_text == "ket_thuc":
# đóng file
file.close
break
file.write(file_text)
file.write("\n")
file.close()
file_name = input("Nhập tên file: ")
if len(file_name) == 0:
print ("Lần tới hãy nhập gì đó")
sys.exit()
try:
file = open(file_name, "r")
except IOError:
print ("Lỗi khi đọc file")
sys.exit()
file_text = file.read()
file.close()
print (file_text)
Câu lệnh đa dòng trong Python
Thông thường, một câu lệnh trong Python sẽ kết thúc bằng một dòng mới (new line). Tuy nhiên, trong một vài trường hợp code quá dài, để giúp code dễ đọc, chúng ta có thể viết một câu lệnh trên nhiều dòng khác nhau. Python cho phép bạn sử dụng ký tự gạch chéo ngược \
(backslash) để biểu thị rằng câu lệnh sẽ còn tiếp tục ở dòng tiếp theo. Ví dụ:
tong = so_thu_nhat + \
so_thu_hai + \
so_thu_ba
Ở ví dụ trên, toán tử gán (=) và dấu + thể hiện ý nghĩa tiếp diễn của câu lệnh qua nhiều dòng.
Ngoài cách trên, bạn có thể sử dụng dấu ngoặc vuông []
, ngoặc nhọn {}
, hoặc ngoặc đơn ()
để nhóm các câu lệnh, và không cần dùng đến ký tự gạch chéo ngược. Các câu lệnh nằm trong các dấu ngoặc này sẽ được Python tự động hiểu là một khối câu lệnh đa dòng. Ví dụ, một danh sách (list) có thể được viết như sau:
products = ['VPS', 'Hosting', 'Domain',
'SSL', 'Anti DDOS']
Dấu nháy trong Python
Trong Python, dấu nháy được sử dụng để tạo ra các chuỗi ký tự (string). Có ba loại dấu nháy chính được chấp nhận, đó là dấu nháy đơn ('
), dấu nháy đôi ("
) và dấu nháy ba ('''
hoặc """
). Quan trọng là loại dấu nháy nào dùng để mở chuỗi thì phải dùng chính dấu nháy đó để kết thúc chuỗi.
Dấu nháy ba thường được sử dụng để tạo ra các chuỗi ký tự kéo dài trên nhiều dòng. Chúng ta có thể xem xét một vài ví dụ sau:
word = 'Vietnix'
print (word)
sentence = "This is Vietnix Company."
print (sentence)
paragraph = """Here is the Vietnix company. We provide Hosting,
VPS, and Domain services for customers."""
print (paragraph)
Chú thích trong Python
Trong lập trình Python, chú thích (comment) là những dòng giải thích hoặc ghi chú do lập trình viên viết trong mã nguồn Python. Mục đích chính của chú thích là làm cho mã nguồn dễ đọc và dễ hiểu hơn đối với con người, đồng thời trình thông dịch Python sẽ bỏ qua những dòng này khi thực thi chương trình.
Python hỗ trợ cả chú thích một dòng (end-of-line) và chú thích nhiều dòng (block), tương tự như nhiều ngôn ngữ hiện đại khác như PHP, BASH và Perl.
Dấu thăng (#) được sử dụng để bắt đầu một chú thích. Bất kỳ ký tự nào theo sau dấu thăng (#), cho đến hết dòng, đều được coi là một phần của chú thích và sẽ không được trình thông dịch Python thực thi.
Ví dụ:
# Đây là một dòng chú thích đầu tiên
print ("Xin chào mọi người!") # Đây là dòng chú thích thứ hai
Khi chạy đoạn code trên, kết quả sẽ là:
Xin chào mọi người!
Như ta thấy ở ví dụ, chỉ dòng code print() là được thực thi còn các dòng chú thích sẽ bị bỏ qua.
Bạn có thể thêm chú thích vào cùng dòng với một câu lệnh hoặc một biểu thức:
name = "Vietnix" # This is again comment
Bạn có thể chú thích nhiều dòng như sau
# This is a comment.
# This is a comment, too.
# This is a comment, too.
Ngoài ra, chuỗi ký tự được đặt trong ba dấu nháy đơn ('''
) hoặc ba dấu nháy kép ("""
) cũng có thể được sử dụng như chú thích nhiều dòng vì trình thông dịch Python cũng sẽ bỏ qua chúng:
'''
This is a multiline
comment.
'''
Sử dụng dòng trống trong chương trình Python
Trong Python, một dòng chỉ chứa các khoảng trắng (space), hoặc có thêm chú thích (comment), được gọi là dòng trống. Trình thông dịch Python hoàn toàn bỏ qua các dòng trống này. Chúng có mục đích chính là làm cho code của bạn dễ đọc và dễ hiểu hơn bằng cách tạo ra các khoảng cách giữa các khối code khác nhau.
Khi làm việc trong chế độ tương tác của trình thông dịch Python, bạn cần nhập một dòng trống hoàn toàn (không có ký tự nào cả) để báo hiệu kết thúc một câu lệnh đa dòng (multiline statement). Điều này giúp trình thông dịch hiểu rằng câu lệnh của bạn đã kết thúc và nó sẽ bắt đầu thực thi.
Dừng chương trình và chờ người dùng
Trong các chương trình Python chạy trên dòng lệnh, đôi khi bạn muốn chương trình tạm dừng và chờ người dùng nhấn phím Enter trước khi kết thúc. Đoạn code sau minh họa cách chúng ta làm điều đó:
#!/usr/bin/python
input("\n\nNhấn Enter để thoát.")
Trong đoạn code trên:
input()
: Đây là một hàm tích hợp trong Python, cho phép chúng ta nhận đầu vào từ người dùng (trong trường hợp này, việc nhấn phím enter)."\n\n"
: được sử dụng để tạo ra hai dòng trống trước khi in ra thông báo “Nhấn Enter để thoát”. Việc này giúp giao diện thân thiện hơn.- Khi người dùng nhấn phím Enter, hàm
input()
sẽ nhận được tín hiệu và chương trình tiếp tục chạy và kết thúc.
Kết hợp nhiều câu lệnh trên cùng một dòng
Trong Python, bạn có thể viết nhiều câu lệnh trên cùng một dòng bằng cách sử dụng dấu chấm phẩy (;). Tuy nhiên, cần lưu ý rằng, cách này chỉ áp dụng được khi các câu lệnh đó không bắt đầu một khối mã mới (code block). Để minh họa, bạn có thể xem ví dụ sau:
import sys; x = 'Vietnix'; sys.stdout.write(x + '\n')
Kết quả:
Vietnix
Trong ví dụ này, các câu lệnh được thực hiện lần lượt từ trái qua phải, giúp ta thực hiện nhiều hành động liên tiếp trên cùng một dòng. Tuy nhiên, cách viết này thường được khuyên không nên dùng nhiều vì có thể gây khó đọc, khi cần thiết bạn nên dùng.
Khối lệnh trong Python
Trong Python, một khối lệnh (suite
) là một nhóm các câu lệnh riêng lẻ, tạo thành một khối mã hoàn chỉnh và thường được thực thi cùng nhau. Các câu lệnh phức hợp hoặc cấu trúc (compound/complex), ví dụ như if
, while
, def
(định nghĩa hàm), và class
, đều yêu cầu một dòng tiêu đề (header line) và một khối lệnh đi kèm.
Dòng tiêu đề là dòng bắt đầu câu lệnh (bằng một từ khóa cụ thể như if
, while
, …) và kết thúc bằng dấu hai chấm (:
). Tiếp theo dòng tiêu đề là một hoặc nhiều dòng tạo thành khối lệnh (suite
). Ví dụ:
if biểu_thức_1 :
khối_lệnh_1
elif biểu_thức_2 :
khối_lệnh_2
else :
khối_lệnh_3
Trong ví dụ trên:
if biểu_thức_1:
: là dòng tiêu đề, bắt đầu khối lệnh.khối_lệnh_1
: là khối lệnh tương ứng với điều kiện 1, nó là các dòng lệnh nằm sau dòng tiêu đề có cùng cấp thụt lề.- Tương tự với các
elif
vàelse
.
Đối số dòng lệnh trong Python
Nhiều chương trình có khả năng nhận các đối số (arguments) từ dòng lệnh khi khởi chạy, để cung cấp thông tin cơ bản về cách chương trình nên hoạt động. Python cũng cho phép bạn làm điều này. Bạn có thể sử dụng tham số -h (hoặc –help) để xem thông tin hướng dẫn sử dụng cơ bản của Python:
$ python3 -h
usage: python3 [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
-c cmd : program passed in as string (terminates option list)
-d : debug output from parser (also PYTHONDEBUG=x)
-E : ignore environment variables (such as PYTHONPATH)
-h : print this help message and exit
[etc.]
Kết quả trả về cho chúng ta biết cú pháp sử dụng chương trình và danh sách các tham số tùy chọn (options) khác nhau mà Python hỗ trợ. Ví dụ -c cmd
dùng để chạy một dòng lệnh Python, hoặc -h
dùng để hiển thị hướng dẫn (help) cách sử dụng.
Ngoài ra, bạn hoàn toàn có thể tự lập trình cho script của mình có khả năng chấp nhận các tham số khác nhau từ dòng lệnh. Tuy nhiên, việc xử lý đối số dòng lệnh là một chủ đề nâng cao, bạn nên tìm hiểu thêm sau khi đã nắm vững các khái niệm cơ bản khác của Python.
Lời kết
Chúng ta vừa cùng nhau khám phá những khái niệm cốt lõi về cú pháp trong Python, từ việc thiết lập môi trường lập trình đầu tiên đến các quy tắc định danh, dòng lệnh, và chú thích. Hy vọng những kiến thức này sẽ là nền tảng vững chắc để bạn tự tin hơn trên con đường chinh phục ngôn ngữ lập trình Python.