- 1 1. def trong Python là gì?
- 2 2. Cú pháp cơ bản và cách sử dụng def
- 3 3. Tham số và giá trị mặc định của hàm
- 4 4. Trả về giá trị với câu lệnh return
- 5 5. Phạm vi (scope) và thời gian tồn tại (lifetime) của biến
- 6 6. Ví dụ thực tế và cách sử dụng
- 7 7. Các khái niệm nâng cao về hàm
- 8 8. Tổng kết
- 9 9. Câu hỏi thường gặp (FAQs)
1. def
trong Python là gì?
Từ khóa def
trong Python được sử dụng để định nghĩa hàm. Hàm là một cấu trúc cơ bản giúp tái sử dụng mã nguồn và tổ chức chương trình một cách hợp lý hơn. Bằng cách sử dụng def
, bạn có thể tạo ra các khối mã thực hiện các tác vụ cụ thể và sử dụng lại nhiều lần. Điều này giúp mã dễ đọc hơn và giảm nguy cơ xảy ra lỗi.
Cú pháp cơ bản của từ khóa def
Cú pháp cơ bản như sau:
def tên_hàm(tham_số1, tham_số2, ...):
xử_lý
return giá_trị_trả_về
Sau def
là tên hàm, bên trong dấu ngoặc là các tham số (nếu có). Sau dấu hai chấm :
là khối mã thụt lề thể hiện nội dung xử lý. Nếu cần, bạn có thể sử dụng câu lệnh return
để trả về giá trị từ hàm.
2. Cú pháp cơ bản và cách sử dụng def
Cách định nghĩa hàm cơ bản
Khi sử dụng từ khóa def
để định nghĩa hàm, bạn cần chỉ định tên hàm, danh sách tham số và nội dung xử lý. Ví dụ sau là một hàm cơ bản xuất ra “Hello, World!”:
def say_hello():
print("Hello, World!")
Hàm này sẽ in ra “Hello, World!” khi bạn gọi say_hello()
.
Tầm quan trọng của thụt lề (indentation)
Trong Python, thụt lề là rất quan trọng. Mọi dòng mã trong một hàm phải có cùng mức thụt lề để Python xác định phạm vi của khối lệnh. Nếu thụt lề sai, chương trình sẽ báo lỗi.
Gọi hàm
Bạn có thể gọi hàm đã định nghĩa bằng cách sử dụng tên hàm kèm theo dấu ngoặc, truyền vào tham số nếu có.
say_hello()

3. Tham số và giá trị mặc định của hàm
Tham số vị trí và tham số từ khóa
Hàm có thể nhận các tham số, bao gồm tham số vị trí và tham số từ khóa. Tham số vị trí được truyền theo thứ tự khi gọi hàm. Tham số từ khóa (keyword) có thể truyền theo tên mà không cần đúng thứ tự.
def greet(name, greeting="Hello"):
print(f"{greeting}, {name}!")
Với hàm trên, nếu gọi greet("Alice")
thì sẽ in ra “Hello, Alice!” nhờ greeting
có giá trị mặc định.
Tham số biến dài
Đôi khi bạn cần hàm nhận số lượng tham số không xác định. Trong Python, có thể dùng *args
và **kwargs
cho mục đích này.
def print_args(*args):
for arg in args:
print(arg)
print_args(1, 2, 3)
Ở ví dụ trên, *args
sẽ nhận tất cả các tham số truyền vào dưới dạng tuple.
4. Trả về giá trị với câu lệnh return
Cách sử dụng return
Nếu muốn hàm trả về một giá trị, bạn dùng return
. Nếu không có return
, hàm sẽ trả về None
theo mặc định.
def add(a, b):
return a + b
result = add(3, 4)
print(result) # 7
Hàm add
trên trả về tổng của hai số. Bạn có thể gán giá trị trả về cho một biến khác.
Trả về nhiều giá trị
Python cho phép trả về nhiều giá trị bằng cách phân tách bằng dấu phẩy, khi đó kết quả trả về là một tuple.
def swap(a, b):
return b, a
x, y = swap(1, 2)
print(x, y) # 2 1

