在Python中,“覆盖”默认参数为0的原因是什么?

时间:2017-05-04 08:55:01

标签: python

我正在阅读Scrapy-Redis示例项目https://github.com/rolando/scrapy-redis/blob/master/example-project/process_items.py的源代码,其中包含以下内容:

def process_items(r, keys, timeout, limit=0, log_every=1000, wait=.1):
    limit = limit or float('inf')

在我看来limit事实上的默认值是float('inf'),因为如果未指定它,它最初会假设默认值0,然后立即转换为包含布尔运算符float('inf')的行中的or

我的问题是:为什么不在limit=float('inf')行设置默认def?这种模式有原因吗?

1 个答案:

答案 0 :(得分:2)

代码由命令行界面驱动。命令行界面使用0作为limit的默认值。这是在这种情况下禁用限制的事实标准,因为使用其他选项(让命令行用户改为使用float('inf'),或者使用其他方法设置的单独开关再次禁用限制)是不必要的复杂。

然后该函数使用相同的默认值;可能是为了更容易使用外部命令行用例(通过导入脚本),使其合理地自我记录。实际代码使用float('inf')代替了实现细节。

然而,技术没有default=0使用default=float('inf')的原因。