您正在查看列表理解;对于每个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 aand开始b,然后获取 as 的结果和lambdaasa中的下一个元素sequence,b并重复此操作,直到 sequence 中的所有元素都已处理。
编写此代码的更友好的方法是any()改用:
return any(i in data['message']
for i in ['地震了吗', '地震了么', '地震了?', '地震了?', '地震了吧'])
any()实际上效率更高;它将运行生成器并在找到匹配项时立即停止;如果只data['message']包含'地震了吗'一个测试将被执行。