[英]how to allow args and kwargs while requiring one arg and kwarg; python
我有一個功能:
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')
給args / 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
給args / 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
attribute ='rows'`的args = ('somestringID'), and retain access to
謝謝
假設第一個位置參數為attribute 。
def get_results(datasource, *args, **kwargs):
"""gets results for basic datasource format"""
attribute = 'all_results' # default value
if 'attribute' in kwargs:
# attribure was given explicitly in keyword params
attribute = kwargs['attribute']
else:
if len(args)>0:
# args contains at least 1 value - we suppose first value to be an attribute
# extract and remove it from args
attribute = args.pop(0)
print(attribute, args, kwargs)
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.