Кажется, вам нужна небольшая помощь с упаковкой и распаковкой аргументов.
В определении функции или метода вы указываете последовательность аргументов, которые будут переданы. Если вы хотите иметь переменное количество входных аргументов, механизм состоит в том, чтобы «упаковать» их вместе в список или каталог. Например, скажем, вы хотите получить сумму всех заданных аргументов:
def get_sum(a, b): #only useful for two numbers
return a + b
def get_sum(a,b,c): #only useful for three numbers
return a + b
Вам нужно будет иметь разные определения для каждого возможного количества входных аргументов. Решением этой проблемы является использование оператора упаковки, чтобы упаковать все аргументы, данные в список, который можно повторять по
def get_sum(*list_of_inputs): # * will pack all subsequent positional arguments into a list
x = 0
for item in list_of_inputs:
x += item
return x
get_sum(1,2,3,4,5,6,7) #returns 28
get_sum() #returns 0
. То же самое можно сделать для аргументов ключевого слова, которые упаковываются в словарь:
def foo(**keyword_args):
for k in keyword_args:
print(f'{k}: {keyword_args[k]}')
Теперь, когда вы используете (вызываете) функцию, иногда вам нужно иметь возможность «распаковать» список или словарь в вызов функции. Тот же оператор используется для упаковки и распаковки, поэтому он выглядит очень похоже:
def foo(a,b,c):
print(f'{a} + {b} = {c}')
arguments = ['spam', 'eggs', 'delicious']
foo(*arguments) #unpack the list of arguments into their required positions
Теперь, наконец, переходим к вашему конкретному c случаю: функция, которую вы пытаетесь использовать, определяет ** kwargs в своем определении . Это означает, что он будет принимать любые последующие аргументы ключевого слова и упаковывать их все в словарь, который будет использоваться внутри определения функции. Практическое значение этого состоит в том, что вы можете предоставить функции аргументы ключевого слова, которые специально не определены в сигнатуре функции (это особенно часто, когда функция вызывает другую функцию и передает аргументы). Если вы уже упаковали свои аргументы перед вызовом функции, их легко распаковать, используя тот же процесс, который показан Оли: tfds.builder(**dict)