This page lists features that GvR has mentioned as goals for Python 3.0. This page has been consolidated into PEP 3000; the PEP is more up-to-date and is actively maintained. #e 5
(At the time of writing there was already such a document #l 12, but it incorporates items that GvR has never talked about.)
(Hope it's okay to insert some questions and comments into this page. -- JimD)
Core Language Changes
Remove distinction between int and long types. #d 4
(With 2.4 released, this is mostly done? -- JimD)
Make all strings unicode #d 4, and have a separate bytes #b 2 type. #m 13
Replace all old-style classes. #d 4
Make the exec statement a function (again.) #a 1
Make the print statement a function. (write(x, y, z), writeline(x, y, z)) #a 1
Add a mechanism so that multiple exceptions can be caught using except E1, E2, E3:. For instance:
(Added by GvR, suggested by Bram Cohen.)(If except just accepted a tuple of exception objects, would this arise naturally? -- JimD)
Add a with statement: #j 10
(I like this, but is the following too ugly for use until then?
.. seems quirky, but it does serve to remove most of the visual cluster of self.this and self.that which seems to be the primary benefit of the with statement.
-- JimD)
Remove `x`. #a 1
Instead: use repr(x).
- Reason: backticks are hard to read in many fonts and can be mangled by typesetting software.
Remove the <> operator.
Instead: use !=.
Remove the lambda statement. #a 1 #d 4
- Instead: use a local function.
Reason: lambda supports only one statement.
Remove support for string exceptions. #a 1
- Instead: use a class.
- Perhaps have optional declarations for static typing.
Make as a true keyword. #g 7
Make True and False keywords. #f 6
- Reason: make assignment to them impossible.
(Ugh! Why wasn't that done in 2.4 along with None? -- JimD)
- Reason: make assignment to them impossible.
- Make true division default.
- Raise an exception when making comparisons between two incongruent types (other than equality and inequality.)
- Reason: such comparisons do not make sense and are especially confusing to new users of Python.
Require that all exceptions inherit a common base classs. #i 9
- Reason: forces the use of classes as objects raised by exceptions and simplifies the implementation.
Require that the first statement of a suite be on its own line. #a 1
Built-In Changes
Have range(), zip(), dict.keys(), dict.items(), and dict.values() return iterators.
Move compile(), intern() and id() to the sys module. #a 1
Change max() and min() to consume iterators.
Remove coerce() as it is obsolete. #a 1
Remove dict.iteritems(), dict.iterkeys(), and dict.itervalues().
Instead: use dict.items(), dict.keys(), and dict.values() respectively.
Remove apply(). #a 1
Instead: use f(*args, **kw).
Instead: use range().
Remove map() and filter(). #a 1 #d 4
- Instead: use list comprehensions.
Remove reduce(). #a 1
- Instead: use a loop.
Remove callable(). #a 1
- Instead: catch the exception.
Instead: use new bytes type.
Remove raw_input(). #a 1
Instead: use sys.stdin.readline().
Remove input(). #a 1
Instead: use eval(sys.stdin.readline()).
Remove execfile() and reload(). #a 1
Instead: use exec().
Standard Library Changes
Remove string module. #c 4
- Instead: use string methods.
(I like having the members like string.letters and string.digits even if the methods have all been integrated into the strings type -- JimD)
- Instead: use string methods.
Remove types module.
Instead: use the types in __builtins__.
Remove other deprecated modules. #c 3
Remove sys.exc_type. #a 1
Instead: use sys.exc_info.
- Reason: it is not thread safe.
- Reorganize standard library to have more package structure.
- Reason: there are too many modules to keep a flat hierarchy.
Open Issues
L += x and L.extend(x) are equivalent.
Can the parameter order of the insert method be changed so the the index parameter is optional and list.append may be removed?
Should the raise x, y syntax be removed as to favor raise x(y)?
If only Exception subclasses can be raised #i 9, should the raise statement be kept? Could x(y).raise() be used instead?
Are repr() and str() both needed? #a 1
Should globals(), locals() and vars() be removed? #a 1
- Should there be a keyword for allowing the shadowing of built-ins?
- Should injecting into another module's global namespace be prevented?
If line continuations (\) are removed from the language #a 1, what should be done about the instances where statements do not allow parentheses? Furthermore, the Python style guide #k 11 recommends their usage in some cases.
Should __cmp__ (and possibly cmp()) be removed? #h 8
- Reason: ["TOOWTDI"] and rich comparisons are another way.
Should list comprehensions be equivalent to passing a generator expression to list()?
- Reason: they are essentially the same and it would remove edge-case differences between them.
With a new string substitution scheme #n 14, will old-style (%(var)s) substitutions be removed?
References
Anchor(a) [1] Python Regrets: http://www.python.org/doc/essays/ppt/regrets/PythonRegrets.pdf
Anchor(b) [2] PEP 296 -- Adding a bytes Object Type: http://python.org/peps/pep-0296.html
Anchor(c) [3] PEP 4 -- Deprecation of Standard Modules: http://python.org/peps/pep-0004.html
Anchor(d) [4] PyCon 2003 State of the Union Address: http://www.python.org/doc/essays/ppt/pycon2003/pycon2003.ppt
Anchor(e) [5] PEP 3000 -- Python 3.0 Plans: http://python.org/peps/pep-3000.html
Anchor(f) [6] Python-Dev -- Constancy of None: http://mail.python.org/pipermail/python-dev/2004-July/046294.html
Anchor(g) [7] Python-Dev -- "as" to be a keyword?: http://mail.python.org/pipermail/python-dev/2004-July/046316.html
Anchor(h) [8] Python-Dev -- lists vs. tuples:
Anchor(i) [9] Python-Dev -- Exceptional inheritance patterns: http://mail.python.org/pipermail/python-dev/2004-August/047114.html
Anchor(j) [10] Python-Dev -- With statement: http://mail.python.org/pipermail/python-dev/2004-March/043545.html
Anchor(k) [11] PEP 8 -- Style Guide for Python Code: http://python.org/peps/pep-0008.html
Anchor(m) [13] PEP 332 -- Byte vectors and String/Unicode Unification: http://python.org/peps/pep-0332.html
Anchor(n) [14] PEP 292 -- Simpler String Substitutions: http://python.org/peps/pep-0292.html
Anchor(o) [15] Python-Dev -- other uses for "as": http://mail.python.org/pipermail/python-dev/2004-February/042795.html
Anchor(p) [16] PEP 246 -- Object Adaption: http://www.python.org/peps/pep-0246.html
Anchor(q) [17] Python-Dev -- Decorators: vertical bar syntax: http://mail.python.org/pipermail/python-dev/2004-August/047424.html