Python for loop with or?

2024-10-01 11:41:18 发布

您现在位置:Python中文网/ 问答频道 /正文

最近我遇到了一些模糊的python代码,我对分离代码片段和理解代码片段没有任何问题。然而,我遇到了一个我不明白的说法:

v, x = 1500, 1000
C = range(v*x)
import struct
P = struct.pack
M, j = '<QIIHHHH', open('M.bmp','wb').write
for X in j('BM'+P(M,v*x*3+26,26,12,v,x,1,24)) or C:

在最后一行代码中,我不明白这个for循环如何与or一起工作。代码运行良好,但我不知道它在做什么。我试着在Python文档中查找,但什么也没看到。这个代码是做什么的?在


Tags: or代码inimportforrangeopenstruct
2条回答

如果j()的返回值==False,则它会在C上迭代

分步骤看一看:

首先,它评估:

j('BM'+P(M,v*x*3+26,26,12,v,x,1,24))

如果该值被认为等于False(空列表、无、0等),则它将计算此值:

^{pr2}$

并将其作为iterable传递给for循环

应该注意,or不是for语法的一部分。它在传递到您熟悉的for语法之前进行了计算

write总是返回None,因此此表达式只是用于调用j(...)的副作用。循环总是在C上

部分除臭版

import struct
v = 1500
x = 1000
C = range(v*x)
M = '<QIIHHHH'
with open('M.bmp','wb') as fin
    fin.write('BM'+struct.pack(M, v*x*3+26, 26, 12, v, x, 1, 24))
    for X in C:
        ...

代码段似乎正在写入bmp文件的头。我想for循环会写剩下的

相关问题 更多 >