[Python-Dev] Release of astoptimizer 0.3

Stefan Behnel stefan_ml at behnel.de
Tue Sep 11 20:58:19 CEST 2012


Nick Coghlan, 11.09.2012 14:57:
> On Tue, Sep 11, 2012 at 8:41 PM, Victor Stinner wrote:
>> * Loop: replace range() with xrange() on Python 2, and list with
>>   tuple.  Examples:
>>
>>   - for x in range(n): ... => for x in xrange(n): ...
>>   - for x in [1, 2, 3]: ... => for x in (1, 2, 3): ...
> 
> Name lookup optimisations again: not in the standard library.

I assume you meant the "range" part, not the second example (which will end
up caching a constant tuple).


>> * Evaluate unary and binary operators, subscript and comparaison if all
>>   arguments are constants. Examples:
>>
>>   - 1 + 2 * 3 => 7
>>   - not True => False
>>   - "abc" * 3 => "abcabcabc"
>>   - abcdef[:3] => abc
>>   - (2, 7, 3)[1] => 7
>>   - frozenset("ab") | frozenset("bc") => frozenset("abc")

That's a name lookup, too.


>>   - None is None => True
>>   - "2" in "python2.7" => True
>>   - "def f(): return 2 if 4 < 5 else 3" => "def f(): return 2"
> 
> Yep, literals are good.

Except that evaluating something like '"abc" * constant' can eat up all
memory, imagine this code:

    KILL_MEMORY = sys.argv[1] == 'NEVER PASS THIS VALUE'

    def test():
        if KILL_MEMORY:
            return 'abc' * 10000000000000000000000000000
        else:
            return 'abc'

Stefan




More information about the Python-Dev mailing list