(Bài 6): Hàm (function) trong Python

Tổng quan về Hàm (function) trong python

Ở các bài trước, bạn đã làm quen với biến, kiểu dữ liệu, điều kiện, vòng lặp – những nền tảng quan trọng của Python. Tuy nhiên, để viết được chương trình lớn, sạch, tối ưu và tái sử dụng được, chúng ta cần học về hàm (function).
Hàm giúp chia nhỏ chương trình thành từng khối dễ quản lý. Đây cũng là kỹ năng phân tích – tư duy lập trình quan trọng nhất của người viết code chuyên nghiệp.

Trong bài này, chúng ta sẽ tìm hiểu:

  • Hàm là gì?

  • Cách định nghĩa và sử dụng hàm

  • Hàm có tham số

  • Hàm trả về giá trị

  • Hàm nhiều giá trị trả về

  • Hàm mặc định

  • Hàm với số lượng tham số linh hoạt

  • Biến cục bộ – biến toàn cục

  • Thực hành cuối bài + lời giải chi tiết

Bài này dài và cực kỳ quan trọng. Sau bài 6, bạn đã đạt đến mức “biết lập trình Python đúng chuẩn”.


Hàm là gì?

Hàm trong Python là một khối mã được đặt tên, có thể được gọi (call) nhiều lần ở nhiều nơi. Mục đích chính:

  • Tăng khả năng tái sử dụng

  • Giảm lặp lại code

  • Tách chương trình thành các phần dễ hiểu

  • Dễ sửa, dễ bảo trì

Cú pháp cơ bản:

def ten_ham():
# khối lệnh

Ví dụ đơn giản:

def xin_chao():
print("Chào bạn, chào mừng bạn học Python!")

Gọi hàm:

xin_chao()

Diễn giải

  • def dùng để định nghĩa hàm

  • ten_ham là tên bạn đặt

  • Trong hàm có thể chứa bao nhiêu dòng mã tùy ý

  • Muốn thực thi thì phải gọi hàm


Hàm có tham số (parameters)

Tham số giúp hàm linh hoạt hơn.
Ví dụ về hàm có tham số:

def chao_ten(ten):
print("Xin chào,", ten)

Gọi hàm:

chao_ten("Nam")
chao_ten("Lan")

Diễn giải

  • ten là tham số

  • Khi gọi hàm, bạn truyền “Nam”, “Lan” → gọi là đối số (argument)

  • Hàm xử lý tuỳ theo dữ liệu được truyền vào


Hàm có nhiều tham số

def cong(a, b):
print("Kết quả:", a + b)
cong(5, 7)
cong(10, 20)

Diễn giải

  • Hàm cong có 2 tham số: a, b

  • Khi gọi hàm, truyền 2 số

  • Hàm thực hiện phép cộng


Hàm có giá trị trả về (return)

Nhiều hàm không chỉ in ra mà phải trả kết quả.

Ví dụ:

def tinh_tuoi(nam_sinh):
return 2025 - nam_sinh
tuoi = tinh_tuoi(1990)
print(“Tuổi là:”, tuoi)

Diễn giải

  • return trả một giá trị về nơi gọi

  • Giá trị đó có thể gán vào biến

  • Sau return, hàm dừng ngay lập tức


Hàm trả về nhiều giá trị

Python cho phép trả về tuple:

def thong_tin_hoc_sinh():
ten = "Minh"
tuoi = 16
lop = "10A2"
return ten, tuoi, lop
a, b, c = thong_tin_hoc_sinh()
print(a, b, c)

Diễn giải

  • Hàm trả về 3 giá trị

  • Bên ngoài dùng kỹ thuật unpacking để nhận từng giá trị


Hàm có giá trị mặc định

def chao(ten="bạn"):
print("Xin chào,", ten)
chao()
chao(“Hà”)

Diễn giải

  • Nếu người dùng không truyền tham số → dùng mặc định

  • Dùng để làm code linh hoạt hơn


Hàm với số lượng tham số linh hoạt (*args, **kwargs)

*args – nhận mọi số lượng tham số dạng tuple

def tong(*args):
s = 0
for so in args:
s += so
return s
print(tong(1, 2))
print(tong(3, 4, 5, 6))

Diễn giải

  • *args gom tất cả đối số thành 1 tuple

  • Dùng khi không biết trước số lượng tham số


**kwargs – tham số kiểu từ khóa dạng dictionary