5. Phạm vi (scope) và thời gian tồn tại (lifetime) của biến
Biến cục bộ và biến toàn cục
Biến khai báo trong hàm gọi là biến cục bộ, chỉ sử dụng được trong hàm đó. Biến khai báo ngoài hàm là biến toàn cục, dùng được trong toàn bộ chương trình.
x = "global"
def func():
x = "local"
print(x)
func() # local
print(x) # global
Ở ví dụ này, biến x
trong hàm func
là biến cục bộ, không ảnh hưởng tới biến x
bên ngoài.
Từ khóa global
Nếu muốn thay đổi biến toàn cục trong hàm, bạn cần dùng từ khóa global
.
x = "global"
def change_global():
global x
x = "changed"
change_global()
print(x) # changed
6. Ví dụ thực tế và cách sử dụng
Tối ưu hóa chương trình bằng hàm
Sử dụng hàm giúp tối ưu hóa chương trình rất nhiều. Ví dụ, bạn có thể nhóm các phép tính hoặc xử lý dữ liệu lặp lại vào trong hàm để tránh lặp mã.
def calculate_area(radius):
return 3.14 * radius * radius
area1 = calculate_area(5)
area2 = calculate_area(10)
Hàm calculate_area
trên giúp tính diện tích hình tròn và có thể dùng lại nhiều lần.
Ví dụ sử dụng hàm
Một ví dụ khác, tạo hàm định dạng văn bản:
def format_text(text, alignment="left"):
if alignment == "left":
return text.ljust(20)
elif alignment == "right":
return text.rjust(20)
elif alignment == "center":
return text.center(20)
print(format_text("Hello", "center"))
Hàm này sẽ căn trái, phải hoặc giữa cho văn bản đầu vào.

7. Các khái niệm nâng cao về hàm
Hàm lồng nhau (Nested Function)
Trong Python, bạn có thể định nghĩa hàm bên trong một hàm khác, gọi là hàm lồng nhau. Hàm lồng nhau chỉ có thể truy cập bên trong hàm ngoài.
def outer():
def inner():
print("This is the inner function")
inner()
Hàm không tên (Lambda)
Sử dụng từ khóa lambda
, bạn có thể tạo hàm không tên (anonymous function), phù hợp cho các tác vụ ngắn, sử dụng một lần.
square = lambda x: x * x
print(square(5)) # 25
Decorator
Decorator cho phép mở rộng chức năng của hàm mà không thay đổi mã nguồn của hàm gốc. Decorator nhận một hàm làm tham số và trả về một hàm mới.
def decorator(func):
def wrapper():
print("Before the function")
func()
print("After the function")
return wrapper
@decorator
def say_hello():
print("Hello!")
say_hello()
8. Tổng kết
Bài viết này đã giải thích chi tiết về cách định nghĩa hàm với từ khóa def
trong Python, tham số, giá trị trả về, phạm vi biến, và các chức năng nâng cao khác. Việc sử dụng hàm sẽ giúp chương trình của bạn hiệu quả và có cấu trúc hơn. Hãy tận dụng kiến thức này để tạo ra nhiều hàm hữu ích, nâng cao kỹ năng lập trình Python của bạn.

9. Câu hỏi thường gặp (FAQs)
Sự khác nhau giữa return
và print
?
return
và print
có vai trò khác nhau. return
trả về giá trị từ hàm để sử dụng ở nơi khác, ví dụ để gán cho biến khác. print
chỉ hiển thị giá trị ra màn hình, giá trị này không sử dụng lại được trong chương trình.
def add(a, b):
return a + b
result = add(3, 4) # result sẽ nhận giá trị 7
print(result) # 7
def display_message():
print("Hello, World!")
display_message() # Sẽ in ra "Hello, World!" nhưng không trả về giá trị
Lợi ích của việc sử dụng hàm lồng nhau?
Hàm lồng nhau giúp tạo các hàm cục bộ chỉ dùng trong phạm vi hẹp, tăng tính đóng gói và khả năng tái sử dụng mã. Ngoài ra, chúng có thể truy cập các biến trong phạm vi của hàm ngoài, phù hợp cho các xử lý đặc thù.
Khi nào nên dùng tham số biến dài?
Khi số lượng tham số truyền vào hàm là không xác định, bạn nên sử dụng tham số biến dài. Ví dụ như hàm tính tổng của nhiều số bất kỳ.
def add_all(*args):
return sum(args)
result = add_all(1, 2, 3, 4, 5) # 15
Làm thế nào để gọi hàm đệ quy?
Hàm đệ quy là hàm tự gọi lại chính nó. Dùng trong các bài toán như tính giai thừa. Tuy nhiên, cần cẩn thận để tránh lỗi tràn ngăn xếp.
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
result = factorial(5) # 120