**kwargs
là một đối số được sử dụng trong Python để truyền một danh sách các đối số với keyword đến một hàm. Nó cho phép chúng ta truyền một số lượng các đối số không xác định với keyword đến hàm, giúp cho việc viết mã linh hoạt hơn.
Dưới đây là 3 ví dụ chi tiết về cách sử dụng **kwargs
:
Ví dụ đầu tiên là việc truyền tham số dưới dạng key-value pairs cho hàm. Với **kwargs
, chúng ta có thể truyền bao nhiêu key-value pairs tùy thích. Ví dụ dưới đây truyền vào **kwargs
với hai key-value pairs.
def my_func(**kwargs):
for key, value in kwargs.items():
print(f"{key} = {value}")
my_func(name="John", age=30)
Ví dụ thứ hai liên quan đến kết hợp **kwargs
với các đối số khác như *args
. Ví dụ dưới đây truyền vào *args
và **kwargs
cho hàm my_func()
.
def my_func(*args, **kwargs):
for arg in args:
print(arg)
for key, value in kwargs.items():
print(f"{key} = {value}")
my_func(1, 2, 3, name="John", age=30)
Ví dụ cuối cùng là sử dụng **kwargs
để truyền đối số cho một hàm con. Ví dụ dưới đây sử dụng hàm con inner_func()
với tham số **kwargs
.
def outer_func(**kwargs):
def inner_func():
for key, value in kwargs.items():
print(f"{key} = {value}")
inner_func()
outer_func(name="John", age=30)
Trong ví dụ trên, **kwargs
được truyền vào outer_func()
. Hàm con inner_func()
được gọi và hiển thị các giá trị của các key-value pairs được truyền vào **kwargs
.
Một ví dụ thực tế sử dụng **kwargs trong Python trong môi trường Linux có thể là khi bạn viết một chương trình Python để tìm kiếm các file trên hệ thống file của bạn và cho phép người dùng cung cấp nhiều thông số tùy chọn để điều chỉnh quá trình tìm kiếm. Ví dụ sau đây sử dụng **kwargs để cho phép người dùng cung cấp nhiều thông số tùy chọn:
import os
def find_files(directory, **kwargs):
files = []
for root, dirs, filenames in os.walk(directory):
for filename in filenames:
path = os.path.join(root, filename)
if all(key in kwargs and kwargs[key] in path for key in kwargs):
files.append(path)
return files
directory = '/home/user/documents'
file_type = 'txt'
max_size = 1024
found_files = find_files(directory, extension=file_type, size=lambda s: s < max_size)
print(found_files)
Trong ví dụ này, hàm find_files
sử dụng **kwargs
để cho phép người dùng cung cấp nhiều thông số tùy chọn. Nó sử dụng os.walk
để duyệt qua tất cả các file trong thư mục được chỉ định và kiểm tra xem tất cả các thông số tùy chọn được cung cấp bởi người dùng đều xuất hiện trong đường dẫn file. Cuối cùng, nó trả về danh sách các file khớp với các thông số tùy chọn.