Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Khi chương trình dài ra, việc nhét mọi thứ vào một chỗ nhanh chóng trở thành cơn ác mộng. Hàm là cách để bạn gói một nhóm lệnh lại, đặt cho nó một cái tên và gọi lại bất cứ khi nào cần.
Hàm (function) là một khối code có tên, nhận vào dữ liệu (tham số), xử lý, rồi có thể trả về kết quả. Hãy nghĩ nó như máy xay sinh tố: bạn bỏ trái cây vào, bấm nút, nhận ly nước ép. Bạn không cần biết dao quay bên trong thế nào mỗi lần dùng.
def chao(ten):
return "Xin chào, " + ten + "!"
print(chao("Lan")) # Xin chào, Lan!
print(chao("Nam"))Ở đây chao là tên hàm, ten là tham số, return trả kết quả về nơi gọi. Cùng một hàm, ta dùng nhiều lần với dữ liệu khác nhau.
tinh_tien_thue().Nguyên tắc nổi tiếng trong ngành là DRY: Don't Repeat Yourself, đừng lặp lại chính mình. Nếu bạn copy-paste một đoạn code đến lần thứ ba, đó là dấu hiệu nên tách nó thành hàm.
Một hàm có thể có nhiều tham số, có giá trị mặc định, và trả về nhiều thứ:
def tinh_dien_tich(dai, rong=1):
return dai * rong
print(tinh_dien_tich(5, 3)) # 15
print(tinh_dien_tich(5)) # 5
def min_max(ds):
return min(ds), max(ds)
nho, lon = min_max([4, 1, 9])
print(nho, lon) # 1 9Phân biệt hai thuật ngữ: tham số (parameter) là tên khai báo trong định nghĩa hàm, còn đối số (argument) là giá trị thực tế bạn truyền vào khi gọi.
Không phải hàm nào cũng cần return. Hàm chỉ in ra màn hình hoặc ghi file thì thực hiện một "hành động". Tuy nhiên, hàm trả về giá trị thường linh hoạt hơn vì nơi gọi quyết định dùng kết quả thế nào. Một lỗi hay gặp là quên return rồi thắc mắc vì sao kết quả là None.
Biến tạo bên trong hàm chỉ tồn tại trong hàm đó:
def dem():
so = 10
return so
dem()
print(so) # Lỗi: biến so không tồn tại ở ngoàiĐiều này là chủ ý, nó giúp các hàm không "giẫm chân" nhau. Muốn đưa dữ liệu vào thì dùng tham số, muốn lấy ra thì dùng return.
tinh_tong, kiem_tra_email.Các hàm nhỏ có thể ghép thành hàm lớn:
def la_chan(n):
return n % 2 == 0
def tong_so_chan(ds):
tong = 0
for x in ds:
if la_chan(x):
tong += x
return tong
print(tong_so_chan([1, 2, 3, 4])) # 6Cách làm này giúp bạn giải bài toán lớn bằng cách chia nhỏ, đúng tinh thần tư duy thuật toán.
None, và dòng sau báo lỗi khó hiểu.chao chỉ là tên hàm, còn chao("Lan") mới thực sự chạy.def them(x, ds=[]) khiến mọi lần gọi dùng chung một danh sách. Hãy dùng ds=None rồi tạo danh sách mới bên trong.sort() sẽ làm thay đổi danh sách gốc của người gọi.def them(x, ds=None):
if ds is None:
ds = []
ds.append(x)
return ds
print(them(1)) # [1]
print(them(2)) # [2], không dính [1]Một bài tập tốt: viết các hàm nhỏ la_nguyen_to, giai_thua, dao_chuoi, rồi viết thêm hàm thứ tư gọi lại cả ba. Cách này luyện bạn chia việc thành nhiều hàm nhỏ.
Hàm là viên gạch xây nên mọi chương trình nghiêm túc. Hãy tập thói quen: thấy đoạn code lặp lại hoặc quá dài thì tách thành hàm có tên rõ nghĩa. Sau này khi học lập trình hướng đối tượng, bạn sẽ thấy phương thức của lớp cũng chỉ là hàm được gắn với dữ liệu.
Khi đã sẵn sàng đi sâu hơn, bạn có thể tham khảo lộ trình học trong các khóa học tại codebem.com.
Nguyễn Đình Cường
0 comment