Tôi có bộ giá trị mà tôi muốn áp dụng như tham số cho một hàm:Execute chức năng trên tất cả các kết hợp có thể các thông số
params = {
'a': [1, 2, 3],
'b': [5, 6, 7],
'x': [None, 'eleven', 'f'],
# et cetera
}
Tôi muốn chạy myfunc()
với tất cả các kết hợp có thể, vì vậy myfunc(a=1, b=5, x=None ...)
, myfunc(a=2, b=5, x=None ...)
.. myfunc(a=3, b=7, x='f' ...)
. Có điều gì đó không (ví dụ: itertools
) có thể trợ giúp? Tôi nghĩ về việc sử dụng itertools.product()
nhưng điều đó không giữ tên của các tham số và chỉ cung cấp cho tôi bộ dữ liệu kết hợp.
Đó là rất gọn gàng! Tôi lo lắng về thứ tự đang được tắt mặc dù, vì dicts là không có thứ tự (phải không?). Điều đó có nghĩa là 'itertools.product()' trả về các tham số theo thứ tự khác hơn là bạn có các khóa, điều này sẽ dẫn đến sự không khớp. – Bluefire
@Bluefire, 'myfunc (a = 1, b = 2, c = 3)', 'myfunc (b = 2, c = 3, a = 1)' cả hai đều ổn. – falsetru
'map (params.get, keys)' là một cách viết không cần thiết để viết 'params.values ()' tại đây; nó được đảm bảo rằng '.keys()' và '.values ()' sẽ căn chỉnh trừ khi từ điển được sửa đổi. – DSM