У меня есть функция:как разрешить args и kwargs, требуя один arg и kwarg; питон
def get_results(datasource, attribute='all_results', *args, **kwargs):
"""gets results for basic datasource format"""
print(args, kwargs)
ds = datasource(*args, **kwargs)
ds.get()
results = getattr(ds, attribute)
return results
называемый как
results = get_results(ThisDataSource, 'somestringID')
давая арг/kwargs
(), {}
Он работал в качестве
def get_results(datasource, *args, **kwargs):
"""gets results for basic datasource format"""
print(args, kwargs)
ds = datasource(*args, **kwargs)
ds.get()
results = ds.all_results()
return results
дает арг/kwargs
('somestringID',), {}
Этот старый способ плох тем, что источник данных может потребоваться возвращать строки, столбцы и т.д. Он работал
results = get_results(ThisDataSource, 'somestringID')
который вызвал
ds = ThisDataSource('somestringID')
Как я могу дать его по умолчанию в декларации, но все же разрешить args и kwargs? Я хочу назвать
results = get_results(ThisDataSource, 'somestringID', attribute='rows')
и имеют args = ('somestringID'), and retain access to
атрибут = 'rows'`
Спасибо
Вы не можете указать значение по умолчанию, а также аргумент быть частью 'kwargs'. 'kwargs' специально для аргументов, имена которых (не говоря уже о значениях по умолчанию) не указаны в сигнатуре аргумента. Это то, о чем вы спрашиваете? Пожалуйста, покажите пример того, как вы хотите вызвать функцию и какой результат вы хотите. – BrenBarn