Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Đối số hàm trong Python
Trong bài này,mình sẽ tìm hiểu về "Đối số hàm trong Python" - cách sử dụng và tầm quan trọng của chúng. Mình sẽ tìm hiểu các loại đối số khác nhau, từ đối số không tên cho đến đối số tên, và cách chúng có thể được sử dụng để truyền thông tin vào hàm.
Trong bài cũng sẽ cung cấp ví dụ minh họa để giúp hiểu rõ hơn về cách sử dụng đối số hàm trong thực tế. Hãy bắt đầu bài học của đối số hàm trong Python và tận dụng chúng để viết code hiệu quả và dễ bảo trì ngay luôn nhé.
Đối số hàm là gì?
Đối số hàm là các giá trị hoặc biến được truyền vào một hàm trong quá trình gọi hàm. Chúng giúp truyền thông tin và dữ liệu từ bên ngoài vào hàm, cho phép hàm thực hiện các thao tác và tính toán dựa trên các giá trị này.
Một hàm có thể có một hoặc nhiều đối số, và mỗi đối số được định nghĩa để chứa một loại cụ thể của dữ liệu. Khi gọi hàm, giá trị được cung cấp cho mỗi đối số, và hàm sẽ sử dụng các giá trị này trong quá trình thực thi.
Bài viết này được đăng tại [free tuts .net]
Có hai loại đối số cơ bản trong Python
Đối số không tên (positional arguments)
Đây là cách thông thường để truyền đối số vào một hàm. Giá trị được truyền theo thứ tự của các đối số được khai báo trong định nghĩa hàm. Đối số không tên yêu cầu đúng số lượng giá trị tương ứng và theo đúng thứ tự. Ví dụ:
def greet(name, age): print("Xin chào", name) print("Bạn", age, "tuổi.") greet("Alice", 25)
Kết quả:
Xin chào Alice Bạn 25 tuổi.
Đối số tên (keyword arguments)
Trong trường hợp này, giá trị được truyền vào hàm bằng cách chỉ định tên của đối số. Điều này cho phép bạn gán giá trị cho các đối số theo bất kỳ thứ tự nào và cũng có thể bỏ qua một số đối số nếu chúng có giá trị mặc định. Ví dụ:
def greet(name, age): print("Xin chào", name) print("Bạn", age, "tuổi.") greet(age=30, name="Bob")
Kết quả:
Xin chào Bob Bạn 30 tuổi.
Nhờ có các đối số hàm, mình có thể truyền thông tin và dữ liệu vào hàm một cách linh hoạt và điều chỉnh hành vi của nó dựa trên các giá trị được cung cấp. Điều này làm cho mã của ta dễ đọc, dễ bảo trì và tái sử dụng.
Các biến của Đối số hàm trong Python
Đối số mặc định trong Python
Định nghĩa đối số mặc định
Đối số mặc định là một giá trị được gán cho một đối số trong khai báo hàm. Khi gọi hàm, nếu giá trị cho đối số đó không được cung cấp, giá trị mặc định sẽ được sử dụng thay thế.
Cách sử dụng và ưu điểm
Sử dụng đối số mặc định giúp hàm trở nên linh hoạt hơn bằng cách cho phép ta gọi hàm mà không cần cung cấp giá trị cho tất cả các đối số. Nếu không có giá trị nào được truyền cho đối số có giá trị mặc định, hàm vẫn có thể hoạt động bình thường.
Đối số mặc định cũng giúp giảm bớt lỗi khi gọi hàm. Nếu một số đối số không được cung cấp trong quá trình gọi hàm, giá trị mặc định sẽ được sử dụng để tránh lỗi "missing argument" (thiếu đối số).
Ví dụ minh họa:
def greet(name, message="Xin chào!"): print(message, name) greet("Alice", "Chào buổi sáng!") greet("Bob")
Kết quả:
Chào buổi sáng! Alice Xin chào! Bob
Trong ví dụ trên, ta định nghĩa một hàm greet()
với hai đối số: name
và message
. Đối số message có giá trị mặc định là "Xin chào!".
Khi gọi hàm greet("Alice", "Chào buổi sáng!")
, mình cung cấp giá trị "Chào buổi sáng!" cho đối số message, và kết quả được in ra là "Chào buổi sáng! Alice".
Khi gọi hàm greet("Bob")
mà không cung cấp giá trị cho đối số message, giá trị mặc định "Xin chào!" sẽ được sử dụng và kết quả là "Xin chào! Bob".
Truyền đối số theo thứ tự tùy ý trong Python
Giới thiệu *args và **kwargs
Trong Python, *args và **kwargs là cách để truyền đối số theo thứ tự tùy ý vào một hàm.
*args được sử dụng để truyền một danh sách các đối số không tên (positional arguments) vào hàm. Nó cho phép ta truyền vào hàm một số lượng đối số không xác định và truy cập chúng thông qua một tuple.
**kwargs được sử dụng để truyền một danh sách các đối số tên (keyword arguments) vào hàm. Nó cho phép ta truyền vào hàm một số lượng đối số không xác định và truy cập chúng thông qua một từ điển (dictionary).
Cách sử dụng và ưu điểm
*args: Đối số *args được đặt sau các đối số khác và cho phép truyền vào một số lượng đối số không xác định. Trong thân hàm, *args sẽ được truy cập dưới dạng một tuple.
**kwargs: Đối số **kwargs cũng được đặt sau các đối số khác và cho phép truyền vào một số lượng đối số không xác định. Trong thân hàm, **kwargs sẽ được truy cập dưới dạng một từ điển.
Ưu điểm của việc sử dụng *args và **kwargs là chúng cung cấp tính linh hoạt cao cho hàm, cho phép ta truyền một số lượng đối số không xác định vào hàm mà không cần biết trước số lượng và tên của chúng.
Ví dụ minh họa
def process_data(*args, **kwargs): for arg in args: print("Đối số không tên:", arg) for key, value in kwargs.items(): print("Đối số tên:", key, "=", value) process_data("Alice", 25, country="USA", language="English")
Kết quả:
Đối số không tên: Alice Đối số không tên: 25 Đối số tên: country = USA Đối số tên: language = English
Trong ví dụ trên, ta định nghĩa một hàm process_data()
với đối số *args và **kwargs. Khi gọi hàm process_data("Alice", 25, country="USA", language="English")
, mình truyền vào hàm các đối số không tên "Alice" và 25, cũng như các đối số tên "country" với giá trị "USA" và "language" với giá trị "English".
Trong thân hàm, ta duyệt qua *args để in ra các đối số không tên "Alice" và 25. Sau đó, ta duyệt qua **kwargs để in ra các đối số tên "country = USA" và "language = English".
Hàm với số đối số biến đổi trong Python
Đối số biến đổi
Đối số biến đổi (variable-length arguments) trong Python cho phép hàm nhận số lượng đối số không xác định. Đối số biến đổi được ký hiệu bằng dấu * và cho phép truyền vào hàm một danh sách các đối số không tên.
Khi sử dụng đối số biến đổi, các đối số không tên sẽ được đóng gói thành một tuple và có thể được truy cập trong thân hàm.
Ví dụ minh họa
def calculate_sum(*numbers): total = 0 for number in numbers: total += number return total result = calculate_sum(1, 2, 3, 4, 5) print("Tổng các số:", result)
Kết quả:
Tổng các số: 15
Trong ví dụ trên, ta định nghĩa một hàm calculate_sum()
với đối số biến đổi *numbers. Khi gọi hàm calculate_sum(1, 2, 3, 4, 5)
,mình ta truyền vào hàm một danh sách các đối số không tên (1, 2, 3, 4, 5).
Trong thân hàm, ta duyệt qua tuple numbers để tính tổng của các số được truyền vào. Kết quả được trả về là tổng của các số là 15.
Hàm với số lượng đối số không xác định
Hàm với số lượng đối số không xác định cho phép mình truyền vào hàm một số lượng đối số không xác định, bao gồm cả đối số tên và không tên. Điều này được thực hiện bằng cách kết hợp sử dụng *args và **kwargs.
Ví dụ minh họa
def process_data(*args, **kwargs): for arg in args: print("Đối số không tên:", arg) for key, value in kwargs.items(): print("Đối số tên:", key, "=", value) process_data(1, 2, name="Alice", age=25)
Kết quả:
Đối số không tên: 1 Đối số không tên: 2 Đối số tên: name = Alice Đối số tên: age = 25
Trong ví dụ trên, ta định nghĩa một hàm process_data()
với đối số biến đổi *args và **kwargs. Khi gọi hàm process_data(1, 2, name="Alice", age=25),
mình truyền vào hàm các đối số không tên (1, 2) và các đối số tên "name" với giá trị "Alice" và "age" với giá trị 25.
Trong thân hàm, ta duyệt qua *args để in ra các đối số không tên (1, 2). Sau đó, ta duyệt qua **kwargs để in ra các đối số tên "name = Alice" và "age = 25".
Đối số hàm và lambda trong Python
Lambda expression trong Python
Lambda expression là một cách để tạo ra các hàm vô danh (anonymous functions) trong Python. Chúng được gọi là "vô danh" vì không cần định nghĩa tên hàm như các hàm thông thường.
Lambda expression có cú pháp ngắn gọn và thường được sử dụng để định nghĩa các hàm đơn giản và ngắn.
Sử dụng lambda expression làm đối số hàm
Trong Python, lambda expression có thể được sử dụng như một đối số hàm trong các hàm khác. Điều này cho phép ta tạo ra các hàm vô danh một cách nhanh chóng và tiện lợi, thường được sử dụng trong các trường hợp mà chỉ cần sử dụng một lần duy nhất.
Ví dụ minh họa
def calculate(operation, a, b): result = operation(a, b) print("Kết quả:", result) # Sử dụng lambda expression làm đối số hàm calculate(lambda x, y: x + y, 5, 3) calculate(lambda x, y: x * y, 4, 2)
Kết quả:
Kết quả: 8 Kết quả: 8
Trong ví dụ trên, ta định nghĩa một hàm calculate()
với các đối số operation
, a, và b. Hàm calculate()
thực hiện phép tính được chỉ định bởi operation
trên a và b, và in ra kết quả.
Mình sử dụng lambda expression làm đối số hàm khi gọi hàm calculate()
. Trong ví dụ, ta sử dụng lambda expression lambda x, y: x + y để thực hiện phép cộng và lambda x, y: x * y để thực hiện phép nhân.
Kết quả được in ra là 8 cho cả phép cộng và phép nhân.
Kết bài viết
Trong bài viết này, mình đã tìm hiểu về đối số hàm trong Python và các khía cạnh liên quan. Mình đã tìm hiểu các khái niệm như đối số mặc định, truyền đối số theo thứ tự tùy ý, đối số biến đổi và hàm với số lượng đối số không xác định. Ta cũng đã tìm hiểu cách sử dụng lambda expression làm đối số hàm.
Hy vọng rằng sau bài viết này, bạn đã có một cái nhìn tổng quan về cách làm việc với đối số hàm trong Python và có thể áp dụng những kiến thức này vào việc phát triển mã của mình.