On 28 May 2013 18:24, eryksun <eryk...@gmail.com> wrote: > On Tue, May 28, 2013 at 1:12 PM, Oscar Benjamin > <oscar.j.benja...@gmail.com> wrote: >> On 28 May 2013 17:48, eryksun <eryk...@gmail.com> wrote: >>> >>> The argument for dis.dis() can be a module, class, function or code >>> object. It disassembles all the top-level code objects that it finds, >>> but it doesn't recursively disassemble code objects that are in the >>> co_consts. >> >> What do you mean by this? I tried passing a test module into dis.dis >> and nothing happens: > > Obviously dis() has nothing to do if the module or class namespace has > no code objects to disassemble. > > Did you read the rest of my post?
Yes. Although I'll admit that I didn't fully absorb all of it. :) > I went through an example of loading > the cached code object from a .pyc. But we can just compile one > instead: Okay, got you. So the way to dis an ordinary module is to load the .py file as a string first: >>> dis.dis(compile(open('tmp.py').read(), 'tmp', 'exec')) 2 0 LOAD_CONST 0 (1) 3 STORE_NAME 0 (a) 3 6 LOAD_CONST 1 (2) 9 STORE_NAME 1 (b) 4 12 LOAD_NAME 0 (a) 15 LOAD_NAME 1 (b) 18 BINARY_ADD 19 STORE_NAME 2 (c) 22 LOAD_CONST 2 (None) 25 RETURN_VALUE So what happens to the code object for the top-level code in the module itself when it is imported in the normal way? Is it just discarded once import is complete? Is it temporarily accessible during import? Oscar _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor