Trong phần này chúng ta sẽ tìm hiểu về hệ thống từ khóa có trong Python.
Dưới đây là danh sách các từ khóa trong Python.
and del from not while as elif global or with assert else if pass yield break except import print class exec in raise continue finally is return def for lambda try
Python luôn được cập nhật, danh sách các từ khóa trên có thể sẽ không giống với phiên bản bạn đang dùng
import sys import keyword print ("Python version: ", sys.version_info) print ("Python keywords: ", keyword.kwlist)
Đoạn code trên sẽ in ra phiên bản Python và danh sách các từ khóa của nó.
Các từ khóa điều khiển luồng chương trình
Từ khóa while
là từ khóa cơ bản để điều khiển luồng chương trình. Các câu lệnh bên trong vòng lặp while sẽ được thực thi cho đến khi điều kiện sai.
numbers = [22, 34, 12, 32, 4] sum = 0 i = len(numbers) while (i != 0): i -= 1 sum = sum + numbers[i] print ("The sum is: ", sum)
Đoạn code trên tính tổng của các số có trong một list. Đầu tiên chúng ta tính số lượng phần tử của list và gán vào biến i
, sau đó cứ mỗi vòng lặp, chúng ta lấy phần tử thứ i
của list để tính tổng rồi trừ i
đi 1. Vòng lặp dừng lại khi i
= 0
.
Ngoài ra chúng ta có thể dùng từ khóa break
để dừng vòng lặp ngay nếu muốn.
import random while (True): val = random.randint(1, 30) print (val,) if (val == 22): break
Trong đoạn code trên, chúng ta cho một vòng lặp chạy, cứ mỗi lần lặp, chúng ta lấy ngẫu nhiên một số từ 1 đến 30, nếu số ngẫu nhiên là 22 thì chúng ta ngắt vòng lặp bằng từ khóa break
.
14 14 30 16 16 20 23 15 17 22
Trong ví dụ tiếp theo, chúng ta sẽ sử dụng từ khóa continue
. Từ khóa này có tác dụng bỏ qua lần lặp đang thực hiện dở để thực hiện lần lặp tiếp theo.
import random num = 0 while (num < 1000): num = num + 1 if (num % 2) == 0: continue print (num,)
Trong đoạn code trên, chúng ta in ra các chữ số bé hơn 1000 mà không thể chia hết cho 2.
Ví dụ tiếp theo sử dụng từ khóa if
, đây là từ khóa được dùng rất nhiều trong luồng điều khiển của chương trình.
# licence.py age = 17 if age > 18: print ("Driving licence issued") else: print ("Driving licence not permitted")
Trong đoạn code trên, chúng ta kiểm tra xem biến age
bé hơn hay lớn hơn 18 để in ra các chuỗi khác nhau.
Đi cùng với từ khóa if
và từ khóa elif
, từ khóa này tương đương với else if
trong các ngôn ngữ khác.
name = "Luke" if name == "Jack": print ("Hello Jack!") elif name == "John": print ("Hello John!") elif name == "Luke": print ("Hello Luke!") else: print ("Hello there!")
Trong đoạn code trên, các câu lệnh if
sẽ tuần tự được thực hiện cho đến khi có điều kiện đúng. Nếu không có điều kiện nào thỏa thì câu lệnh sau từ khóa else
sẽ được thực hiện.
Hello Luke!
Từ khóa for
được dùng để duyệt qua một danh sách các đối tượng nào đó.
lyrics = """\ Are you really here or am I dreaming I can't tell dreams from truth for it's been so long since I have seen you I can hardly remember your face anymore """ for i in lyrics: print (i,)
Trong ví dụ trên, chúng ta có một chuỗi là lời bài hát. Chúng ta duyệt qua chuỗi đó, mỗi lần duyệt chúng ta in các chữ cái có trong chuỗi ra, dấu phẩy trong hàm print
có tác dụng ngăn không cho xuống dòng.
A r e y o u r e a l l y h e r e o r a m I d r e a m i n g I c a n ' t t e l l d r e a m s f r o m t r u t h f o r i t ' s b e e n s o l o n g s i n c e I h a v e s e e n y o u I c a n h a r d l y r e m e m b e r y o u r f a c e a n y m o r e
Biểu thức boolean
Ở đây mình giới thiệu lại các từ khóa boolean đã được học trong bài trước là: is
, or
, and
, và not
.
print (None == None) print (None is None) print (True is True) print ([] == []) print ([] is []) print ("Python" is "Python")
Toán tử ==
kiểm tra xem 2 đối tượng có cùng giá trị hay không. Từ khóa is
kiểm tra xem 2 đối tượng có cùng bộ nhớ hay không vì trong lập trình một địa chỉ bộ nhớ có thể được tham chiếu bởi nhiều đối tượng.
True True True True False True
Đoạn tiếp theo có thể sẽ hơi khó hiểu nhưng bạn cũng không cần đọc làm gì 😀
Sự khác nhau giữa toán tử ==
và từ khóa is
là khi chúng được sử dụng trên các đối tượng thì toán tử ==
sẽ so sánh các giá trị trong khi từ khóa is
sẽ so sánh địa chỉ của chúng trong bộ nhớ. Do đó trong biểu thức []==[]
kết quả trả về True vì chúng đều là các list rỗng, nhưng []is[]
lại cho kết quả False vì chúng là các thực thể khác nhau trong bộ nhớ. Còn đối với các đối tượng None, True thì lại khác, đây là các đối tượng đặc biệt, trong Python chúng là duy nhất, không hề có 2 đối tượng None hay True nên kết quả trả về True. Đối với trường hợp so sánh 2 string("Python" is "Python")
thì do Python tự động tối ưu bộ nhớ nên những string có giá trị giống nhau sẽ được sử dụng chung bộ nhớ, kết quả trả về True.
Tiếp theo là từ khóa not,
từ khóa này đảo ngược một giá trị boolean.
grades = ["A", "B", "C", "D", "E", "F"] grade = "L" if grade not in grades: print ("unknown grade")
Trong ví dụ trên, chúng ta kiểm tra xem giá trị của biến grade
có không thuộc list grades
hay không. Từ khóa in
có tác dụng kiểm tra xem một giá trị có thuộc một danh sách hay không, khi ta thêm từ khóa not
vào trước thì giá trị của in
bị đảo ngược.
unknown grade
Từ khóa and
trả về giá trị True khi cả hai biểu thức là True.
sex = "M" age = 26 if age < 55 and sex == "M": print ("a young male")
Trong ví dụ trên, nếu biến age
bé hơn 55 và biến sex
là “M” thì in dòng chữ “a young male” ra màn hình.
a young male
Khác với từ khóa and,
từ khóa or
chỉ cần một biểu thức là True thì trả về True.
name = "Jack" if ( name == "Robert" or name == "Frank" or name == "Jack" or name == "George" or name == "Luke"): print ("This is a male")
Hai toán tử and
và or
chỉ xét tới toán hạng thứ hai khi toán hạng thứ nhất thỏa điều kiện. Ví dụ trong toán tử and
nếu toán hạng đầu tiên là false thì tự động kết quả trả về sẽ là false chứ không xét toán hạng thứ 2 nữa, còn đối với toán tử or
thì nếu toán hạng đầu tiên là True thì lập tức kết quả trả về là True luôn chứ cũng không xét toán hạng thứ hai nữa.
Ví dụ.
x = 10 y = 0 if (y != 0 and x/y < 100): print ("a small value")
Đoạn code trên sẽ trả về False vì y khác 10 và toán hạng thứ hai không được xét đến. Nếu không sẽ xảy ra lỗi exception vì chúng ta không thể chia một số cho 0.
Module
Các từ khóa dưới đây làm việc với module. Một module thực chất là một file chứa code Python trong đó để có thể sử dụng bất cứ lúc nào.
Đầu tiên là từ khóa import,
từ khóa này được sử dụng để tích hợp module cần sử dụng vào chương trình.
import math print (math.pi)
Trong ví dụ trên, chúng ta sử dụng từ khóa import
để tích hợp module math vào chương trình của chúng ta. Sau đó chúng ta in ra hằng số pi của module này.
Từ khóa as
được dùng để đổi tên module mà chúng ta muốn sử dụng thành tên mà chúng ta thích.
import random as rnd for i in range(10): print (rnd.randint(1, 10),)
Trong ví dụ trên, chúng ta import
module random. Chúng ta sử dụng hàm
randint()
để lấy giá trị ngẫu nhiên từ 1 đến 10. Nhưng chúng ta không sử dụng cái tên random mà sử dụng tên rnd do chúng ta đặt. Tuy nhiên khi sử dụng tên mới bạn không được đổi tên file mã nguồn của bạn thành random.py hoặc rnd.py, nếu không sẽ báo lỗi.
1 2 5 10 10 8 2 9 7 2
Trong một module có rất nhiều hàm, biến, lớp… khi dùng từ khóa import mặc nhiên chúng ta được sử dụng toàn bộ mọi thứ có trong module. Nhưng nếu bạn chỉ muốn dùng một vài thứ nhất định trong module đó thì sử dụng từ khóa from.
from sys import version print (version)
Câu lệnh from sys import version
có nghĩa là chỉ sử dụng biến version
trong module sys.
Và khi in ra màn hình thì chúng ta không cần đưa tên module ra trước. Lúc này biến version
có đặc tính y hệt như những biến thông thường.
3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:38:48) [MSC v.1900 32 bit (Intel)]
Hàm
Tiếp theo chúng ta sẽ tìm hiểu các từ khóa làm việc với hàm. Từ khóa def
là từ khóa bắt đầu định nghĩa hàm. Chúng ta sẽ tìm hiểu sâu hơn về hàm ở bài sau.
def root(x): return x * x a = root(2) b = root(15) print (a, b)
Trong ví dụ trên chúng ta viết một hàm đơn giản. Hàm này tính bình phương của một số cho trước. Từ khóa return
trả về giá trị của hàm và thoát hàm.
Từ khóa lambda
có tác dụng tạo một hàm ẩn, hàm ẩn là hàm không dính tới một cái tên cụ thể nào. Trong các ngôn ngữ khác thì hàm này được gọi là hàm nội tuyến (inline function).
for i in (1, 2, 3, 4, 5): a = lambda x: x * x print (a(i),)
Trong ví dụ trên, chúng ta không định nghĩa một hàm với từ khóa def
mà dùng hàm ẩn.
1 4 9 16 25
Khi định nghĩa một hàm thì các biến trong hàm đó chỉ tồn tại bên trong hàm, khi kết thúc hàm chúng bị xóa khỏi bộ nhớ. Tuy nhiên nếu muốn sử dụng chúng ngoài thân hàm thi chúng ta có thể sử dụng từ khóa global
.
x = 15 def function(): global x x = 45 function() print (x)
45
Exception
Tiếp theo chúng ta tìm hiểu về các từ khóa làm việc với exception. Chi tiết về exception sẽ được đề cập ở các bài sau.
Fargo Aguirre, der Zorn Gottes Capote Grizzly man Notes on a scandal
Ở trên là một file text chứa các tựa phim. Chúng ta sẽ đọc file này.
f = None try: f = open('films', 'r') for i in f: print (i,) except IOError: print ("Error reading file") finally: if f: f.close()
Trong ví dụ trên, chúng ta đọc một file. Nếu không có lỗi xảy ra thì nội dung file sẽ được in ra màn hình. Nhưng đôi khi có những lỗi xảy ra trong quá trình đọc, chẳng hạn như tên file không chính xác, lúc này sẽ xuất hiện lỗi exception IOError.
Từ khóa except
có tác dụng “bắt” lỗi này và xử lý nó. Từ khóa finally
có tác dụng thực thi các câu lệnh cho dù có lỗi hay không có lỗi xảy ra.
Trong ví dụ tiếp theo, chúng ta sẽ tìm hiểu về từ khóa raise
.
class YesNoException(Exception): def __init__(self): print ('Invalid value') answer = 'y' if (answer != 'yes' and answer != 'no'): raise YesNoException else: print ('Correct value')
Trong Python có rất nhiều các exception được định nghĩa sẵn, nhưng tất nhiên sẽ có trường hợp chúng ta cần các exception riêng cho chúng ta tự định nghĩa. Từ khóa raise
có tác dụng “phát” exception khi cần.
Invalid value Traceback (most recent call last): File "./userexception.py", line 13, in <module> raise YesNoException __main__.YesNoException
Một số từ khóa khác
Từ khóa del
có tác dụng xóa một đối tượng.
a = [1, 2, 3, 4] print (a) del a[:2] print (a)
Trong ví dụ trên, chúng ta có một list các số nguyên. Sau đó chúng ta xóa phần tử đầu tiên trong list.
[1, 2, 3, 4] [3, 4]
Từ khóa pass
có tác dụng… không làm gì cả :D.
def function(): pass
Đôi khi chúng ta định nghĩa một hàm nhưng chưa muốn viết phần thân hàm mà để sau. Nhưng chúng ta không thể để thân hàm trống không được. Lúc đó chúng ta để từ khóa pass
trong thân hàm.
Từ khóa assert
được dùng trong quá trình debug. Thường chúng ta dùng từ khóa này để kiểm tra các trạng thái của đối tượng. Ví dụ chúng ta có một chương trình tính lương, vì lương không thể bé hơn 0 nên nếu chúng ta có thể dùng từ khóa assert
để kiểm tra xem lương có lớn hơn 0 hay không. Nếu sai thì trình thông dịch sẽ báo lỗi.
salary = 3500 salary -= 3560 # a mistake was done assert salary > 0
Đoạn code trên Ví dụ về chương trình tính lương.
Traceback (most recent call last): File "./salary.py", line 9, in <module> assert salary > 0 AssertionError
Lỗi exception AssertionError
sẽ xảy ra.
Cuối cùng là từ khóa class
, từ khóa class
là một trong những từ khóa quan trọng nhất trong lập trình hướng đối tượng. Từ khóa này dùng để tạo những kiểu dữ liệu do người dùng định nghĩa. Chúng ta sẽ tìm hiểu về lập trình hướng đối tượng (Object Oriented Programming – OOP) trong các bài sau.
class Square: def __init__(self, x): self.a = x def area(self): print (self.a * self.a) sq = Square(12) sq.area()
Trong đoạn code trên. Chúng ta tạo ra lớp Square (hình vuông), bên trong lớp này chúng ta định nghĩa phương thức khởi tạo và phương thức tính diện tích hình vuông.