def thong_tin(**kwargs):
for key, value in kwargs.items():
print(key, ":", value)
thong_tin(ten=“Minh”, tuoi=20, diachi=“Đà Nẵng”)

Diễn giải

  • **kwargs gom đối số dạng key=value

  • Trả ra dictionary

  • Rất hữu ích cho thiết kế API, optional settings


Biến cục bộ và biến toàn cục

Biến cục bộ

def test():
x = 10 # chỉ tồn tại trong hàm
print(x)
test()

Biến toàn cục

x = 100

def test():
print(x)

test()

Thay đổi biến toàn cục trong hàm (dùng global)

x = 10

def tang():
global x
x += 5

tang()
print(x)

Diễn giải

  • Biến cục bộ chỉ tồn tại trong hàm

  • Biến toàn cục tồn tại toàn chương trình

  • Dùng global để sửa biến toàn cục (nên hạn chế)


Hàm lồng nhau (nested function)

def outer():
def inner():
print("Đây là hàm bên trong")
inner()
outer()

Diễn giải

  • Hàm có thể nằm trong hàm khác

  • Dùng nhiều trong lập trình nâng cao


Hàm vô danh (lambda)

binh_phuong = lambda x: x * x
print(binh_phuong(5))

Diễn giải

  • lambda tạo hàm ngắn gọn

  • thường dùng trong filter, map, sort


Ứng dụng thực tế – chương trình quản lý sản phẩm mini

Ví dụ tạo nhiều hàm cho 1 ứng dụng:

san_pham = []

def them_sp(ten, gia):
san_pham.append({“ten”: ten, “gia”: gia})

def liet_ke():
for sp in san_pham:
print(sp[“ten”], “-“, sp[“gia”])

def tim_sp(tu_khoa):
for sp in san_pham:
if tu_khoa.lower() in sp[“ten”].lower():
return sp
return None

def xoa_sp(ten):
for sp in san_pham:
if sp[“ten”] == ten:
san_pham.remove(sp)
return True
return False

them_sp(“Laptop”, 15000)
them_sp(“Chuột”, 200)
them_sp(“Bàn phím”, 400)

liet_ke()

kq = tim_sp(“chuột”)
print(“Kết quả tìm:”, kq)

xoa_sp(“Laptop”)
liet_ke()

Diễn giải rất đầy đủ:

  • Mỗi hành động tách thành 1 hàm riêng

  • Dễ bảo trì

  • Dễ mở rộng hệ thống thành phiên bản lớn hơn


Bài tập thực hành

Bài 1

Viết hàm kiểm tra số nguyên tố.

Bài 2

Viết hàm tìm số lớn nhất trong danh sách.

Bài 3

Viết hàm tính giai thừa.

Bài 4

Viết hàm nhập danh sách tên học sinh, sau đó có hàm in ra danh sách.


Lời giải gợi ý

Bài 1 – Số nguyên tố

def nguyen_to(n):
if n < 2:
return False
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return False
return True

Bài 2 – Số lớn nhất

def lon_nhat(ds):
lon = ds[0]
for x in ds:
if x > lon:
lon = x
return lon

Bài 3 – Giai thừa

def giai_thua(n):
gt = 1
for i in range(1, n+1):
gt *= i
return gt

Bài 4 – Danh sách tên

def nhap_ten():
ds = []
so = int(input("Nhập số lượng: "))
for _ in range(so):
ten = input("Tên: ")
ds.append(ten)
return ds
def in_ten(ds):
for ten in ds:
print(ten)

Kết bài

Hàm (Function) là công cụ mạnh nhất giúp bạn viết code Python sạch, dễ hiểu và tái sử dụng. Khi biết cách chia nhỏ vấn đề thành hàm hợp lý, bạn đã bước vào tư duy lập trình chuyên nghiệp. Đây cũng là kiến thức nền tảng để tiếp tục học các khái niệm quan trọng hơn như Lập trình hướng đối tượng (OOP), module – package, và các framework sau này.

Bài 6 là một trong những bài quan trọng nhất của toàn bộ khóa học.
Ở bài tiếp theo, chúng ta sẽ học về module – import – thư viện trong Python, giúp bạn tận dụng sức mạnh của cả thế giới Python.

Tiếp tục chuỗi series tự học python: (Bài 7): Module và thư viện trong python

1 Trackback / Pingback

  1. (Bài 5): Vòng lặp for while trong python - aidanang.com

Leave a Reply

Your email address will not be published.


*