У меня есть функция, которая имеет следующую подпись:Найти все возможные комбинации аргументов в Python
def function(a=None, b=None, c=None):
# ... some more code ...
Если он будет принят, а, б и может быть только булевы.
Я хочу знать все допустимые комбинации a, b и c.
Обратите внимание, что a, b и c являются необязательными, поэтому эту функцию можно вызвать всего лишь с 0 параметрами и целых 3 параметра.
Я в состоянии получить все возможные комбинации аргументов:
arg_names = ['a', 'b', 'c']
arg_values = [None, True, False]
arg_combinations = []
for i in range(len(arg_names)):
arg_combinations += list(
itertools.combinations(arg_names, i + 1)
)
который производит:
[('a',), ('b',), ('c',), ('a', 'b'), ('a', 'c'), ('b', 'c'), ('a', 'b', 'c')]
Однако я не в состоянии двигаться дальше, создавая все возможные комбинации параметров и значения:
arg_value_combinations = []
for c in arg_combinations:
arg_value_combinations += list(
itertools.product(c, arg_values)
)
print arg_value_combinations
который производит:
[('a', None), ('a', True), ('a', False), ('b', None), ('b', True), ('b', False), ('c', None), ('c', True), ('c', False), ('a', None), ('a', True), ('a', False), ('b', None), ('b', True), ('b', False), ('a', None), ('a', True), ('a', False), ('c', None), ('c', True), ('c', False), ('b', None), ('b', True), ('b', False), ('c', None), ('c', True), ('c', False), ('a', None), ('a', True), ('a', False), ('b', None), ('b', True), ('b', False), ('c', None), ('c', True), ('c', False)]
Определенно неправильный путь.
Я определенно Непонятое повторение в itertools.product. Спасибо за помощь, несмотря на несовершенства вопроса. –