jac*_*ill 3 python loops for-loop python-2.7
最近我遇到了一些混淆的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:
Run Code Online (Sandbox Code Playgroud)
在最后一行代码中,我不明白这个for循环如何在or坐在那里工作.代码运行正常,但我不知道它在做什么.我尝试查看Python文档,但我没有看到任何内容.这段代码有什么作用?
如果 j() == False 的返回值,则迭代 C 来代替
分步骤看一下:
首先,它对此进行评估:
j('BM'+P(M,v*x*3+26,26,12,v,x,1,24))
Run Code Online (Sandbox Code Playgroud)
如果这被认为等于 False(空列表、无、0 等),那么它会评估这个:
C
Run Code Online (Sandbox Code Playgroud)
并将其作为可迭代对象传递给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:
...
Run Code Online (Sandbox Code Playgroud)
该代码段似乎是在写一个bmp文件的标题.我想for循环会写出余数