food = dict(line.split(":", 1) for line in open("file") if line.strip())
Run Code Online (Sandbox Code Playgroud)
我知道这段代码做了什么,但我不明白为什么它像这样放在一起,所以有人可以向我解释在最后添加"if"语句的逻辑.
如何通过文件工作中的迭代告诉脚本创建字典,然后添加
if line.strip()
Run Code Online (Sandbox Code Playgroud)
工作?那句话之后没有什么需要去的吗?它是什么告诉剧本,因为之后没有条件?
我知道这段代码是有效的,因为我尝试了但是我对它是如何工作感到困惑.
if语句是生成器表达式的过滤器.在生成器表达式结束时,您可以使用if语句指定每个项目需要满足的条件以包含在最终生成器中.
您可能更好地理解一个更简单的示例:
(i for i in range(100) if i % 3 == 0)
Run Code Online (Sandbox Code Playgroud)
返回一个生成器,其中包含0到99之间可被3整除的每个数字.
在您的特定示例中,将if line.strip()最终生成器过滤为仅为line.strip()True的字符串(这个想法可能是为了确保除了空格之外的每个字符串中都有一些内容).
(如果你不知道发电机是什么,请看这个.)