我正在阅读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
?这种模式有原因吗?
答案 0 :(得分:2)
代码由命令行界面驱动。命令行界面使用0
作为limit
的默认值。这是在这种情况下禁用限制的事实标准,因为使用其他选项(让命令行用户改为使用float('inf')
,或者使用其他方法设置的单独开关再次禁用限制)是不必要的复杂。
然后该函数使用相同的默认值;可能是为了更容易使用外部命令行用例(通过导入脚本),使其合理地自我记录。实际代码使用float('inf')
代替了实现细节。
然而,技术没有default=0
使用default=float('inf')
的原因。