diff options
author | Jeremy Hylton <jeremy@alum.mit.edu> | 2001-02-01 20:38:45 (GMT) |
---|---|---|
committer | Jeremy Hylton <jeremy@alum.mit.edu> | 2001-02-01 20:38:45 (GMT) |
commit | 4589bd82da3c2ba49591172d71c27add67b198d7 (patch) | |
tree | 3f9b04b52b31efd699f83b10e20cfe2fc80ccbf6 | |
parent | 483638c9a865d504b1131c098f010590103415dd (diff) | |
download | cpython-4589bd82da3c2ba49591172d71c27add67b198d7.zip cpython-4589bd82da3c2ba49591172d71c27add67b198d7.tar.gz cpython-4589bd82da3c2ba49591172d71c27add67b198d7.tar.bz2 |
Add item about nested scopes.
Revise item about restriction on 'from ... import *'. It was in the
wrong section and the section restriction was removed.
-rw-r--r-- | Misc/NEWS | 45 |
1 files changed, 39 insertions, 6 deletions
@@ -3,6 +3,39 @@ What's New in Python 2.1 alpha 2? Core language, builtins, and interpreter +- Scopes nest. If a name is used in a function or class, but is not + local, the definition in the nearest enclosing function scope will + be used. One consequence of this change is that lambda statements + could reference variables in the namespaces where the lambda is + defined. In some unusual cases, this change will break code. + + In all previous version of Python, names were resolved in exactly + three namespaces -- the local namespace, the global namespace, and + the builtin namespace. According to this old defintion, if a + function A is defined within a function B, the names bound in B are + not visible in A. The new rules make names bound in B visible in A, + unless A contains a name binding that hides the binding in B. + + Section 4.1 of the reference manual describes the new scoping rules + in detail. The test script in Lib/test/test_scope.py demonstrates + some of the effects of the change. + + The new rules will cause existing code to break if it defines nested + functions where an outer function has local variables with the same + name as globals or builtins used by the inner function. Example: + + def munge(str): + def helper(x): + return str(x) + if type(str) != type(''): + str = helper(str) + return str.strip() + + Under the old rules, the name str in helper() is bound to the + builtin function str(). Under the new rules, it will be bound to + the argument named str and an error will occur when helper() is + called. + - repr(string) is easier to read, now using hex escapes instead of octal, and using \t, \n and \r instead of \011, \012 and \015 (respectively): @@ -13,6 +46,12 @@ Core language, builtins, and interpreter - Functions are now compared and hashed by identity, not by value, since the func_code attribute is writable. +- The compiler will report a SyntaxError if "from ... import *" occurs + in a function or class scope. The language reference has documented + that this case is illegal, but the compiler never checked for it. + The recent introduction of nested scope makes the meaning of this + form of name binding ambiguous. + - Weak references (PEP 205) have been added. This involves a few changes in the core, an extension module (_weakref), and a Python module (weakref). The weakref module is the public interface. It @@ -60,12 +99,6 @@ What's New in Python 2.1 alpha 1? Core language, builtins, and interpreter -- The compiler will report a SyntaxError if "from ... import *" occurs - in a function or class scope or if a name bound by the import - statement is declared global in the same scope. The language - reference has also documented that these cases are illegal, but - they were not enforced. - - There is a new Unicode companion to the PyObject_Str() API called PyObject_Unicode(). It behaves in the same way as the former, but assures that the returned value is an Unicode object |