INTRODUCTION
FLOW CONTROL
FUNCTIONS
DATATYPES
OBJECT & CLASS
ADVANCED TOPICS
BỔ SUNG
PYTHON CĂN BẢN
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

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.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

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ì?

Python Argument Function png

Đố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 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.

Cùng chuyên mục:

Tìm hiểu Event loop trong Python

Tìm hiểu Event loop trong Python

Cách sử dụng ProcessPoolExecutor trong Python

Cách sử dụng ProcessPoolExecutor trong Python

Sử dụng đa xử lý trong Python

Sử dụng đa xử lý trong Python

Cách sử dụng Thread-safe Queue trong Python

Cách sử dụng Thread-safe Queue trong Python

Sử dụng Semaphore trong Python

Sử dụng Semaphore trong Python

Cách dừng Luồng trong Python

Cách dừng Luồng trong Python

Cách sử dụng Semaphore trong Python

Cách sử dụng Semaphore trong Python

Đối tượng Threading Event trong Python

Đối tượng Threading Event trong Python

Tìm hiểu về điều kiện race của threading Lock trong Python

Tìm hiểu về điều kiện race của threading Lock trong Python

Sử dụng lớp ThreadPoolExecutor trong Python

Sử dụng lớp ThreadPoolExecutor trong Python

Các luồng Daemon trong Python

Các luồng Daemon trong Python

Tìm hiểu về Multithreading trong Python

Tìm hiểu về Multithreading trong Python

Cách trả về giá trị từ một Thread trong Python

Cách trả về giá trị từ một Thread trong Python

Cách mở rộng Class Thread trong Python

Cách mở rộng Class Thread trong Python

Cách sử dụng module threading trong Python

Cách sử dụng module threading trong Python

Sự khác biệt giữa các Processes and Threads

Sự khác biệt giữa các Processes and Threads

Tài liệu tham khảo nhanh về Regex trong Python

Tài liệu tham khảo nhanh về Regex trong Python

Hàm Flags của Regex trong Python

Hàm Flags của Regex trong Python

Hàm split() của Regex trong Python

Hàm split() của Regex trong Python

Hàm finditer() của Regex trong Python

Hàm finditer() của Regex trong Python

Top