2014-01-16 2 views
1

최근에는 난처한 파이썬 코드를 보았습니다. 코드 조각을 분리하고 코드 조각을 이해하는 데 문제가 없었습니다. 그러나, 나는 내가 이해하지 못했다 하나 개의 문장 건너 온 :파이썬 for 루프 또는?

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이 거기에 앉아 작업하는 방법을 이해하지 않습니다. 코드는 정상적으로 실행되지만 그 코드가 무엇을하는지 전혀 알지 못합니다. 파이썬 문서를 살펴 보았지만 아무것도 보지 못했습니다. 이 코드는 무엇을합니까? == 거짓, 그것은 C를 반복 처리() J의 반환 대신

이 단계에서 한 번 봐 경우

+0

가능한 복제본 https://stackoverflow.com/questions/4033298/python-logic-in-assignment –

답변

5

write은 항상 없음을 반환하므로이 표현식은 j(...) 호출의 부작용에 사용됩니다. 루프는 항상 C

부분적으로 deobfuscated 버전의 코드 조각은 BMP 파일의 헤더를 기록 할 것으로 보인다

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

이상이어야합니다. 나는 for 루프가 나머지를 쓰고 있다고 생각한다.

+0

맞다. – jackcogdill

2

는 : 해야하는

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

:

첫째,이 평가 False (빈 목록, 없음, 0 등)와 동일한 것으로 간주되는 경우 다음을 평가합니다.

그 루프를 for 루프로 전달합니다.

orfor 구문의 일부가 아닙니다. for 구문에 익숙해지기 전에 평가됩니다.