函数中的“无”是什么意思/可选字段

时间:2018-08-11 15:07:29

标签: python

我正在尝试使用以下功能。通常,当我调用此函数时,我只是传递report_type,但是一些报告调用需要start_date。问题

  1. 函数定义中的None是否表示该字段是可选的

    def request_report(self, report_type, start_date=None, end_date=None, marketplaceids=()):
    data = dict(Action='RequestReport',
                ReportType=report_type,
                StartDate=start_date,
                EndDate=end_date)
    data.update(utils.enumerate_param('MarketplaceIdList.Id.', marketplaceids))
    return self.make_request(data)
    
  2. 我通常使用下面的一行之一来调用该函数,具体取决于我是否传递了start_date。除此以外,对于每种请求类型都有一系列的“ if”语句,是否有一种好的方法来调用此函数,并且仅在填充了特定变量的情况下才传递该变量?随着时间的流逝,我将添加更多可选参数,并且确实想要一个巨大的'if'语句

    requested_report=report_api.request_report(report_type=report_name, start_date=starting_date)
    requested_report=report_api.request_report(report_type=report_name)
    

2 个答案:

答案 0 :(得分:1)

=...部分为参数提供默认值。这里是None,这确实意味着在调用函数时参数是可选的。如果未指定,则使用默认值。请参见Python教程中的Default Argument Values以及reference documentation for function definitions

  

当一个或多个参数的形式为 parameter = expression 时,该函数被称为具有“默认参数值”。对于具有默认值的参数,可以从a中省略相应的参数。调用,在这种情况下将替换参数的默认值。

调用此类函数时,可以将与默认值相同的值传递给该特定函数,这没有什么区别;因此,当没有starting_date时,您可以传递None

start_date = starting_date or None  # when determining the starting date, default to None
requested_report=report_api.request_report(
    report_type=report_name,
    start_date=starting_date
)

另一种选择是在字典中设置任何可选的关键字参数,然后将使用**调用语法的参数传递给unpack the dictionary as keyword arguments

kwargs = {}
if ...:  # test that decides if start_date is needed
    kwargs['start_date'] = starting_date  # expression to set the start date

requested_report=report_api.request_report(
    report_type=report_name, **kwargs)

kwargs字典可以为空。

答案 1 :(得分:0)

它称为default parameter

  

当函数定义为时评估默认参数值   已执行

Here是有关方法定义的文档。
Here is additional information