On Thursday 14 July 2016 10:14, Ian Kelly wrote: > On Wed, Jul 13, 2016 at 12:48 PM, Vijay Kumar <vijayku...@bravegnu.org> > wrote: >> Hi Everyone, >> I wrote an article on Python byte code hacking. The article is available >> from http://www.bravegnu.org/blog/python-byte-code-hacks.html The article >> uses an incremental approach for explaining Python's code objects and how to >> modify them. Unfortunately, I am stuck with Python 2, because Python 2 does >> not optimize out the divide operation, at compile time, and my example >> sequence depends on that behavior. > > def f(): > return g(6, 2) > > def g(a, b): > return a // b > > Now it can't optimize out the operation.
I haven't had time to read the article yet, but is Vijay talking about Python's peekhole optimizer? It does constant folding, so that arithmetic expressions containing *only* constants will compile to the result: def f(): return 6//2 # compiles to "return 3" The simplest way to defeat that is to use a variable: def f(): x = 6 return x//2 The peephole optimizer is simple-minded enough that it won't pre-compute that. Let's check: py> import dis py> def f(): return 6//2 ... py> dis.dis(f) 1 0 LOAD_CONST 3 (3) 3 RETURN_VALUE py> def f(): ... x = 6 ... return x//2 ... py> dis.dis(f) 2 0 LOAD_CONST 1 (6) 3 STORE_FAST 0 (x) 3 6 LOAD_FAST 0 (x) 9 LOAD_CONST 2 (2) 12 BINARY_FLOOR_DIVIDE 13 RETURN_VALUE -- Steve -- https://mail.python.org/mailman/listinfo/python-list