On Sunday, May 12, 2013 7:51:28 AM UTC-7, Chris Angelico wrote: > On Mon, May 13, 2013 at 12:17 AM, Citizen Kant <citizenk...@gmail.com> wrote: > > > Maybe It'd be good if I explain myself a bit more. What I'm trying here is > > > to grasp Python from the game's abstraction point of view, as if it were, > > > for example, chess. > > > > Maybe you're going for something a little too complicated. Let's boil > > the question down to a much MUCH simpler subset: expression > > evaluation. And let's take Python itself right out of the picture, and > > work with only the following elements: > > > > * Parentheses ( ) > > * Multiplication and division * / > > * Addition and subtraction + - > > * Decimal integer constants 0123456789 > > > > This will give the basics of algebraic evaluation. It's quite fun to > > build a simple little expression evaluator that just does these few > > operations, and it's surprisingly useful (embed it within a command > > interpreter, for instance). Some time ago I wrote one into a Windows > > app (written in C++), and when I pulled it out just now and made it a > > stand-alone tool, the whole thing was only ~60 lines of code. Nice and > > easy to work with. > > > > So, let's take an expression and see what it really means. > > > > 2*(3+4)+6 > > > > One way to interpret this is with a stack. Here's how Python evaluates > > that expression: > > > > >>> def foo(): > > return 2*(three+4)+6 > > > > >>> dis.dis(foo) > > 2 0 LOAD_CONST 1 (2) > > 3 LOAD_GLOBAL 0 (three) > > 6 LOAD_CONST 2 (4) > > 9 BINARY_ADD > > 10 BINARY_MULTIPLY > > 11 LOAD_CONST 3 (6) > > 14 BINARY_ADD > > 15 RETURN_VALUE > > > > (I had to replace one of the constants with a global, to foil the optimizer) > > > > The LOAD statements add to an internal stack, the BINARY operations > > pop two operands and push the result. This is more-or-less the same > > technique as I used in my evaluator, except that instead of compiling > > it to code, I just march straight through, left to right, and so I had > > to maintain two stacks (one of operands, one of operators). > > > > Is this what you had in mind when you wanted to grasp Python's > > internals? Because it's pretty easy to explore, thanks to the dis > > module. There's a huge amount that can be learned about the > > interpreter, its optimizers, and so on, just by disassembling > > functions. Alternatively, if you're thinking on a more abstract level, > > leave Python aside altogether and pick up a book on language design. > > Also can be awesome fun, but completely different. > > > > ChrisA
No, that won't help. You're trying to give him knowledge; he wants understanding. -- http://mail.python.org/mailman/listinfo/python-list