OILS / opy / gold / all_name_lookups.py View on Github | oilshell.org

49 lines, 14 significant
1#!/usr/bin/env python2
2"""
3all_name_lookups.py
4
5This program demonstrates all of the following:
6
7 LOAD_FAST - for optimized locals
8 LOAD_NAME - for class and module namespaces
9 LOAD_ATTR - for the . operator
10 uses the descriptor protocol to look up methods!
11 LOAD_GLOBAL - when the compiler knows about 'global' ?
12 - and when you're at the global scope
13 LOAD_CONST - for looking up in the CodeObject
14
15Note: LOAD_ATTR seems to be very common.
16
17"""
18from __future__ import print_function
19
20import class_vs_closure
21
22def myfunc():
23 a = 1 # STORE_FAST
24 print(a+1) # LOAD_GLOBAL for print, LOAD_FAST for a
25
26 # LOAD_GLOBAL for module
27 # LOAD_ATTR for Adder
28 # LOAD_CONST for 42
29 # CALL_FUNCTION -- should be INIT_INSTANCE
30 obj = class_vs_closure.Adder(42)
31
32 obj.method(5) # LOAD_FAST and then LOAD_ATTR for method
33 # CALL_FUNCTION (should be CALL_METHOD)
34
35
36class F(object):
37 def __init__(self, x):
38 self.x = 42 # LOAD_FAST for self
39 # STORE_ATTR for self.x = 42
40
41 def method(self):
42 print(self.x)
43 # LOAD_GLOBAL for print
44 # LOAD_FAST for self
45 # LOAD_ATTR for x
46
47
48g = 1
49print(g+2) # LOAD_NAME for print, LOAD_NAME for g too.