将默认值传递给 **kwargs
Passing default values to **kwargs
我有一个 returns 一些数据的函数,为了获取数据我需要做的是将 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)
Returns:
(10.buildQuery()
.Select(['Date', 'SearchEngine']))
.From(new)
.During(Yesterday)
get_report.downloadReport(
skip_header=True,
include_names=False,
get_summary=True,
get_totals=False)
我被卡住的地方是尝试在没有任何关键字参数的情况下调用 fn()
,并希望该函数对每个字段都有默认参数,这样它看起来就像我问题中的第一个代码片段。
fn()
KeyError: 'client'
有没有可能达到这样的效果?
您可以在字典上使用扩展运算符:
def func(**kwargs):
kwargs = {"printer": None, **kwargs}
如果未给出,这会将值 printer
设置为 none。
我有一个 returns 一些数据的函数,为了获取数据我需要做的是将 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)
Returns:
(10.buildQuery()
.Select(['Date', 'SearchEngine']))
.From(new)
.During(Yesterday)
get_report.downloadReport(
skip_header=True,
include_names=False,
get_summary=True,
get_totals=False)
我被卡住的地方是尝试在没有任何关键字参数的情况下调用 fn()
,并希望该函数对每个字段都有默认参数,这样它看起来就像我问题中的第一个代码片段。
fn()
KeyError: 'client'
有没有可能达到这样的效果?
您可以在字典上使用扩展运算符:
def func(**kwargs):
kwargs = {"printer": None, **kwargs}
如果未给出,这会将值 printer
设置为 none。