def f(x):return(10*x)a=[1,2,3]b=[f(t) for t in a]print(b)結(jié)果:[10, 20, 30]意思能夠理解,但是我想知道編譯器在讀取b=[f(t) for t in a] 這一句是怎么拆解成一步步命令的?感覺很神奇,就這么一句就做了好多步驟。。。謝謝
1 回答

慕田峪4524236
TA貢獻1875條經(jīng)驗 獲得超5個贊
了解一下堆棧虛擬機和字節(jié)碼
python用dis模塊將程序反編譯為字節(jié)碼對應的操作碼。
>>> import dis>>> def f(x): return(10*x)>>> def x(): a=[1,2,3] for i in a: b=f(i) print(b) >>> dis.dis(x) 2 0 LOAD_CONST 1 (1) 3 LOAD_CONST 2 (2) 6 LOAD_CONST 3 (3) 9 BUILD_LIST 3 12 STORE_FAST 0 (a) 3 15 SETUP_LOOP 36 (to 54) 18 LOAD_FAST 0 (a) 21 GET_ITER >> 22 FOR_ITER 28 (to 53) 25 STORE_FAST 1 (i) 4 28 LOAD_GLOBAL 0 (f) 31 LOAD_FAST 1 (i) 34 CALL_FUNCTION 1 (1 positional, 0 keyword pair) 37 STORE_FAST 2 (b) 5 40 LOAD_GLOBAL 1 (print) 43 LOAD_FAST 2 (b) 46 CALL_FUNCTION 1 (1 positional, 0 keyword pair) 49 POP_TOP 50 JUMP_ABSOLUTE 22 >> 53 POP_BLOCK >> 54 LOAD_CONST 0 (None) 57 RETURN_VALUE>>>
添加回答
舉報
0/150
提交
取消