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