问题描述
我有一个返回一些数据的函数,为了获取数据,我需要做的是将类似sql的查询传递给build_query
变量。
def foo(client):
"""
API service that returns JSON data and accepts arguments
"""
report_query = (client.buildQuery()
.Select('Date','SearchEngine')
.From('Report_10')
.During('Yesterday')
get_report.downloadReport(
skip_header=True,include_names=False,get_summary=True,get_totals=False)
我要做的就是将此函数设置为可以接受**kwargs
但具有所选字段默认参数的函数。
我的想法是我可以将参数传递给.During()
,如果不默认,则可以将参数传递给Yesterday
,例如.Select()
将是.Select()
。
我尝试并试图理解的内容:
.Select('Date','Device','StrategyType')
def fn(**kwargs):
print(f"""
({kwargs['client']}.buildQuery()
.Select({kwargs['select']}))
.From({kwargs['report_type']})
.During({kwargs['during']})
get_report.downloadReport(
skip_header={kwargs['skip_header']},include_names={kwargs['include_names']},get_summary={kwargs['get_summary']},get_totals={kwargs['get_totals']})""")
返回:
fn(client='10',select=['Date','SearchEngine'],report_type='new',during='Yesterday',skip_header=True)
我陷入困境的地方是尝试在不使用任何关键字参数的情况下调用 (10.buildQuery()
.Select(['Date','SearchEngine']))
.From(new)
.During(Yesterday)
get_report.downloadReport(
skip_header=True,get_totals=False)
,并希望该函数在每个字段中都具有默认参数,以使其看起来像我问题中的第一个代码段。
fn()
KeyError:“客户端”
有可能实现这样的目标吗?
解决方法
您可以在字典上使用传播运算符:
def func(**kwargs):
kwargs = {"printer": None,**kwargs}
如果未提供值printer
,则将其设置为无。