Skip to content

Instantly share code, notes, and snippets.

@youknowone
Created August 30, 2019 15:31
Show Gist options
  • Save youknowone/def929a322d21535c9cf99117072f61a to your computer and use it in GitHub Desktop.
Save youknowone/def929a322d21535c9cf99117072f61a to your computer and use it in GitHub Desktop.
# generator targets shouldn't affect scopes out of comprehensions
[a for a in range(5)]
assert 'a' not in locals()
assert 'a' not in globals()
[b for a, b in [(1, 1), (2, 2)]]
assert 'b' not in locals()
assert 'b' not in globals()
{b: c for b, c in {1: 2}.items()}
assert 'b' not in locals()
assert 'c' not in locals()
assert 'b' not in globals()
assert 'c' not in globals()
Crawling file: cp.py
<_ast.Module object at 0x1091d15f8>
NODE Module
- body
NODE Expr row=2
- value
NODE ListComp row=2
- elt
NODE Name row=2
- id
OBJ a
- ctx
NODE Load
- generators
NODE comprehension
- target
NODE Name row=2
- id
OBJ a
- ctx
NODE Store
- iter
NODE Call row=2
- func
NODE Name row=2
- id
OBJ range
- ctx
NODE Load
- args
NODE Num row=2
- n
OBJ 5
- keywords
- ifs
- is_async
OBJ 0
NODE Assert row=3
- test
NODE Compare row=3
- left
NODE Str row=3
- s
OBJ a
- ops
NODE NotIn
- comparators
NODE Call row=3
- func
NODE Name row=3
- id
OBJ locals
- ctx
NODE Load
- args
- keywords
- msg
OBJ None
NODE Assert row=4
- test
NODE Compare row=4
- left
NODE Str row=4
- s
OBJ a
- ops
NODE NotIn
- comparators
NODE Call row=4
- func
NODE Name row=4
- id
OBJ globals
- ctx
NODE Load
- args
- keywords
- msg
OBJ None
NODE Expr row=6
- value
NODE ListComp row=6
- elt
NODE Name row=6
- id
OBJ b
- ctx
NODE Load
- generators
NODE comprehension
- target
NODE Tuple row=6
- elts
NODE Name row=6
- id
OBJ a
- ctx
NODE Store
NODE Name row=6
- id
OBJ b
- ctx
NODE Store
- ctx
NODE Store
- iter
NODE List row=6
- elts
NODE Tuple row=6
- elts
NODE Num row=6
- n
OBJ 1
NODE Num row=6
- n
OBJ 1
- ctx
NODE Load
NODE Tuple row=6
- elts
NODE Num row=6
- n
OBJ 2
NODE Num row=6
- n
OBJ 2
- ctx
NODE Load
- ctx
NODE Load
- ifs
- is_async
OBJ 0
NODE Assert row=7
- test
NODE Compare row=7
- left
NODE Str row=7
- s
OBJ b
- ops
NODE NotIn
- comparators
NODE Call row=7
- func
NODE Name row=7
- id
OBJ locals
- ctx
NODE Load
- args
- keywords
- msg
OBJ None
NODE Assert row=8
- test
NODE Compare row=8
- left
NODE Str row=8
- s
OBJ b
- ops
NODE NotIn
- comparators
NODE Call row=8
- func
NODE Name row=8
- id
OBJ globals
- ctx
NODE Load
- args
- keywords
- msg
OBJ None
NODE Expr row=10
- value
NODE DictComp row=10
- key
NODE Name row=10
- id
OBJ b
- ctx
NODE Load
- value
NODE Name row=10
- id
OBJ c
- ctx
NODE Load
- generators
NODE comprehension
- target
NODE Tuple row=10
- elts
NODE Name row=10
- id
OBJ b
- ctx
NODE Store
NODE Name row=10
- id
OBJ c
- ctx
NODE Store
- ctx
NODE Store
- iter
NODE Call row=10
- func
NODE Attribute row=10
- value
NODE Dict row=10
- keys
NODE Num row=10
- n
OBJ 1
- values
NODE Num row=10
- n
OBJ 2
- attr
OBJ items
- ctx
NODE Load
- args
- keywords
- ifs
- is_async
OBJ 0
NODE Assert row=11
- test
NODE Compare row=11
- left
NODE Str row=11
- s
OBJ b
- ops
NODE NotIn
- comparators
NODE Call row=11
- func
NODE Name row=11
- id
OBJ locals
- ctx
NODE Load
- args
- keywords
- msg
OBJ None
NODE Assert row=12
- test
NODE Compare row=12
- left
NODE Str row=12
- s
OBJ c
- ops
NODE NotIn
- comparators
NODE Call row=12
- func
NODE Name row=12
- id
OBJ locals
- ctx
NODE Load
- args
- keywords
- msg
OBJ None
NODE Assert row=13
- test
NODE Compare row=13
- left
NODE Str row=13
- s
OBJ b
- ops
NODE NotIn
- comparators
NODE Call row=13
- func
NODE Name row=13
- id
OBJ globals
- ctx
NODE Load
- args
- keywords
- msg
OBJ None
NODE Assert row=14
- test
NODE Compare row=14
- left
NODE Str row=14
- s
OBJ c
- ops
NODE NotIn
- comparators
NODE Call row=14
- func
NODE Name row=14
- id
OBJ globals
- ctx
NODE Load
- args
- keywords
- msg
OBJ None
table: top
name: top
type: module
line: 0
identifiers: dict_keys(['range', 'locals', 'globals'])
Syms:
sym: range flags: is_referenced is_global
sym: locals flags: is_referenced is_global
sym: globals flags: is_referenced is_global
Child tables:
table: listcomp
name: listcomp
type: function
line: 2
identifiers: dict_keys(['.0', 'a'])
Syms:
sym: .0 flags: is_local is_parameter
sym: a flags: is_referenced is_assigned is_local
table: listcomp
name: listcomp
type: function
line: 6
identifiers: dict_keys(['.0', 'a', 'b'])
Syms:
sym: .0 flags: is_local is_parameter
sym: a flags: is_assigned is_local
sym: b flags: is_referenced is_assigned is_local
table: dictcomp
name: dictcomp
type: function
line: 10
identifiers: dict_keys(['.0', 'b', 'c'])
Syms:
sym: .0 flags: is_local is_parameter
sym: b flags: is_referenced is_assigned is_local
sym: c flags: is_referenced is_assigned is_local
======== dis.dis ========
2 0 LOAD_CONST 0 (<code object <listcomp> at 0x1091b2c90, file "cp.py", line 2>)
2 LOAD_CONST 1 ('<listcomp>')
4 MAKE_FUNCTION 0
6 LOAD_NAME 0 (range)
8 LOAD_CONST 2 (5)
10 CALL_FUNCTION 1
12 GET_ITER
14 CALL_FUNCTION 1
16 POP_TOP
3 18 LOAD_CONST 3 ('a')
20 LOAD_NAME 1 (locals)
22 CALL_FUNCTION 0
24 COMPARE_OP 7 (not in)
26 POP_JUMP_IF_TRUE 32
28 LOAD_GLOBAL 2 (AssertionError)
30 RAISE_VARARGS 1
4 >> 32 LOAD_CONST 3 ('a')
34 LOAD_NAME 3 (globals)
36 CALL_FUNCTION 0
38 COMPARE_OP 7 (not in)
40 POP_JUMP_IF_TRUE 46
42 LOAD_GLOBAL 2 (AssertionError)
44 RAISE_VARARGS 1
6 >> 46 LOAD_CONST 4 (<code object <listcomp> at 0x1091bae40, file "cp.py", line 6>)
48 LOAD_CONST 1 ('<listcomp>')
50 MAKE_FUNCTION 0
52 LOAD_CONST 5 (((1, 1), (2, 2)))
54 GET_ITER
56 CALL_FUNCTION 1
58 POP_TOP
7 60 LOAD_CONST 6 ('b')
62 LOAD_NAME 1 (locals)
64 CALL_FUNCTION 0
66 COMPARE_OP 7 (not in)
68 POP_JUMP_IF_TRUE 74
70 LOAD_GLOBAL 2 (AssertionError)
72 RAISE_VARARGS 1
8 >> 74 LOAD_CONST 6 ('b')
76 LOAD_NAME 3 (globals)
78 CALL_FUNCTION 0
80 COMPARE_OP 7 (not in)
82 POP_JUMP_IF_TRUE 88
84 LOAD_GLOBAL 2 (AssertionError)
86 RAISE_VARARGS 1
10 >> 88 LOAD_CONST 7 (<code object <dictcomp> at 0x1091bad20, file "cp.py", line 10>)
90 LOAD_CONST 8 ('<dictcomp>')
92 MAKE_FUNCTION 0
94 LOAD_CONST 9 (1)
96 LOAD_CONST 10 (2)
98 BUILD_MAP 1
100 LOAD_METHOD 4 (items)
102 CALL_METHOD 0
104 GET_ITER
106 CALL_FUNCTION 1
108 POP_TOP
11 110 LOAD_CONST 6 ('b')
112 LOAD_NAME 1 (locals)
114 CALL_FUNCTION 0
116 COMPARE_OP 7 (not in)
118 POP_JUMP_IF_TRUE 124
120 LOAD_GLOBAL 2 (AssertionError)
122 RAISE_VARARGS 1
12 >> 124 LOAD_CONST 11 ('c')
126 LOAD_NAME 1 (locals)
128 CALL_FUNCTION 0
130 COMPARE_OP 7 (not in)
132 POP_JUMP_IF_TRUE 138
134 LOAD_GLOBAL 2 (AssertionError)
136 RAISE_VARARGS 1
13 >> 138 LOAD_CONST 6 ('b')
140 LOAD_NAME 3 (globals)
142 CALL_FUNCTION 0
144 COMPARE_OP 7 (not in)
146 POP_JUMP_IF_TRUE 152
148 LOAD_GLOBAL 2 (AssertionError)
150 RAISE_VARARGS 1
14 >> 152 LOAD_CONST 11 ('c')
154 LOAD_NAME 3 (globals)
156 CALL_FUNCTION 0
158 COMPARE_OP 7 (not in)
160 POP_JUMP_IF_TRUE 166
162 LOAD_GLOBAL 2 (AssertionError)
164 RAISE_VARARGS 1
>> 166 LOAD_CONST 12 (None)
168 RETURN_VALUE
Disassembly of <code object <listcomp> at 0x1091b2c90, file "cp.py", line 2>:
2 0 BUILD_LIST 0
2 LOAD_FAST 0 (.0)
>> 4 FOR_ITER 8 (to 14)
6 STORE_FAST 1 (a)
8 LOAD_FAST 1 (a)
10 LIST_APPEND 2
12 JUMP_ABSOLUTE 4
>> 14 RETURN_VALUE
Disassembly of <code object <listcomp> at 0x1091bae40, file "cp.py", line 6>:
6 0 BUILD_LIST 0
2 LOAD_FAST 0 (.0)
>> 4 FOR_ITER 12 (to 18)
6 UNPACK_SEQUENCE 2
8 STORE_FAST 1 (a)
10 STORE_FAST 2 (b)
12 LOAD_FAST 2 (b)
14 LIST_APPEND 2
16 JUMP_ABSOLUTE 4
>> 18 RETURN_VALUE
Disassembly of <code object <dictcomp> at 0x1091bad20, file "cp.py", line 10>:
10 0 BUILD_MAP 0
2 LOAD_FAST 0 (.0)
>> 4 FOR_ITER 14 (to 20)
6 UNPACK_SEQUENCE 2
8 STORE_FAST 1 (b)
10 STORE_FAST 2 (c)
12 LOAD_FAST 2 (c)
14 LOAD_FAST 1 (b)
16 MAP_ADD 2
18 JUMP_ABSOLUTE 4
>> 20 RETURN_VALUE
--- cpy.out 2019-08-31 00:27:28.000000000 +0900
+++ rpy.out 2019-08-31 00:28:14.000000000 +0900
@@ -1,16 +1,10 @@
Crawling file: cp.py
-<_ast.Module object at 0x1091d15f8>
+<Module object at 0x7fb272245eb0>
NODE Module
- body
NODE Expr row=2
- value
NODE ListComp row=2
- - elt
- NODE Name row=2
- - id
- OBJ a
- - ctx
- NODE Load
- generators
NODE comprehension
- target
@@ -18,7 +12,7 @@
- id
OBJ a
- ctx
- NODE Store
+ OBJ None
- iter
NODE Call row=2
- func
@@ -26,7 +20,7 @@
- id
OBJ range
- ctx
- NODE Load
+ OBJ None
- args
NODE Num row=2
- n
@@ -34,7 +28,7 @@
- keywords
- ifs
- is_async
- OBJ 0
+ OBJ False
NODE Assert row=3
- test
NODE Compare row=3
@@ -43,7 +37,7 @@
- s
OBJ a
- ops
- NODE NotIn
+ OBJ NotIn
- comparators
NODE Call row=3
- func
@@ -51,7 +45,7 @@
- id
OBJ locals
- ctx
- NODE Load
+ OBJ None
- args
- keywords
- msg
@@ -64,7 +58,7 @@
- s
OBJ a
- ops
- NODE NotIn
+ OBJ NotIn
- comparators
NODE Call row=4
- func
@@ -72,7 +66,7 @@
- id
OBJ globals
- ctx
- NODE Load
+ OBJ None
- args
- keywords
- msg
@@ -80,12 +74,6 @@
NODE Expr row=6
- value
NODE ListComp row=6
- - elt
- NODE Name row=6
- - id
- OBJ b
- - ctx
- NODE Load
- generators
NODE comprehension
- target
@@ -95,14 +83,12 @@
- id
OBJ a
- ctx
- NODE Store
+ OBJ None
NODE Name row=6
- id
OBJ b
- ctx
- NODE Store
- - ctx
- NODE Store
+ OBJ None
- iter
NODE List row=6
- elts
@@ -114,8 +100,6 @@
NODE Num row=6
- n
OBJ 1
- - ctx
- NODE Load
NODE Tuple row=6
- elts
NODE Num row=6
@@ -124,13 +108,9 @@
NODE Num row=6
- n
OBJ 2
- - ctx
- NODE Load
- - ctx
- NODE Load
- ifs
- is_async
- OBJ 0
+ OBJ False
NODE Assert row=7
- test
NODE Compare row=7
@@ -139,7 +119,7 @@
- s
OBJ b
- ops
- NODE NotIn
+ OBJ NotIn
- comparators
NODE Call row=7
- func
@@ -147,7 +127,7 @@
- id
OBJ locals
- ctx
- NODE Load
+ OBJ None
- args
- keywords
- msg
@@ -160,7 +140,7 @@
- s
OBJ b
- ops
- NODE NotIn
+ OBJ NotIn
- comparators
NODE Call row=8
- func
@@ -168,7 +148,7 @@
- id
OBJ globals
- ctx
- NODE Load
+ OBJ None
- args
- keywords
- msg
@@ -176,18 +156,6 @@
NODE Expr row=10
- value
NODE DictComp row=10
- - key
- NODE Name row=10
- - id
- OBJ b
- - ctx
- NODE Load
- - value
- NODE Name row=10
- - id
- OBJ c
- - ctx
- NODE Load
- generators
NODE comprehension
- target
@@ -197,14 +165,12 @@
- id
OBJ b
- ctx
- NODE Store
+ OBJ None
NODE Name row=10
- id
OBJ c
- ctx
- NODE Store
- - ctx
- NODE Store
+ OBJ None
- iter
NODE Call row=10
- func
@@ -222,12 +188,12 @@
- attr
OBJ items
- ctx
- NODE Load
+ OBJ None
- args
- keywords
- ifs
- is_async
- OBJ 0
+ OBJ False
NODE Assert row=11
- test
NODE Compare row=11
@@ -236,7 +202,7 @@
- s
OBJ b
- ops
- NODE NotIn
+ OBJ NotIn
- comparators
NODE Call row=11
- func
@@ -244,7 +210,7 @@
- id
OBJ locals
- ctx
- NODE Load
+ OBJ None
- args
- keywords
- msg
@@ -257,7 +223,7 @@
- s
OBJ c
- ops
- NODE NotIn
+ OBJ NotIn
- comparators
NODE Call row=12
- func
@@ -265,7 +231,7 @@
- id
OBJ locals
- ctx
- NODE Load
+ OBJ None
- args
- keywords
- msg
@@ -278,7 +244,7 @@
- s
OBJ b
- ops
- NODE NotIn
+ OBJ NotIn
- comparators
NODE Call row=13
- func
@@ -286,7 +252,7 @@
- id
OBJ globals
- ctx
- NODE Load
+ OBJ None
- args
- keywords
- msg
@@ -299,7 +265,7 @@
- s
OBJ c
- ops
- NODE NotIn
+ OBJ NotIn
- comparators
NODE Call row=14
- func
@@ -307,7 +273,7 @@
- id
OBJ globals
- ctx
- NODE Load
+ OBJ None
- args
- keywords
- msg
@@ -316,168 +282,137 @@
name: top
type: module
line: 0
- identifiers: dict_keys(['range', 'locals', 'globals'])
+ identifiers: ['a', 'range', 'locals', 'globals', 'b', 'c']
Syms:
+ sym: a flags: is_referenced is_assigned is_local
sym: range flags: is_referenced is_global
sym: locals flags: is_referenced is_global
sym: globals flags: is_referenced is_global
- Child tables:
- table: listcomp
- name: listcomp
- type: function
- line: 2
- identifiers: dict_keys(['.0', 'a'])
- Syms:
- sym: .0 flags: is_local is_parameter
- sym: a flags: is_referenced is_assigned is_local
- table: listcomp
- name: listcomp
- type: function
- line: 6
- identifiers: dict_keys(['.0', 'a', 'b'])
- Syms:
- sym: .0 flags: is_local is_parameter
- sym: a flags: is_assigned is_local
- sym: b flags: is_referenced is_assigned is_local
- table: dictcomp
- name: dictcomp
- type: function
- line: 10
- identifiers: dict_keys(['.0', 'b', 'c'])
- Syms:
- sym: .0 flags: is_local is_parameter
- sym: b flags: is_referenced is_assigned is_local
- sym: c flags: is_referenced is_assigned is_local
+ sym: b flags: is_referenced is_assigned is_local
+ sym: c flags: is_referenced is_assigned is_local
======== dis.dis ========
- 2 0 LOAD_CONST 0 (<code object <listcomp> at 0x1091b2c90, file "cp.py", line 2>)
- 2 LOAD_CONST 1 ('<listcomp>')
- 4 MAKE_FUNCTION 0
- 6 LOAD_NAME 0 (range)
- 8 LOAD_CONST 2 (5)
- 10 CALL_FUNCTION 1
- 12 GET_ITER
- 14 CALL_FUNCTION 1
- 16 POP_TOP
-
- 3 18 LOAD_CONST 3 ('a')
- 20 LOAD_NAME 1 (locals)
- 22 CALL_FUNCTION 0
- 24 COMPARE_OP 7 (not in)
- 26 POP_JUMP_IF_TRUE 32
- 28 LOAD_GLOBAL 2 (AssertionError)
- 30 RAISE_VARARGS 1
-
- 4 >> 32 LOAD_CONST 3 ('a')
- 34 LOAD_NAME 3 (globals)
- 36 CALL_FUNCTION 0
- 38 COMPARE_OP 7 (not in)
- 40 POP_JUMP_IF_TRUE 46
- 42 LOAD_GLOBAL 2 (AssertionError)
- 44 RAISE_VARARGS 1
-
- 6 >> 46 LOAD_CONST 4 (<code object <listcomp> at 0x1091bae40, file "cp.py", line 6>)
- 48 LOAD_CONST 1 ('<listcomp>')
- 50 MAKE_FUNCTION 0
- 52 LOAD_CONST 5 (((1, 1), (2, 2)))
- 54 GET_ITER
- 56 CALL_FUNCTION 1
- 58 POP_TOP
-
- 7 60 LOAD_CONST 6 ('b')
- 62 LOAD_NAME 1 (locals)
- 64 CALL_FUNCTION 0
- 66 COMPARE_OP 7 (not in)
- 68 POP_JUMP_IF_TRUE 74
- 70 LOAD_GLOBAL 2 (AssertionError)
- 72 RAISE_VARARGS 1
-
- 8 >> 74 LOAD_CONST 6 ('b')
- 76 LOAD_NAME 3 (globals)
- 78 CALL_FUNCTION 0
- 80 COMPARE_OP 7 (not in)
- 82 POP_JUMP_IF_TRUE 88
- 84 LOAD_GLOBAL 2 (AssertionError)
- 86 RAISE_VARARGS 1
-
- 10 >> 88 LOAD_CONST 7 (<code object <dictcomp> at 0x1091bad20, file "cp.py", line 10>)
- 90 LOAD_CONST 8 ('<dictcomp>')
- 92 MAKE_FUNCTION 0
- 94 LOAD_CONST 9 (1)
- 96 LOAD_CONST 10 (2)
- 98 BUILD_MAP 1
- 100 LOAD_METHOD 4 (items)
- 102 CALL_METHOD 0
- 104 GET_ITER
- 106 CALL_FUNCTION 1
- 108 POP_TOP
-
- 11 110 LOAD_CONST 6 ('b')
- 112 LOAD_NAME 1 (locals)
- 114 CALL_FUNCTION 0
- 116 COMPARE_OP 7 (not in)
- 118 POP_JUMP_IF_TRUE 124
- 120 LOAD_GLOBAL 2 (AssertionError)
- 122 RAISE_VARARGS 1
-
- 12 >> 124 LOAD_CONST 11 ('c')
- 126 LOAD_NAME 1 (locals)
- 128 CALL_FUNCTION 0
- 130 COMPARE_OP 7 (not in)
- 132 POP_JUMP_IF_TRUE 138
- 134 LOAD_GLOBAL 2 (AssertionError)
- 136 RAISE_VARARGS 1
-
- 13 >> 138 LOAD_CONST 6 ('b')
- 140 LOAD_NAME 3 (globals)
- 142 CALL_FUNCTION 0
- 144 COMPARE_OP 7 (not in)
- 146 POP_JUMP_IF_TRUE 152
- 148 LOAD_GLOBAL 2 (AssertionError)
- 150 RAISE_VARARGS 1
-
- 14 >> 152 LOAD_CONST 11 ('c')
- 154 LOAD_NAME 3 (globals)
- 156 CALL_FUNCTION 0
- 158 COMPARE_OP 7 (not in)
- 160 POP_JUMP_IF_TRUE 166
- 162 LOAD_GLOBAL 2 (AssertionError)
- 164 RAISE_VARARGS 1
- >> 166 LOAD_CONST 12 (None)
- 168 RETURN_VALUE
-
-Disassembly of <code object <listcomp> at 0x1091b2c90, file "cp.py", line 2>:
- 2 0 BUILD_LIST 0
- 2 LOAD_FAST 0 (.0)
- >> 4 FOR_ITER 8 (to 14)
- 6 STORE_FAST 1 (a)
- 8 LOAD_FAST 1 (a)
- 10 LIST_APPEND 2
- 12 JUMP_ABSOLUTE 4
- >> 14 RETURN_VALUE
-
-Disassembly of <code object <listcomp> at 0x1091bae40, file "cp.py", line 6>:
- 6 0 BUILD_LIST 0
- 2 LOAD_FAST 0 (.0)
- >> 4 FOR_ITER 12 (to 18)
- 6 UNPACK_SEQUENCE 2
- 8 STORE_FAST 1 (a)
- 10 STORE_FAST 2 (b)
- 12 LOAD_FAST 2 (b)
- 14 LIST_APPEND 2
- 16 JUMP_ABSOLUTE 4
- >> 18 RETURN_VALUE
-
-Disassembly of <code object <dictcomp> at 0x1091bad20, file "cp.py", line 10>:
- 10 0 BUILD_MAP 0
- 2 LOAD_FAST 0 (.0)
- >> 4 FOR_ITER 14 (to 20)
- 6 UNPACK_SEQUENCE 2
- 8 STORE_FAST 1 (b)
- 10 STORE_FAST 2 (c)
- 12 LOAD_FAST 2 (c)
- 14 LOAD_FAST 1 (b)
- 16 MAP_ADD 2
- 18 JUMP_ABSOLUTE 4
- >> 20 RETURN_VALUE
+ 0 LoadConst (<code object <listcomp> at ??? file "cp.py", line 2>)
+ 1 LoadConst ("<listcomp>")
+ 2 MakeFunction ((empty))
+ 3 LoadName (range, Global)
+ 4 LoadConst (5)
+ 5 CallFunction (Positional(1))
+ 6 GetIter
+ 7 CallFunction (Positional(1))
+ 8 Pop
+ 9 LoadConst ("a")
+ 10 LoadName (locals, Global)
+ 11 CallFunction (Positional(0))
+ 12 CompareOperation (NotIn)
+ 13 Jump (16)
+ >> 14 Rotate (2)
+ 15 Pop
+ >> 16 JumpIfTrue (20)
+ 17 LoadName (AssertionError, Global)
+ 18 CallFunction (Positional(0))
+ 19 Raise (1)
+ >> 20 LoadConst ("a")
+ 21 LoadName (globals, Global)
+ 22 CallFunction (Positional(0))
+ 23 CompareOperation (NotIn)
+ 24 Jump (27)
+ >> 25 Rotate (2)
+ 26 Pop
+ >> 27 JumpIfTrue (31)
+ 28 LoadName (AssertionError, Global)
+ 29 CallFunction (Positional(0))
+ 30 Raise (1)
+ >> 31 LoadConst (<code object <listcomp> at ??? file "cp.py", line 6>)
+ 32 LoadConst ("<listcomp>")
+ 33 MakeFunction ((empty))
+ 34 LoadConst (1)
+ 35 LoadConst (1)
+ 36 BuildTuple (2, false)
+ 37 LoadConst (2)
+ 38 LoadConst (2)
+ 39 BuildTuple (2, false)
+ 40 BuildList (2, false)
+ 41 GetIter
+ 42 CallFunction (Positional(1))
+ 43 Pop
+ 44 LoadConst ("b")
+ 45 LoadName (locals, Global)
+ 46 CallFunction (Positional(0))
+ 47 CompareOperation (NotIn)
+ 48 Jump (51)
+ >> 49 Rotate (2)
+ 50 Pop
+ >> 51 JumpIfTrue (55)
+ 52 LoadName (AssertionError, Global)
+ 53 CallFunction (Positional(0))
+ 54 Raise (1)
+ >> 55 LoadConst ("b")
+ 56 LoadName (globals, Global)
+ 57 CallFunction (Positional(0))
+ 58 CompareOperation (NotIn)
+ 59 Jump (62)
+ >> 60 Rotate (2)
+ 61 Pop
+ >> 62 JumpIfTrue (66)
+ 63 LoadName (AssertionError, Global)
+ 64 CallFunction (Positional(0))
+ 65 Raise (1)
+ >> 66 LoadConst (<code object <dictcomp> at ??? file "cp.py", line 10>)
+ 67 LoadConst ("<dictcomp>")
+ 68 MakeFunction ((empty))
+ 69 LoadConst (1)
+ 70 LoadConst (2)
+ 71 BuildMap (1, false)
+ 72 LoadAttr (items)
+ 73 CallFunction (Positional(0))
+ 74 GetIter
+ 75 CallFunction (Positional(1))
+ 76 Pop
+ 77 LoadConst ("b")
+ 78 LoadName (locals, Global)
+ 79 CallFunction (Positional(0))
+ 80 CompareOperation (NotIn)
+ 81 Jump (84)
+ >> 82 Rotate (2)
+ 83 Pop
+ >> 84 JumpIfTrue (88)
+ 85 LoadName (AssertionError, Global)
+ 86 CallFunction (Positional(0))
+ 87 Raise (1)
+ >> 88 LoadConst ("c")
+ 89 LoadName (locals, Global)
+ 90 CallFunction (Positional(0))
+ 91 CompareOperation (NotIn)
+ 92 Jump (95)
+ >> 93 Rotate (2)
+ 94 Pop
+ >> 95 JumpIfTrue (99)
+ 96 LoadName (AssertionError, Global)
+ 97 CallFunction (Positional(0))
+ 98 Raise (1)
+ >> 99 LoadConst ("b")
+ 100 LoadName (globals, Global)
+ 101 CallFunction (Positional(0))
+ 102 CompareOperation (NotIn)
+ 103 Jump (106)
+ >> 104 Rotate (2)
+ 105 Pop
+ >> 106 JumpIfTrue (110)
+ 107 LoadName (AssertionError, Global)
+ 108 CallFunction (Positional(0))
+ 109 Raise (1)
+ >> 110 LoadConst ("c")
+ 111 LoadName (globals, Global)
+ 112 CallFunction (Positional(0))
+ 113 CompareOperation (NotIn)
+ 114 Jump (117)
+ >> 115 Rotate (2)
+ 116 Pop
+ >> 117 JumpIfTrue (121)
+ 118 LoadName (AssertionError, Global)
+ 119 CallFunction (Positional(0))
+ 120 Raise (1)
+ >> 121 LoadConst (None)
+ 122 ReturnValue
Crawling file: cp.py
<Module object at 0x7fb272245eb0>
NODE Module
- body
NODE Expr row=2
- value
NODE ListComp row=2
- generators
NODE comprehension
- target
NODE Name row=2
- id
OBJ a
- ctx
OBJ None
- iter
NODE Call row=2
- func
NODE Name row=2
- id
OBJ range
- ctx
OBJ None
- args
NODE Num row=2
- n
OBJ 5
- keywords
- ifs
- is_async
OBJ False
NODE Assert row=3
- test
NODE Compare row=3
- left
NODE Str row=3
- s
OBJ a
- ops
OBJ NotIn
- comparators
NODE Call row=3
- func
NODE Name row=3
- id
OBJ locals
- ctx
OBJ None
- args
- keywords
- msg
OBJ None
NODE Assert row=4
- test
NODE Compare row=4
- left
NODE Str row=4
- s
OBJ a
- ops
OBJ NotIn
- comparators
NODE Call row=4
- func
NODE Name row=4
- id
OBJ globals
- ctx
OBJ None
- args
- keywords
- msg
OBJ None
NODE Expr row=6
- value
NODE ListComp row=6
- generators
NODE comprehension
- target
NODE Tuple row=6
- elts
NODE Name row=6
- id
OBJ a
- ctx
OBJ None
NODE Name row=6
- id
OBJ b
- ctx
OBJ None
- iter
NODE List row=6
- elts
NODE Tuple row=6
- elts
NODE Num row=6
- n
OBJ 1
NODE Num row=6
- n
OBJ 1
NODE Tuple row=6
- elts
NODE Num row=6
- n
OBJ 2
NODE Num row=6
- n
OBJ 2
- ifs
- is_async
OBJ False
NODE Assert row=7
- test
NODE Compare row=7
- left
NODE Str row=7
- s
OBJ b
- ops
OBJ NotIn
- comparators
NODE Call row=7
- func
NODE Name row=7
- id
OBJ locals
- ctx
OBJ None
- args
- keywords
- msg
OBJ None
NODE Assert row=8
- test
NODE Compare row=8
- left
NODE Str row=8
- s
OBJ b
- ops
OBJ NotIn
- comparators
NODE Call row=8
- func
NODE Name row=8
- id
OBJ globals
- ctx
OBJ None
- args
- keywords
- msg
OBJ None
NODE Expr row=10
- value
NODE DictComp row=10
- generators
NODE comprehension
- target
NODE Tuple row=10
- elts
NODE Name row=10
- id
OBJ b
- ctx
OBJ None
NODE Name row=10
- id
OBJ c
- ctx
OBJ None
- iter
NODE Call row=10
- func
NODE Attribute row=10
- value
NODE Dict row=10
- keys
NODE Num row=10
- n
OBJ 1
- values
NODE Num row=10
- n
OBJ 2
- attr
OBJ items
- ctx
OBJ None
- args
- keywords
- ifs
- is_async
OBJ False
NODE Assert row=11
- test
NODE Compare row=11
- left
NODE Str row=11
- s
OBJ b
- ops
OBJ NotIn
- comparators
NODE Call row=11
- func
NODE Name row=11
- id
OBJ locals
- ctx
OBJ None
- args
- keywords
- msg
OBJ None
NODE Assert row=12
- test
NODE Compare row=12
- left
NODE Str row=12
- s
OBJ c
- ops
OBJ NotIn
- comparators
NODE Call row=12
- func
NODE Name row=12
- id
OBJ locals
- ctx
OBJ None
- args
- keywords
- msg
OBJ None
NODE Assert row=13
- test
NODE Compare row=13
- left
NODE Str row=13
- s
OBJ b
- ops
OBJ NotIn
- comparators
NODE Call row=13
- func
NODE Name row=13
- id
OBJ globals
- ctx
OBJ None
- args
- keywords
- msg
OBJ None
NODE Assert row=14
- test
NODE Compare row=14
- left
NODE Str row=14
- s
OBJ c
- ops
OBJ NotIn
- comparators
NODE Call row=14
- func
NODE Name row=14
- id
OBJ globals
- ctx
OBJ None
- args
- keywords
- msg
OBJ None
table: top
name: top
type: module
line: 0
identifiers: ['a', 'range', 'locals', 'globals', 'b', 'c']
Syms:
sym: a flags: is_referenced is_assigned is_local
sym: range flags: is_referenced is_global
sym: locals flags: is_referenced is_global
sym: globals flags: is_referenced is_global
sym: b flags: is_referenced is_assigned is_local
sym: c flags: is_referenced is_assigned is_local
======== dis.dis ========
0 LoadConst (<code object <listcomp> at ??? file "cp.py", line 2>)
1 LoadConst ("<listcomp>")
2 MakeFunction ((empty))
3 LoadName (range, Global)
4 LoadConst (5)
5 CallFunction (Positional(1))
6 GetIter
7 CallFunction (Positional(1))
8 Pop
9 LoadConst ("a")
10 LoadName (locals, Global)
11 CallFunction (Positional(0))
12 CompareOperation (NotIn)
13 Jump (16)
>> 14 Rotate (2)
15 Pop
>> 16 JumpIfTrue (20)
17 LoadName (AssertionError, Global)
18 CallFunction (Positional(0))
19 Raise (1)
>> 20 LoadConst ("a")
21 LoadName (globals, Global)
22 CallFunction (Positional(0))
23 CompareOperation (NotIn)
24 Jump (27)
>> 25 Rotate (2)
26 Pop
>> 27 JumpIfTrue (31)
28 LoadName (AssertionError, Global)
29 CallFunction (Positional(0))
30 Raise (1)
>> 31 LoadConst (<code object <listcomp> at ??? file "cp.py", line 6>)
32 LoadConst ("<listcomp>")
33 MakeFunction ((empty))
34 LoadConst (1)
35 LoadConst (1)
36 BuildTuple (2, false)
37 LoadConst (2)
38 LoadConst (2)
39 BuildTuple (2, false)
40 BuildList (2, false)
41 GetIter
42 CallFunction (Positional(1))
43 Pop
44 LoadConst ("b")
45 LoadName (locals, Global)
46 CallFunction (Positional(0))
47 CompareOperation (NotIn)
48 Jump (51)
>> 49 Rotate (2)
50 Pop
>> 51 JumpIfTrue (55)
52 LoadName (AssertionError, Global)
53 CallFunction (Positional(0))
54 Raise (1)
>> 55 LoadConst ("b")
56 LoadName (globals, Global)
57 CallFunction (Positional(0))
58 CompareOperation (NotIn)
59 Jump (62)
>> 60 Rotate (2)
61 Pop
>> 62 JumpIfTrue (66)
63 LoadName (AssertionError, Global)
64 CallFunction (Positional(0))
65 Raise (1)
>> 66 LoadConst (<code object <dictcomp> at ??? file "cp.py", line 10>)
67 LoadConst ("<dictcomp>")
68 MakeFunction ((empty))
69 LoadConst (1)
70 LoadConst (2)
71 BuildMap (1, false)
72 LoadAttr (items)
73 CallFunction (Positional(0))
74 GetIter
75 CallFunction (Positional(1))
76 Pop
77 LoadConst ("b")
78 LoadName (locals, Global)
79 CallFunction (Positional(0))
80 CompareOperation (NotIn)
81 Jump (84)
>> 82 Rotate (2)
83 Pop
>> 84 JumpIfTrue (88)
85 LoadName (AssertionError, Global)
86 CallFunction (Positional(0))
87 Raise (1)
>> 88 LoadConst ("c")
89 LoadName (locals, Global)
90 CallFunction (Positional(0))
91 CompareOperation (NotIn)
92 Jump (95)
>> 93 Rotate (2)
94 Pop
>> 95 JumpIfTrue (99)
96 LoadName (AssertionError, Global)
97 CallFunction (Positional(0))
98 Raise (1)
>> 99 LoadConst ("b")
100 LoadName (globals, Global)
101 CallFunction (Positional(0))
102 CompareOperation (NotIn)
103 Jump (106)
>> 104 Rotate (2)
105 Pop
>> 106 JumpIfTrue (110)
107 LoadName (AssertionError, Global)
108 CallFunction (Positional(0))
109 Raise (1)
>> 110 LoadConst ("c")
111 LoadName (globals, Global)
112 CallFunction (Positional(0))
113 CompareOperation (NotIn)
114 Jump (117)
>> 115 Rotate (2)
116 Pop
>> 117 JumpIfTrue (121)
118 LoadName (AssertionError, Global)
119 CallFunction (Positional(0))
120 Raise (1)
>> 121 LoadConst (None)
122 ReturnValue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment