簡體   English   中英

Python for循環用或?

[英]Python for loop with or?

最近我遇到了一些混淆的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文檔,但我沒有看到任何內容。 這段代碼有什么作用?

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循環會寫出余數

如果返回j()== False,則迭代C

分步看看它:

首先,它評估這個:

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

如果這被認為等於False(空列表,無,0等),那么它會計算:

C

並將其作為迭代傳遞給for循環

應當指出的是, or不是部分for語法。 它在被傳遞到您熟悉的for語法之前進行了評估

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM