【问题标题】:Python for loop with or?Python for循环用or?
【发布时间】:2014-01-16 01:57:31
【问题描述】:

最近我遇到了一些混淆的 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 文档,但什么也没看到。这段代码有什么作用?

【问题讨论】:

标签: python loops python-2.7 for-loop


【解决方案1】:

如果 j() 的返回 == False,则改为迭代 C

分步看一下:

首先,它评估这个:

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

是否应该认为等于 False(空列表、None、0 等),然后它评估这个:

C

并将其作为可迭代对象传递给for 循环

应该注意or 不是for 语法的一部分。在传递到您熟悉的 for 语法之前对其进行评估

【讨论】:

    【解决方案2】:

    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:
            ...
    

    sn-p 似乎正在写入 bmp 文件的标题。我猜for循环会写余数

    【讨论】:

      猜你喜欢
      • 2020-01-13
      • 2013-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多