繁体   English   中英

将默认值传递给 **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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM