Tôi đang cố gắng tháo lắp và de-xáo trộn mã này python mandlebrot-tạo:"for x in y hoặc z:" làm gì trong Python?
_ = (
255,
lambda
V ,B,c
:c and Y(V*V+B,B, c
-1)if(abs(V)<6)else
( 2+c-4*abs(V)**-0.4)/i
) ;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:
i ,Y=_;j(P('BBB',*(lambda T:(T*80+T**9
*i-950*T **99,T*70-880*T**18+701*
T **9 ,T*i**(1-T**45*2)))(sum(
[ Y(0,(A%3/3.+X%v+(X/v+
A/3/3.-x/2)/1j)*2.5
/x -2.7,i)**2 for \
A in C
[:9]])
/9)
) )
nguồn: http://preshing.com/20110926/high-resolution-mandelbrot-in-obfuscated-python/
Tôi tìm thấy một vòng lặp for với một twist thú vị, và tôi không chắc chắn nếu nó chỉ là một phần của obfuscation, hoặc nếu nó thực sự có một chức năng. Dòng giữa:
for X in j('BM'+P(M,v*x*3+26,26,12,v,x,1,24))or C:
Làm gì hoặc làm gì ở cuối?
Tôi đã viết lại đoạn code như sau cho rõ ràng:
import struct
image_name = "M.bmp"
mandlebrot = lambda V,B,c :c and Y(V*V+B,B,c-1) if(abs(V)<6) else (2+c-4*abs(V)**-0.4)/i
y,x = 600,800
pixelrange = range(y*x)
package = struct.pack
image = open(image_name,'wb').write
for X in image('BM'+package('<QIIHHHH',y*x*3+26,26,12,y,x,1,24)) or pixelrange:
i = 255
Y = mandlebrot
image(package('BBB',*(lambda T:(T*80+T**9*i-950*T**99,T*70-880*T**18+701*T**9,T*i**(1-T**45*2)))(sum([Y(0,(A%3/3.+X%y+(X/y+A/3/3.-x/2)/1j)*2.5/x-2.7,i)**2 for A in pixelrange [:9]])/9)))
Toàn bộ câu chuyện về cách bạn tìm thấy điều này thú vị 'cho x trong y hoặc z' là không cần thiết cho câu hỏi, nhưng tôi vui vì bạn đã bao gồm nó. Nó khá tuyệt. – SethMMorton
Tôi đã mong đợi câu trả lời phức tạp hơn rất nhiều, bởi vì tôi không biết "cho x trong y hoặc z" thực sự là một sử dụng hợp lệ/hợp lệ của vòng lặp for. Như thường lệ, python ngạc nhiên với sự đơn giản của nó. –