*args và **kwargs

Table of Content

Tôi nhận thấy rằng hầu hết các lập trình viên Python mới đều gặp khó khăn khi tìm hiểu về các biến ma thuật *args**kwargs. Vậy chúng là gì? Trước hết, hãy để tôi nói với bạn rằng không cần thiết phải viết *args hoặc **kwargs. Chỉ dấu * là cần thiết. Bạn cũng có thể viết *var**vars. Viết *args**kwargs chỉ là một quy ước. Vì vây, bây giờ chúng ta xem xét *args trước.

Sử dụng *args

*args**kwargs chủ yếu được sử dụng trong các định nghĩa hàm. *args**kwargs cho phép bạn truyền một số lượng đối số không xác định cho một hàm, vì vậy khi viết định nghĩa hàm, bạn không cần biết có bao nhiêu đối số sẽ được truyền cho hàm của mình. *args được sử dụng để gửi một tuple có chiều dài thay đổi các đối số không có từ khóa đến hàm. Dưới đây là một ví dụ để giúp bạn có một ý tưởng rõ ràng:

def test_var_args(f_arg, *args):
    print("first normal arg:", f_arg)
    for arg in args:
        print("another arg through *args:", arg)

test_var_args('yasoob', 'python', 'eggs', 'test') 

Chương trình này tạo ra kết quả sau:

first normal arg: yasoob
another arg through *args: python
another arg through *args: eggs
another arg through *args: test

Tiếp theo chúng sẽ nói về **kwargs

Sử dụng **kwargs

**kwargs cho phép bạn duyệt qua các đối số có khóa được gửi tới hàm. Bạn nên sử dụng **kwargs nếu bạn muốn xử lý các đối số được đặt tên trong một hàm. **kwargs là một từ điển mà các phần tử là khóa và giá trị của các đối số. Đây là một ví dụ để giúp bạn thực hiện nó:

>>> def greet_me(**kwargs):
    for key, value in kwargs.items():
        print("{0} = {1}".format(key, value))

>>> greet_me(name="yasoob")
name = yasoob

Đây là chỉ là những điều cơ bản về **kwargs và bạn có thể thấy nó hữu ích như thế nào. Bây giờ hãy nói về cách bạn có thể sử dụng *args**kwargs để gọi một hàm với một danh sách hoặc từ điển chứa các đối số.

Sử dụng *args**kwargs để gọi một hàm

Giả sử bạn có một hàm nhỏ sau:

def test_args_kwargs(arg1, arg2, arg3):
    print("arg1:", arg1)
    print("arg2:", arg2)
    print("arg3:", arg3)

Bây giờ bạn có thể sử dụng *args hoặc **kwargs để truyền các đối số cho hàm này. Đây là cách thực hiện:

# trước tiên với *args
>>> args = ("two", 3, 5)
>>> test_args_kwargs(*args)
arg1: two
arg2: 3
arg3: 5

# sau đó với **kwargs
>>> kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
>>> test_args_kwargs(**kwargs)
arg1: 5
arg2: two
arg3: 3

Thứ tự sử dụng *args, **kwargs và tham số thông thường

Nếu muốn sử dụng đồng thời các tham số thông thường, *args**kwargs trong hàm thì thứ tự khai báo của chúng trong định nghĩa hàm là:

some_func(fargs, *args, **kwargs)

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *