def f(x):return(10*x)a=[1,2,3]b=[f(t) for t in a]print(b)结果:[10, 20, 30]意思能够理解,但是我想知道编译器在读取b=[f(t) for t in a] 这一句是怎么拆解成一步步命令的?感觉很神奇,就这么一句就做了好多步骤。。。谢谢
1 回答
![?](http://img1.sycdn.imooc.com/545862370001b03502200220-100-100.jpg)
慕田峪4524236
TA贡献1875条经验 获得超5个赞
了解一下堆栈虚拟机和字节码
python用dis模块将程序反编译为字节码对应的操作码。
>>> 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
提交
取消