![](/img/trans.png)
[英]Python: Passing the default values of function' arguments to *args or **kwargs
[英]Passing default values to **kwargs
我有一个返回一些数据的 function,为了获取数据我需要做的是将类似 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)
我想要做的是将这个 function 变成一个接受**kwargs
但默认为所选字段的 arguments 。
我的想法是,我可以将参数传递给.During()
,如果我不这样做,它默认为Yesterday
,我可以将 arguments 传递给.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,
include_names=False,
get_summary=True,
get_totals=False)
我遇到困难的地方是尝试在没有任何关键字 arguments 的情况下调用fn()
并希望 function 对每个字段都有默认值 arguments,这样它看起来就像我问题中的第一个代码片段。
fn()
KeyError: '客户端'
有可能实现这样的目标吗?
您可以在字典上使用展开运算符:
def func(**kwargs):
kwargs = {"printer": None, **kwargs}
如果未给出,这会将值printer
设置为 none。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.