Hàm (function) là các khối mã có tên, được thiết kế để thực hiện một nhiệm vụ cụ thể. Hàm cho phép bạn viết mã một lần và có thể chạy lại bất cứ khi nào cần thực hiện cùng một tác vụ. Hàm có thể nhận dữ liệu đầu vào và trả về kết quả đầu ra. Việc sử dụng hàm một cách hiệu quả giúp chương trình của bạn dễ viết, dễ đọc, dễ kiểm tra và dễ sửa lỗi hơn.
Cú pháp Function trong Python
def function_name(parameters): """docstring""" return result
- def : Từ khóa dùng để khai báo một hàm trong Python.
- function_name : Tên hàm do bạn đặt (viết theo quy tắc đặt tên biến trong Python).
- parameters : Danh sách tham số (có thể có hoặc không) được truyền vào hàm khi gọi.
- docstring là chuỗi mô tả hàm, giúp người đọc hiểu chức năng của hàm, viết trong dấu “”” ba nháy để ghi chú thích nhiều dòng.
- return dùng để trả về kết quả từ hàm.
Gọi Function
Để gọi một hàm, sử dụng tên hàm kèm theo dấu ngoặc đơn:
def hello(): print('Hello World') hello()
Kết quả
"Hello World"
Đoạn code định nghĩa một hàm hello() bằng cách sử dụng từ khóa def. Khi hàm được gọi, nó thực thi lệnh print(‘Hello World’) để in chuỗi “Hello World” ra màn hình. Cuối cùng, hàm hello() được gọi để hiển thị kết quả.
Return Value
Định nghĩa: Câu lệnh return được sử dụng để kết thúc việc thực thi của hàm và “trả về” kết quả (giá trị của biểu thức đứng sau từ khóa return) cho nơi gọi hàm. Các câu lệnh sau return sẽ không được thực thi. Nếu câu lệnh return không có biểu thức nào, giá trị đặc biệt None sẽ được trả về.
Lưu ý: Câu lệnh return không thể được sử dụng bên ngoài hàm.
a = 2 b = 3 def get_sum_value(a, b): total = a + b return(total) get_sum_value(a, b)
Kết quả trả về:
5
Đoạn code khai báo hai biến a = 2 và b = 3, sau đó định nghĩa hàm get_sum_value(a, b) để tính tổng hai số và trả về kết quả. Khi gọi hàm get_sum_value(a, b), chương trình thực hiện phép cộng 2 + 3 và trả về giá trị 5.
Đối số trong Function
Đối số (Arguments) là các giá trị được truyền vào bên trong dấu ngoặc đơn của hàm. Một hàm có thể có bất kỳ số lượng đối số nào, được phân tách bằng dấu phẩy. Trong Python, chúng ta có các loại đối số sau:
- Required arguments / Positional Arguments
- Keyword arguments)
- Default arguments
- Variable-length arguments
Required arguments
Đối số bắt buộc (Required arguments) là các đối số được truyền vào hàm theo đúng thứ tự vị trí. Số lượng đối số trong lời gọi hàm phải khớp chính xác với số lượng đối số trong định nghĩa hàm.
Sau đây là ví dụ những lỗi sai thường gặp:
def printme(str): "This prints a passed string into this function" print(str) return; printme()
Lỗi hiển thị như sau: TypeError: printme() missing 1 required positional argument: ‘str’
- Hàm printme(str) yêu cầu một đối số bắt buộc (str), nhưng khi gọi hàm printme(), không có đối số nào được truyền vào.
- Do đó, Python không thể thực thi hàm và báo lỗi thiếu tham số.
Ví dụ tiếp theo:
def printme(str): "This prints a passed string into this function" print(str) return; printme("Hello!!!", "Goodbye!!!")
Khi chạy đoạn code này trong Python, nó sẽ báo lỗi: TypeError: printme() takes 1 positional argument but 2 were given
- Hàm printme(str) chỉ nhận một tham số (str).
- Khi gọi hàm, bạn truyền vào hai đối số: “Hello!!!” và “Goodbye!!!”.
- Python không thể xử lý vì hàm chỉ định nghĩa một tham số mà lại nhận hai giá trị.
Code đúng mà Python nhận được trong trường hợp này phải được truyền tham số với đúng một giá trị được định nghĩa:
def printme(str): "This prints a passed string into this function" print(str) return; printme("Hello!!!")
Kết quả sau khi chạy: Hello!!!
Keyword Argument
Bạn cũng có thể truyền đối số bằng cú pháp key = value. Bằng cách này, thứ tự của các đối số không quan trọng. Ví dự như sau:
def my_function(child3, child2, child1): print("The youngest child is " + child3) my_function(child1 = 'Emil', child2 ='Tobias', child3 = 'Linus')
Kết quả sau khi chạy: The youngest child is Linus
Hàm my_function(child3, child2, child1) có ba tham số. Khi gọi hàm, ta sử dụng đối số từ khóa (key=value), nên thứ tự truyền vào không quan trọng.
- child1 = ‘Emil’
- child2 = ‘Tobias’
- child3 = ‘Linus’
Với câu lệnh print(“The youngest child is ” + child3) sẽ in ra giá trị của child3, tức là “Linus”.
Default Argument
Một đối số mặc định là một đối số sẽ nhận giá trị mặc định nếu không có giá trị nào được truyền vào trong lời gọi hàm cho đối số đó.
def printinfo(name, age=35): "This prints a passed info into this function" print("Name:", name) print("Age", age) return printinfo(age=50, name="miki") printinfo(name="miki")
Kết quả sau khi chạy:
Name: miki Age 50 Name: miki Age 35
Hàm printinfo(name, age=35) có tham số age với giá trị mặc định là 35. Khi gọi hàm:
- printinfo(age=50, name=”miki”): truyền đầy đủ giá trị, nên age = 50.
- printinfo(name=”miki”): không truyền age, nên mặc định age = 35.
Variable-length arguments
Đôi khi, bạn cần xử lý một hàm với nhiều đối số hơn số lượng đã xác định trong định nghĩa hàm. Những đối số này được gọi là đối số có độ dài thay đổi và không được đặt tên trong định nghĩa hàm, không giống như đối số bắt buộc và đối số mặc định.
Để định nghĩa một hàm có thể nhận số lượng đối số tùy ý, ta thêm dấu * trước một tham số. Đối với đối số từ khóa, ta sử dụng **.
def sum_numbers(*args): total = sum(args) print("Tổng:", total) sum_numbers(1, 2, 3) sum_numbers(5, 10, 15, 20)
Kết quả sau khi chạy:
Tổng: 6 Tổng: 50
Hàm sum_numbers(*args) sử dụng tham số *args để nhận một số lượng đối số không cố định dưới dạng tuple. Sau đó, hàm tính tổng các giá trị bằng sum(args) và in kết quả ra màn hình. Khi gọi sum_numbers(1, 2, 3), tổng là 6, và khi gọi sum_numbers(5, 10, 15, 20), tổng là 50. Việc sử dụng *args giúp hàm linh hoạt, có thể xử lý nhiều bộ giá trị khác nhau mà không cần sửa đổi code.
Kết luận
Hàm trong Python giúp tổ chức mã gọn gàng, tái sử dụng và giảm lỗi. Sử dụng def để định nghĩa, truyền đối số linh hoạt và return để trả kết quả. Hiểu và dùng hàm hiệu quả giúp tối ưu hóa lập trình.
Xem thêm:
Xử lý và trực quan hóa dữ liệu với Python