HomeLập trìnhPythonCách sử dụng...

Cách sử dụng *args và **kwargs trong Python


Trong bài viết này, chúng ta sẽ thảo luận *args**kwargs bằng Python cùng với cách sử dụng của chúng và một số ví dụ.

Khi viết một hàm, chúng ta thường cần truyền giá trị cho hàm. Những giá trị này được gọi là đối số chức năng.

Vấn đề với đối số chức năng

Hãy định nghĩa một hàm để cộng hai số trong Python. Chúng tôi sẽ viết nó như thế này:

def add(x, y):
    return x+y

print(add(2,3))

Đầu ra:

5

Nếu bạn cần thêm ba số thì sao? Đơn giản, chúng ta có thể sửa đổi hàm để chấp nhận ba đối số và trả về tổng của chúng là:

def add(x, y, z):
    return x+y+z

print(add(2, 3, 5))

Đầu ra:

10

Đó không phải là khá đơn giản? Đúng!

Nhưng nếu chúng ta lại được yêu cầu chỉ cộng hai số thì sao? Chức năng sửa đổi của chúng tôi sẽ giúp chúng tôi có được tổng? Hãy xem nào:

def add(x, y, z):
    return x+y+z


print(add(2, 3))

Đầu ra:

Traceback (most recent call last):
  File "D:\Quarantine\Test\Blog-Codes\args-kwargs\main.py", line 14, in <module>
    print(add(2, 3))
TypeError: add() missing 1 required positional argument: 'z'

Bạn thấy vấn đề?

Vấn đề phát sinh khi chúng ta có một số đối số thay đổi. Chúng ta có nên tiếp tục sửa đổi hàm để chấp nhận số lượng đối số chính xác không? Tất nhiên là không, chúng tôi sẽ không làm điều này.

Đọc thêm  Danh sách chỉ mục nằm ngoài phạm vi - Lỗi Python [Solved]

Vì vậy, phải có một số cách khác để làm điều đó. Đây là đâu *args**kwargs nhay vao.

Bạn có thể dùng *args**kwargs làm đối số của hàm khi bạn không chắc chắn về số lượng đối số cần truyền vào hàm.

Cách sử dụng *args trong Python

*args cho phép chúng tôi chuyển một số biến đối số không phải từ khóa cho hàm Python. Trong hàm, chúng ta nên sử dụng dấu hoa thị (*) trước tên tham số để truyền một số đối số thay đổi.

def add(*args):
    print(args, type(args))

add(2, 3)

Đầu ra:

(2, 3) <class 'tuple'>

Do đó, chúng tôi chắc chắn rằng các đối số được truyền này tạo một bộ bên trong hàm có cùng tên với tham số không bao gồm *.

Bây giờ chúng ta hãy viết lại add() chức năng với một số lượng đối số thay đổi.

def add(*numbers):
    total = 0
    for num in numbers:
        total += num
    return total


print(add(2, 3))
print(add(2, 3, 5))
print(add(2, 3, 5, 7))
print(add(2, 3, 5, 7, 9))

Đầu ra:

5
10
17
26

Lưu ý rằng tên của đối số không nhất thiết phải là args – nó có thể là bất cứ thứ gì. Trong trường hợp này nó là numbers. Nhưng nó thường là một cách tiêu chuẩn để sử dụng *args như một cái tên.

Cách sử dụng **kwargs trong Python

**kwargs cho phép chúng tôi chuyển một số lượng đối số từ khóa khác nhau cho hàm Python. Trong hàm, chúng ta sử dụng dấu hoa thị kép (**) trước tên tham số để biểu thị loại đối số này.

def total_fruits(**kwargs):
    print(kwargs, type(kwargs))


total_fruits(banana=5, mango=7, apple=8)

Đầu ra:

{'banana': 5, 'mango': 7, 'apple': 8} <class 'dict'>

Do đó, chúng ta thấy rằng các đối số, trong trường hợp này, được truyền dưới dạng từ điển và các đối số này tạo ra một từ điển bên trong hàm có tên giống như tham số loại trừ **.

Bây giờ, hãy hoàn thành total_fruits() hàm trả về tổng số trái cây.

def total_fruits(**fruits):
    total = 0
    for amount in fruits.values():
        total += amount
    return total


print(total_fruits(banana=5, mango=7, apple=8))
print(total_fruits(banana=5, mango=7, apple=8, oranges=10))
print(total_fruits(banana=5, mango=7))

Đầu ra:

20
30
12

Lưu ý rằng tên của đối số không nhất thiết phải là kwargs – một lần nữa, nó có thể là bất cứ điều gì. Trong trường hợp này, nó là fruits. Nhưng nó thường là một cách tiêu chuẩn để sử dụng **kwargs như một cái tên.

Đọc thêm  Cách tạo trò chơi tiểu thuyết trực quan trong 10 phút – Hướng dẫn Python Ren'Py

Phần kết luận

Trong bài viết này, chúng ta đã tìm hiểu về hai từ khóa đặc biệt trong Python – *args**kwargs. Những điều này làm cho một hàm Python trở nên linh hoạt để nó có thể chấp nhận một số lượng đối số và đối số từ khóa tương ứng.

Cảm ơn vì đã đọc!

Bạn có thể tìm thấy mã cho blog này ở đây.



Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status