Executed file: --------------------------------------------------------------------------- def f1(): return [x for x in range(10)] def f2(): return [(x, y) for x in range(10) for y in range(10)] def f3(): return [x for x in range(10) if x % 2] def f4(): return [x*2 for x in range(10) if x % 2 for y in range(10) if y % 3] funcs = [f1, f2, f3, f4] import dis for func in funcs: print func.__name__ print "="*60 dis.dis(func) for idx, const in enumerate(func.func_code.co_consts): if type(const) is type(func.func_code): print "co_consts[%d]" % idx print "-"*60 dis.dis(const) print Output for Python 2.5c1: --------------------------------------------------------------------------- f1 ============================================================ 2 0 BUILD_LIST 0 3 DUP_TOP 4 STORE_FAST 0 (_[1]) 7 LOAD_GLOBAL 0 (range) 10 LOAD_CONST 1 (10) 13 CALL_FUNCTION 1 16 GET_ITER >> 17 FOR_ITER 13 (to 33) 20 STORE_FAST 1 (x) 23 LOAD_FAST 0 (_[1]) 26 LOAD_FAST 1 (x) 29 LIST_APPEND 30 JUMP_ABSOLUTE 17 >> 33 DELETE_FAST 0 (_[1]) 36 RETURN_VALUE f2 ============================================================ 5 0 BUILD_LIST 0 3 DUP_TOP 4 STORE_FAST 0 (_[1]) 7 LOAD_GLOBAL 0 (range) 10 LOAD_CONST 1 (10) 13 CALL_FUNCTION 1 16 GET_ITER >> 17 FOR_ITER 38 (to 58) 20 STORE_FAST 1 (x) 23 LOAD_GLOBAL 0 (range) 26 LOAD_CONST 1 (10) 29 CALL_FUNCTION 1 32 GET_ITER >> 33 FOR_ITER 19 (to 55) 36 STORE_FAST 2 (y) 39 LOAD_FAST 0 (_[1]) 42 LOAD_FAST 1 (x) 45 LOAD_FAST 2 (y) 48 BUILD_TUPLE 2 51 LIST_APPEND 52 JUMP_ABSOLUTE 33 >> 55 JUMP_ABSOLUTE 17 >> 58 DELETE_FAST 0 (_[1]) 61 RETURN_VALUE f3 ============================================================ 8 0 BUILD_LIST 0 3 DUP_TOP 4 STORE_FAST 0 (_[1]) 7 LOAD_GLOBAL 0 (range) 10 LOAD_CONST 1 (10) 13 CALL_FUNCTION 1 16 GET_ITER >> 17 FOR_ITER 28 (to 48) 20 STORE_FAST 1 (x) 23 LOAD_FAST 1 (x) 26 LOAD_CONST 2 (2) 29 BINARY_MODULO 30 JUMP_IF_FALSE 11 (to 44) 33 POP_TOP 34 LOAD_FAST 0 (_[1]) 37 LOAD_FAST 1 (x) 40 LIST_APPEND 41 JUMP_ABSOLUTE 17 >> 44 POP_TOP 45 JUMP_ABSOLUTE 17 >> 48 DELETE_FAST 0 (_[1]) 51 RETURN_VALUE f4 ============================================================ 11 0 BUILD_LIST 0 3 DUP_TOP 4 STORE_FAST 0 (_[1]) 7 LOAD_GLOBAL 0 (range) 10 LOAD_CONST 1 (10) 13 CALL_FUNCTION 1 16 GET_ITER >> 17 FOR_ITER 66 (to 86) 20 STORE_FAST 1 (x) 23 LOAD_FAST 1 (x) 26 LOAD_CONST 2 (2) 29 BINARY_MODULO 30 JUMP_IF_FALSE 49 (to 82) 33 POP_TOP 34 LOAD_GLOBAL 0 (range) 37 LOAD_CONST 1 (10) 40 CALL_FUNCTION 1 43 GET_ITER >> 44 FOR_ITER 36 (to 83) 47 STORE_FAST 2 (y) 50 LOAD_FAST 2 (y) 53 LOAD_CONST 3 (3) 56 BINARY_MODULO 57 JUMP_IF_FALSE 15 (to 75) 60 POP_TOP 61 LOAD_FAST 0 (_[1]) 64 LOAD_FAST 1 (x) 67 LOAD_CONST 2 (2) 70 BINARY_MULTIPLY 71 LIST_APPEND 72 JUMP_ABSOLUTE 44 >> 75 POP_TOP 76 JUMP_ABSOLUTE 44 79 JUMP_ABSOLUTE 17 >> 82 POP_TOP >> 83 JUMP_ABSOLUTE 17 >> 86 DELETE_FAST 0 (_[1]) 89 RETURN_VALUE Output for Py3k trunk with patch: --------------------------------------------------------------------------- f1 ============================================================ 2 0 LOAD_CONST 1 ( at 0xb7efa188, file "/home/gbr/devel/python/lc.py", line 2>) 3 MAKE_FUNCTION 0 6 LOAD_GLOBAL 0 (range) 9 LOAD_CONST 2 (10) 12 CALL_FUNCTION 1 15 GET_ITER 16 BUILD_LIST 0 19 CALL_FUNCTION 2 22 RETURN_VALUE co_consts[1] ------------------------------------------------------------ 2 0 SETUP_LOOP 20 (to 23) 3 LOAD_FAST 0 (.0) >> 6 FOR_ITER 13 (to 22) 9 STORE_FAST 2 (x) 12 LOAD_FAST 1 (.1) 15 LOAD_FAST 2 (x) 18 LIST_APPEND 19 JUMP_ABSOLUTE 6 >> 22 POP_BLOCK >> 23 LOAD_FAST 1 (.1) 26 RETURN_VALUE f2 ============================================================ 5 0 LOAD_CONST 1 ( at 0xb7efa728, file "/home/gbr/devel/python/lc.py", line 5>) 3 MAKE_FUNCTION 0 6 LOAD_GLOBAL 0 (range) 9 LOAD_CONST 2 (10) 12 CALL_FUNCTION 1 15 GET_ITER 16 BUILD_LIST 0 19 CALL_FUNCTION 2 22 RETURN_VALUE co_consts[1] ------------------------------------------------------------ 5 0 SETUP_LOOP 53 (to 56) 3 LOAD_FAST 0 (.0) >> 6 FOR_ITER 46 (to 55) 9 STORE_FAST 2 (x) 12 SETUP_LOOP 33 (to 48) 15 LOAD_GLOBAL 0 (range) 18 LOAD_CONST 0 (10) 21 CALL_FUNCTION 1 24 GET_ITER >> 25 FOR_ITER 19 (to 47) 28 STORE_FAST 3 (y) 31 LOAD_FAST 1 (.1) 34 LOAD_FAST 2 (x) 37 LOAD_FAST 3 (y) 40 BUILD_TUPLE 2 43 LIST_APPEND 44 JUMP_ABSOLUTE 25 >> 47 POP_BLOCK >> 48 LOAD_FAST 1 (.1) 51 RETURN_VALUE 52 JUMP_ABSOLUTE 6 >> 55 POP_BLOCK >> 56 LOAD_FAST 1 (.1) 59 RETURN_VALUE f3 ============================================================ 8 0 LOAD_CONST 1 ( at 0xb7efac38, file "/home/gbr/devel/python/lc.py", line 8>) 3 MAKE_FUNCTION 0 6 LOAD_GLOBAL 0 (range) 9 LOAD_CONST 2 (10) 12 CALL_FUNCTION 1 15 GET_ITER 16 BUILD_LIST 0 19 CALL_FUNCTION 2 22 RETURN_VALUE co_consts[1] ------------------------------------------------------------ 8 0 SETUP_LOOP 35 (to 38) 3 LOAD_FAST 0 (.0) >> 6 FOR_ITER 28 (to 37) 9 STORE_FAST 2 (x) 12 LOAD_FAST 2 (x) 15 LOAD_CONST 0 (2) 18 BINARY_MODULO 19 JUMP_IF_FALSE 11 (to 33) 22 POP_TOP 23 LOAD_FAST 1 (.1) 26 LOAD_FAST 2 (x) 29 LIST_APPEND 30 JUMP_ABSOLUTE 6 >> 33 POP_TOP 34 JUMP_ABSOLUTE 6 >> 37 POP_BLOCK >> 38 LOAD_FAST 1 (.1) 41 RETURN_VALUE f4 ============================================================ 11 0 LOAD_CONST 1 ( at 0xb7efaf98, file "/home/gbr/devel/python/lc.py", line 11>) 3 MAKE_FUNCTION 0 6 LOAD_GLOBAL 0 (range) 9 LOAD_CONST 2 (10) 12 CALL_FUNCTION 1 15 GET_ITER 16 BUILD_LIST 0 19 CALL_FUNCTION 2 22 RETURN_VALUE co_consts[1] ------------------------------------------------------------ 11 0 SETUP_LOOP 81 (to 84) 3 LOAD_FAST 0 (.0) >> 6 FOR_ITER 74 (to 83) 9 STORE_FAST 2 (x) 12 LOAD_FAST 2 (x) 15 LOAD_CONST 0 (2) 18 BINARY_MODULO 19 JUMP_IF_FALSE 57 (to 79) 22 POP_TOP 23 SETUP_LOOP 46 (to 72) 26 LOAD_GLOBAL 0 (range) 29 LOAD_CONST 1 (10) 32 CALL_FUNCTION 1 35 GET_ITER >> 36 FOR_ITER 32 (to 71) 39 STORE_FAST 3 (y) 42 LOAD_FAST 3 (y) 45 LOAD_CONST 2 (3) 48 BINARY_MODULO 49 JUMP_IF_FALSE 15 (to 67) 52 POP_TOP 53 LOAD_FAST 1 (.1) 56 LOAD_FAST 2 (x) 59 LOAD_CONST 0 (2) 62 BINARY_MULTIPLY 63 LIST_APPEND 64 JUMP_ABSOLUTE 36 >> 67 POP_TOP 68 JUMP_ABSOLUTE 36 >> 71 POP_BLOCK >> 72 LOAD_FAST 1 (.1) 75 RETURN_VALUE 76 JUMP_ABSOLUTE 6 >> 79 POP_TOP 80 JUMP_ABSOLUTE 6 >> 83 POP_BLOCK >> 84 LOAD_FAST 1 (.1) 87 RETURN_VALUE Set comprehensions =========================================================================== Executed file: --------------------------------------------------------------------------- def f1(): return {x for x in range(10)} def f2(): return {(x, y) for x in range(10) for y in range(10)} def f3(): return {x for x in range(10) if x % 2} def f4(): return {x*2 for x in range(10) if x % 2 for y in range(10) if y % 3} funcs = [f1, f2, f3, f4] import dis for func in funcs: print func.__name__ print "="*60 dis.dis(func) for idx, const in enumerate(func.func_code.co_consts): if type(const) is type(func.func_code): print "co_consts[%d]" % idx print "-"*60 dis.dis(const) print Output for Py3k trunk with patch: --------------------------------------------------------------------------- f1 ============================================================ 2 0 LOAD_CONST 1 ( at 0xb7f4f188, file "/home/gbr/devel/python/lc.py", line 2>) 3 MAKE_FUNCTION 0 6 LOAD_GLOBAL 0 (range) 9 LOAD_CONST 2 (10) 12 CALL_FUNCTION 1 15 GET_ITER 16 BUILD_SET 0 19 CALL_FUNCTION 2 22 RETURN_VALUE co_consts[1] ------------------------------------------------------------ 2 0 SETUP_LOOP 20 (to 23) 3 LOAD_FAST 0 (.0) >> 6 FOR_ITER 13 (to 22) 9 STORE_FAST 2 (x) 12 LOAD_FAST 1 (.1) 15 LOAD_FAST 2 (x) 18 SET_ADD 19 JUMP_ABSOLUTE 6 >> 22 POP_BLOCK >> 23 LOAD_FAST 1 (.1) 26 RETURN_VALUE f2 ============================================================ 5 0 LOAD_CONST 1 ( at 0xb7f4f728, file "/home/gbr/devel/python/lc.py", line 5>) 3 MAKE_FUNCTION 0 6 LOAD_GLOBAL 0 (range) 9 LOAD_CONST 2 (10) 12 CALL_FUNCTION 1 15 GET_ITER 16 BUILD_SET 0 19 CALL_FUNCTION 2 22 RETURN_VALUE co_consts[1] ------------------------------------------------------------ 5 0 SETUP_LOOP 53 (to 56) 3 LOAD_FAST 0 (.0) >> 6 FOR_ITER 46 (to 55) 9 STORE_FAST 2 (x) 12 SETUP_LOOP 33 (to 48) 15 LOAD_GLOBAL 0 (range) 18 LOAD_CONST 0 (10) 21 CALL_FUNCTION 1 24 GET_ITER >> 25 FOR_ITER 19 (to 47) 28 STORE_FAST 3 (y) 31 LOAD_FAST 1 (.1) 34 LOAD_FAST 2 (x) 37 LOAD_FAST 3 (y) 40 BUILD_TUPLE 2 43 SET_ADD 44 JUMP_ABSOLUTE 25 >> 47 POP_BLOCK >> 48 LOAD_FAST 1 (.1) 51 RETURN_VALUE 52 JUMP_ABSOLUTE 6 >> 55 POP_BLOCK >> 56 LOAD_FAST 1 (.1) 59 RETURN_VALUE f3 ============================================================ 8 0 LOAD_CONST 1 ( at 0xb7f4fc38, file "/home/gbr/devel/python/lc.py", line 8>) 3 MAKE_FUNCTION 0 6 LOAD_GLOBAL 0 (range) 9 LOAD_CONST 2 (10) 12 CALL_FUNCTION 1 15 GET_ITER 16 BUILD_SET 0 19 CALL_FUNCTION 2 22 RETURN_VALUE co_consts[1] ------------------------------------------------------------ 8 0 SETUP_LOOP 35 (to 38) 3 LOAD_FAST 0 (.0) >> 6 FOR_ITER 28 (to 37) 9 STORE_FAST 2 (x) 12 LOAD_FAST 2 (x) 15 LOAD_CONST 0 (2) 18 BINARY_MODULO 19 JUMP_IF_FALSE 11 (to 33) 22 POP_TOP 23 LOAD_FAST 1 (.1) 26 LOAD_FAST 2 (x) 29 SET_ADD 30 JUMP_ABSOLUTE 6 >> 33 POP_TOP 34 JUMP_ABSOLUTE 6 >> 37 POP_BLOCK >> 38 LOAD_FAST 1 (.1) 41 RETURN_VALUE f4 ============================================================ 11 0 LOAD_CONST 1 ( at 0xb7f4ff98, file "/home/gbr/devel/python/lc.py", line 11>) 3 MAKE_FUNCTION 0 6 LOAD_GLOBAL 0 (range) 9 LOAD_CONST 2 (10) 12 CALL_FUNCTION 1 15 GET_ITER 16 BUILD_SET 0 19 CALL_FUNCTION 2 22 RETURN_VALUE co_consts[1] ------------------------------------------------------------ 11 0 SETUP_LOOP 81 (to 84) 3 LOAD_FAST 0 (.0) >> 6 FOR_ITER 74 (to 83) 9 STORE_FAST 2 (x) 12 LOAD_FAST 2 (x) 15 LOAD_CONST 0 (2) 18 BINARY_MODULO 19 JUMP_IF_FALSE 57 (to 79) 22 POP_TOP 23 SETUP_LOOP 46 (to 72) 26 LOAD_GLOBAL 0 (range) 29 LOAD_CONST 1 (10) 32 CALL_FUNCTION 1 35 GET_ITER >> 36 FOR_ITER 32 (to 71) 39 STORE_FAST 3 (y) 42 LOAD_FAST 3 (y) 45 LOAD_CONST 2 (3) 48 BINARY_MODULO 49 JUMP_IF_FALSE 15 (to 67) 52 POP_TOP 53 LOAD_FAST 1 (.1) 56 LOAD_FAST 2 (x) 59 LOAD_CONST 0 (2) 62 BINARY_MULTIPLY 63 SET_ADD 64 JUMP_ABSOLUTE 36 >> 67 POP_TOP 68 JUMP_ABSOLUTE 36 >> 71 POP_BLOCK >> 72 LOAD_FAST 1 (.1) 75 RETURN_VALUE 76 JUMP_ABSOLUTE 6 >> 79 POP_TOP 80 JUMP_ABSOLUTE 6 >> 83 POP_BLOCK >> 84 LOAD_FAST 1 (.1) 87 RETURN_VALUE