*args và **kwargs trong Python

Category: Python

Trong Python, args và *kwargs được sử dụng để cho phép các hàm chấp nhận một số lượng đối số tùy ý. Các tính năng này cung cấp tính linh hoạt tuyệt vời khi thiết kế các hàm cần xử lý một số lượng đầu vào khác nhau.

Ví dụ:

# ví dụ *args
def fun(*args):
    return sum(args)

print(fun(1, 2, 3, 4)) 
print(fun(5, 10, 15))   

# ví dụ **kwargs
def fun(**kwargs):
    for k, val in kwargs.items():
        print(k, val)

fun(a=1, b=2, c=3)

Đầu ra:

10 
30 
a 1 
b 2 
c 3

Có hai ký hiệu đặc biệt để truyền nhiều đối số:

Các ký hiệu đặc biệt được sử dụng để truyền đối số trong Python:

  • *args (Đối số không phải từ khóa)

  • **kwargs (Từ khóa đối số)

Lưu ý: “Chúng tôi sử dụng ký hiệu "wildcard" hoặc "*" như thế này - args HOẶC *kwargs - làm đối số của hàm khi chúng tôi nghi ngờ về số lượng đối số cần truyền vào một hàm.” 

Python *args

Cú pháp đặc biệt *args trong định nghĩa hàm được sử dụng để truyền một số lượng biến đổi các đối số cho một hàm. Nó được sử dụng để truyền một danh sách đối số có độ dài biến đổi, không có từ khóa. 

  • Ví dụ, chúng ta muốn tạo một hàm nhân có thể lấy bất kỳ số lượng đối số nào và có thể nhân tất cả chúng lại với nhau. Có thể thực hiện bằng cách sử dụng *args.

  • Sử dụng biến mà chúng ta liên kết với sẽ trở thành biến có thể lặp lại, nghĩa là bạn có thể thực hiện các thao tác như lặp lại biến đó, chạy một số hàm bậc cao hơn như map và filter, v.v.

Ví dụ 1:

def myFun(*argv):
    for arg in argv:
        print(arg)


myFun('Hello', 'Welcome', 'to', 'GeeksforGeeks')

Đầu ra:

Hello
Welcome
to
GeeksforGeeks

Ví dụ 2:

Chương trình Python minh họa *args với đối số bổ sung đầu tiên.

def fun(arg1, *argv):
    print("First argument :", arg1)
    for arg in argv:
        print("Argument *argv :", arg)


fun('Hello', 'Welcome', 'to', 'GeeksforGeeks')

Đầu ra:

First argument : Hello
Argument *argv : Welcome
Argument *argv : to
Argument *argv : GeeksforGeeks

Python **kwargs

Cú pháp đặc biệt kwargs trong định nghĩa hàm được sử dụng để truyền danh sách đối số có độ dài thay đổi. Chúng tôi sử dụng tên kwargs với dấu sao kép .

  • Đối số từ khóa là nơi bạn cung cấp tên cho biến khi truyền nó vào hàm.

  • Nó thu thập tất cả các đối số từ khóa bổ sung được truyền vào hàm và lưu trữ chúng trong một từ điển.

Ví dụ 1: 

def fun(**kwargs):
    for k, val in kwargs.items():
        print("%s == %s" % (k, val))


# Driver code
fun(s1='Geeks', s2='for', s3='Geeks')

Đầu ra:

s1 == Geeks
s2 == for
s3 == Geeks

Đối với s1='Geeks', s1 là khóa và 'Geeks' là giá trị. Nói một cách đơn giản, những gì chúng ta gán là giá trị và người chúng ta gán là khóa. 

Ví dụ 2:

def fun(arg1, **kwargs):
    for k, val in kwargs.items():
        print("%s == %s" % (k, val))


# Driver code
fun("Hi", s1='Geeks', s2='for', s3='Geeks')

Đầu ra:

s1 == Geeks
s2 == for
s3 == Geeks

Sử dụng cả args và *kwargs

Chúng ta có thể sử dụng cả args và *kwargs trong cùng một hàm để chấp nhận kết hợp các đối số theo vị trí và từ khóa.

Ví dụ:

def fun(*args, **kwargs):
    print("Positional arguments:", args)
    print("Keyword arguments:", kwargs)

fun(1, 2, 3, a=4, b=5)

Đầu ra:

Positional arguments: (1, 2, 3)
Keyword arguments: {'a': 4, 'b': 5}

Trong ví dụ này, fun có thể xử lý cả đối số vị trí và đối số từ khóa. Tham số args thu thập các đối số vị trí vào một tuple, trong khi tham số kwargs thu thập các đối số từ khóa vào một từ điển.

Published on Jun 17, 2025