INTRODUCTION
FLOW CONTROL
FUNCTIONS
DATATYPES
OBJECT & CLASS
Bài tập Python: Lập trình hướng đối tượng (OOP) trong Python Lập trình hướng đối tượng trong Python Class Variables trong Python Tìm hiểu về Methods trong Python Cách sử dụng phương thức __init__() trong Python Các biến Instance trong Python Tìm hiểu về Class Attributes trong Python Hàm Static Methods trong Python Phương thức __str__ trong Python Phương thức __repr__ trong Python Phương thức eq trong Python Tìm hiểu phương thức __hash__ trong Python Phương thức __bool__ trong Python Phương thức del trong Python Tìm hiểu về lớp Property trong Python Tìm hiểu về nạp chồng toán tử trong Python Trình Decorator Property trong Python Thuộc tính chỉ đọc trong Python Thuộc tính Delete trong Python Sử dụng super() trong Python Sử dụng __slots__ trong Python Cách sử dụng Protocol trong Python Sử dụng Enum aliases và @enum.unique trong Python Tùy chỉnh và mở rộng lớp Enum trong Python Cách sử dụng hàm Auto() của Python Single Responsibility Principle trong Python Nguyên tắc Đóng-Mở trong Python Nguyên tắc thay thế Liskov - LSP trong Python Interface Segregation Principle - ISP trong Python. Nguyên tắc đảo ngược sự phụ thuộc trong Python Đa kế thừa trong Python Tìm hiểu về các lớp mixin trong Python Mô tả Descriptors trong Python Phân biệt Data Descriptor và Non-data Descriptor trong Python Phương thức __new__ trong Python Tìm hiểu về Class Type trong Python Lớp Metaclass trong Python Ví dụ sử dụng metaclass trong Python Tìm hiểu về decorator dataclass trong Python Tìm hiểu về các ngoại lệ trong Python Ngoại lệ Raise trong Python Sử dụng câu lệnh raise from trong Python Ngoại lệ tùy chỉnh trong Python Module trong Python Package trong Python Class trong Python Hàm khởi tạo trong Python Kế thừa trong Python Đa kế thừa trong Python Setter và Getter trong Python Override trong Python Interface trong Python Bài tập Python: Module và 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:

Hướng dẫn xây dựng Command-Line Interface (CLI) bằng Quo trong Python

Hướng dẫn xây dựng Command-Line Interface (CLI) bằng Quo trong Python

Hướng dẫn toàn diện về module datetime trong Python

Hướng dẫn toàn diện về module datetime trong Python

Cách truy cập và thiết lập biến môi trường trong Python

Cách truy cập và thiết lập biến môi trường trong Python

Lớp dữ liệu (Data Classes) trong Python với decorator @dataclass

Lớp dữ liệu (Data Classes) trong Python với decorator @dataclass

Từ khóa yield trong Python

Từ khóa yield trong Python

Sự khác biệt giữa sort() và sorted() trong Python

Sự khác biệt giữa sort() và sorted() trong Python

Sử dụng Poetry để quản lý dependencies trong Python

Sử dụng Poetry để quản lý dependencies trong Python

Định dạng chuỗi Strings trong Python

Định dạng chuỗi Strings trong Python

Một tác vụ phổ biến khi làm việc với danh sách trong Python

Một tác vụ phổ biến khi làm việc với danh sách trong Python

Làm việc với các biến môi trường trong Python

Làm việc với các biến môi trường trong Python

Sự khác biệt giữa set() và frozenset() trong Python

Sự khác biệt giữa set() và frozenset() trong Python

Sự khác biệt giữa iterator và iterable trong Python

Sự khác biệt giữa iterator và iterable trong Python

Cách làm việc với file tarball/tar trong Python

Cách làm việc với file tarball/tar trong Python

Chuyển đổi kiểu dữ liệu trong Python

Chuyển đổi kiểu dữ liệu trong Python

Sự khác biệt giữa toán tử == và is trong Python

Sự khác biệt giữa toán tử == và is trong Python

Làm việc với file ZIP trong Python

Làm việc với file ZIP trong Python

Cách sử dụng ThreadPoolExecutor trong Python

Cách sử dụng ThreadPoolExecutor trong Python

Sự khác biệt giữa byte objects và string trong Python

Sự khác biệt giữa byte objects và string trong Python

Xử lý độ chính xác các hàm floor, ceil, round, trunc, format  trong Python

Xử lý độ chính xác các hàm floor, ceil, round, trunc, format trong Python

Cách lặp qua nhiều list với hàm zip() trong Python

Cách lặp qua nhiều list với hàm zip() trong Python

Top