Python – Từ khóa

5/5 - (3 votes)

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ứ của list để tính tổng rồi trừ đi 1. Vòng lặp dừng lại khi = 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 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 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ử andor 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.

0 0 votes
Article Rating
Subscribe
Thông báo cho tôi qua email khi
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

1 Comment
Inline Feedbacks
View all comments
hoàng
hoàng
6 năm trước

bài viết hữu ích !