您正在查看列表理解;对于每个i
它将计算i in data['message']
。
如果您要在循环中写出它,它将是:
tmplist = []
for i in ['地震了吗', '地震了么', '地震了?', '地震了?', '地震了吧']:
tmplist.append(i in data['message'])
因此,对于列表中的每个字符串,测试布尔表达式i in data['message']
并将结果(True
或False
)添加到 `tmplist.
然后该reduce()
函数返回等价于:
tmplist[0] or tmplist[1] or tmplist[2] or ... or tmplist[len(tmplist)-1]
而是以更曲折的方式表达。reduce(lambda a, b: a or b, sequence)
以sequence[0]
and sequence[1]
as a
and开始b
,然后获取 as 的结果和lambda
asa
中的下一个元素sequence
,b
并重复此操作,直到 sequence 中的所有元素都已处理。
编写此代码的更友好的方法是any()
改用:
return any(i in data['message']
for i in ['地震了吗', '地震了么', '地震了?', '地震了?', '地震了吧'])
any()
实际上效率更高;它将运行生成器并在找到匹配项时立即停止;如果只data['message']
包含'地震了吗'
一个测试将被执行。