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 _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com