Hàm là đoạn mã có tên, viết một lần dùng nhiều lần. Đây là công cụ quan trọng nhất để chương trình gọn và dễ bảo trì.
Bạn sẽ học được
- Định nghĩa và gọi hàm
- Dùng tham số, giá trị mặc định và giá trị trả về
- Hiểu phạm vi biến cục bộ và toàn cục
- Viết chú thích mô tả hàm (docstring)
Thuật ngữ cần biết
- Hàm (function)
- Khối lệnh có tên, nhận đầu vào và có thể trả kết quả.
- Tham số (parameter)
- Tên biến khai báo trong định nghĩa hàm.
- Đối số (argument)
- Giá trị thật truyền vào khi gọi hàm.
- return
- Lệnh trả kết quả về nơi gọi và kết thúc hàm.
- Phạm vi (scope)
- Vùng mà một biến còn hiệu lực.
Định nghĩa và gọi hàm
def chao(ten):
print("Xin chào,", ten)
chao("Lan")
chao("Minh")Từ khóa def mở đầu, tên hàm, danh sách tham số trong ngoặc, dấu hai chấm, thân hàm thụt lề.
Giá trị trả về và tham số mặc định
def dien_tich_hcn(dai, rong=1):
"""Tính diện tích hình chữ nhật."""
return dai * rong
print(dien_tich_hcn(5, 3)) # 15
print(dien_tich_hcn(5)) # 5, rong lấy mặc định
print(dien_tich_hcn(rong=2, dai=4)) # truyền theo tênMột hàm có thể trả nhiều giá trị: return tong, tich (thực chất trả về một bộ).
Phạm vi biến
x = 10 # biến toàn cục
def thu():
x = 99 # biến cục bộ, không ảnh hưởng x ngoài
return x
thu()
print(x) # vẫn 10Biến tạo trong hàm chỉ tồn tại trong hàm. Nên truyền dữ liệu bằng tham số và nhận kết quả bằng return thay vì dùng biến toàn cục.
Hàm nhỏ giải quyết một việc
def la_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
print([n for n in range(1, 30) if la_nguyen_to(n)])Tình huống: Tính tiền hóa đơn
Cửa hàng cần tính tiền sau giảm giá nhiều lần. Viết một hàm dùng chung thay vì chép công thức nhiều chỗ.
def tinh_tien(gia, so_luong, giam=0):
tong = gia * so_luong
return tong * (1 - giam)
print(tinh_tien(45000, 3))
print(tinh_tien(45000, 3, giam=0.1))Mẹo hay
Một hàm nên làm đúng một việc và có tên là động từ: tinh_tong, kiem_tra_email.
Lưu ý
Nếu hàm quên return, kết quả là None. Đừng dùng danh sách rỗng [] làm giá trị mặc định tham số; hãy dùng None.
Thực hành
- Viết hàm
max2(a, b)trả số lớn hơn. - Viết hàm đổi độ C sang độ F.
- Viết hàm kiểm tra năm nhuận, dùng lại ở bài điều kiện.
- Viết hàm nhận danh sách điểm, trả điểm trung bình.
Tóm tắt bài học
deftạo hàm,returntrả kết quả.- Tham số có thể có giá trị mặc định, truyền theo vị trí hoặc tên.
- Biến trong hàm là cục bộ.
- Chia chương trình thành các hàm nhỏ, tên rõ nghĩa.