2007-08-15 11:28:22 -03:00
|
|
|
.. _tut-classes:
|
|
|
|
|
|
|
|
*******
|
|
|
|
Classes
|
|
|
|
*******
|
|
|
|
|
|
|
|
Python's class mechanism adds classes to the language with a minimum of new
|
|
|
|
syntax and semantics. It is a mixture of the class mechanisms found in C++ and
|
|
|
|
Modula-3. As is true for modules, classes in Python do not put an absolute
|
|
|
|
barrier between definition and user, but rather rely on the politeness of the
|
|
|
|
user not to "break into the definition." The most important features of classes
|
|
|
|
are retained with full power, however: the class inheritance mechanism allows
|
|
|
|
multiple base classes, a derived class can override any methods of its base
|
|
|
|
class or classes, and a method can call the method of a base class with the same
|
|
|
|
name. Objects can contain an arbitrary amount of private data.
|
|
|
|
|
2007-08-31 00:25:11 -03:00
|
|
|
In C++ terminology, normally class members (including the data members) are
|
|
|
|
*public* (except see below :ref:`tut-private`),
|
2007-08-15 11:28:22 -03:00
|
|
|
and all member functions are *virtual*. There are no special constructors or
|
|
|
|
destructors. As in Modula-3, there are no shorthands for referencing the
|
|
|
|
object's members from its methods: the method function is declared with an
|
|
|
|
explicit first argument representing the object, which is provided implicitly by
|
|
|
|
the call. As in Smalltalk, classes themselves are objects, albeit in the wider
|
|
|
|
sense of the word: in Python, all data types are objects. This provides
|
|
|
|
semantics for importing and renaming. Unlike C++ and Modula-3, built-in types
|
|
|
|
can be used as base classes for extension by the user. Also, like in C++ but
|
|
|
|
unlike in Modula-3, most built-in operators with special syntax (arithmetic
|
|
|
|
operators, subscripting etc.) can be redefined for class instances.
|
|
|
|
|
|
|
|
|
|
|
|
.. _tut-terminology:
|
|
|
|
|
|
|
|
A Word About Terminology
|
|
|
|
========================
|
|
|
|
|
|
|
|
Lacking universally accepted terminology to talk about classes, I will make
|
|
|
|
occasional use of Smalltalk and C++ terms. (I would use Modula-3 terms, since
|
|
|
|
its object-oriented semantics are closer to those of Python than C++, but I
|
|
|
|
expect that few readers have heard of it.)
|
|
|
|
|
|
|
|
Objects have individuality, and multiple names (in multiple scopes) can be bound
|
|
|
|
to the same object. This is known as aliasing in other languages. This is
|
|
|
|
usually not appreciated on a first glance at Python, and can be safely ignored
|
|
|
|
when dealing with immutable basic types (numbers, strings, tuples). However,
|
|
|
|
aliasing has an (intended!) effect on the semantics of Python code involving
|
|
|
|
mutable objects such as lists, dictionaries, and most types representing
|
|
|
|
entities outside the program (files, windows, etc.). This is usually used to
|
|
|
|
the benefit of the program, since aliases behave like pointers in some respects.
|
|
|
|
For example, passing an object is cheap since only a pointer is passed by the
|
|
|
|
implementation; and if a function modifies an object passed as an argument, the
|
|
|
|
caller will see the change --- this eliminates the need for two different
|
|
|
|
argument passing mechanisms as in Pascal.
|
|
|
|
|
|
|
|
|
|
|
|
.. _tut-scopes:
|
|
|
|
|
|
|
|
Python Scopes and Name Spaces
|
|
|
|
=============================
|
|
|
|
|
|
|
|
Before introducing classes, I first have to tell you something about Python's
|
|
|
|
scope rules. Class definitions play some neat tricks with namespaces, and you
|
|
|
|
need to know how scopes and namespaces work to fully understand what's going on.
|
|
|
|
Incidentally, knowledge about this subject is useful for any advanced Python
|
|
|
|
programmer.
|
|
|
|
|
|
|
|
Let's begin with some definitions.
|
|
|
|
|
|
|
|
A *namespace* is a mapping from names to objects. Most namespaces are currently
|
|
|
|
implemented as Python dictionaries, but that's normally not noticeable in any
|
|
|
|
way (except for performance), and it may change in the future. Examples of
|
|
|
|
namespaces are: the set of built-in names (functions such as :func:`abs`, and
|
|
|
|
built-in exception names); the global names in a module; and the local names in
|
|
|
|
a function invocation. In a sense the set of attributes of an object also form
|
|
|
|
a namespace. The important thing to know about namespaces is that there is
|
|
|
|
absolutely no relation between names in different namespaces; for instance, two
|
|
|
|
different modules may both define a function "maximize" without confusion ---
|
|
|
|
users of the modules must prefix it with the module name.
|
|
|
|
|
|
|
|
By the way, I use the word *attribute* for any name following a dot --- for
|
|
|
|
example, in the expression ``z.real``, ``real`` is an attribute of the object
|
|
|
|
``z``. Strictly speaking, references to names in modules are attribute
|
|
|
|
references: in the expression ``modname.funcname``, ``modname`` is a module
|
|
|
|
object and ``funcname`` is an attribute of it. In this case there happens to be
|
|
|
|
a straightforward mapping between the module's attributes and the global names
|
|
|
|
defined in the module: they share the same namespace! [#]_
|
|
|
|
|
|
|
|
Attributes may be read-only or writable. In the latter case, assignment to
|
|
|
|
attributes is possible. Module attributes are writable: you can write
|
|
|
|
``modname.the_answer = 42``. Writable attributes may also be deleted with the
|
|
|
|
:keyword:`del` statement. For example, ``del modname.the_answer`` will remove
|
|
|
|
the attribute :attr:`the_answer` from the object named by ``modname``.
|
|
|
|
|
|
|
|
Name spaces are created at different moments and have different lifetimes. The
|
|
|
|
namespace containing the built-in names is created when the Python interpreter
|
|
|
|
starts up, and is never deleted. The global namespace for a module is created
|
|
|
|
when the module definition is read in; normally, module namespaces also last
|
|
|
|
until the interpreter quits. The statements executed by the top-level
|
|
|
|
invocation of the interpreter, either read from a script file or interactively,
|
|
|
|
are considered part of a module called :mod:`__main__`, so they have their own
|
|
|
|
global namespace. (The built-in names actually also live in a module; this is
|
2007-12-02 05:40:06 -04:00
|
|
|
called :mod:`builtins`.)
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
The local namespace for a function is created when the function is called, and
|
|
|
|
deleted when the function returns or raises an exception that is not handled
|
|
|
|
within the function. (Actually, forgetting would be a better way to describe
|
|
|
|
what actually happens.) Of course, recursive invocations each have their own
|
|
|
|
local namespace.
|
|
|
|
|
|
|
|
A *scope* is a textual region of a Python program where a namespace is directly
|
|
|
|
accessible. "Directly accessible" here means that an unqualified reference to a
|
|
|
|
name attempts to find the name in the namespace.
|
|
|
|
|
|
|
|
Although scopes are determined statically, they are used dynamically. At any
|
|
|
|
time during execution, there are at least three nested scopes whose namespaces
|
|
|
|
are directly accessible: the innermost scope, which is searched first, contains
|
|
|
|
the local names; the namespaces of any enclosing functions, which are searched
|
|
|
|
starting with the nearest enclosing scope; the middle scope, searched next,
|
|
|
|
contains the current module's global names; and the outermost scope (searched
|
|
|
|
last) is the namespace containing built-in names.
|
|
|
|
|
|
|
|
If a name is declared global, then all references and assignments go directly to
|
|
|
|
the middle scope containing the module's global names. Otherwise, all variables
|
|
|
|
found outside of the innermost scope are read-only (an attempt to write to such
|
|
|
|
a variable will simply create a *new* local variable in the innermost scope,
|
|
|
|
leaving the identically named outer variable unchanged).
|
|
|
|
|
|
|
|
Usually, the local scope references the local names of the (textually) current
|
|
|
|
function. Outside functions, the local scope references the same namespace as
|
|
|
|
the global scope: the module's namespace. Class definitions place yet another
|
|
|
|
namespace in the local scope.
|
|
|
|
|
|
|
|
It is important to realize that scopes are determined textually: the global
|
|
|
|
scope of a function defined in a module is that module's namespace, no matter
|
|
|
|
from where or by what alias the function is called. On the other hand, the
|
|
|
|
actual search for names is done dynamically, at run time --- however, the
|
|
|
|
language definition is evolving towards static name resolution, at "compile"
|
|
|
|
time, so don't rely on dynamic name resolution! (In fact, local variables are
|
|
|
|
already determined statically.)
|
|
|
|
|
|
|
|
A special quirk of Python is that assignments always go into the innermost
|
|
|
|
scope. Assignments do not copy data --- they just bind names to objects. The
|
|
|
|
same is true for deletions: the statement ``del x`` removes the binding of ``x``
|
|
|
|
from the namespace referenced by the local scope. In fact, all operations that
|
|
|
|
introduce new names use the local scope: in particular, import statements and
|
|
|
|
function definitions bind the module or function name in the local scope. (The
|
|
|
|
:keyword:`global` statement can be used to indicate that particular variables
|
|
|
|
live in the global scope.)
|
|
|
|
|
|
|
|
|
|
|
|
.. _tut-firstclasses:
|
|
|
|
|
|
|
|
A First Look at Classes
|
|
|
|
=======================
|
|
|
|
|
|
|
|
Classes introduce a little bit of new syntax, three new object types, and some
|
|
|
|
new semantics.
|
|
|
|
|
|
|
|
|
|
|
|
.. _tut-classdefinition:
|
|
|
|
|
|
|
|
Class Definition Syntax
|
|
|
|
-----------------------
|
|
|
|
|
|
|
|
The simplest form of class definition looks like this::
|
|
|
|
|
|
|
|
class ClassName:
|
|
|
|
<statement-1>
|
|
|
|
.
|
|
|
|
.
|
|
|
|
.
|
|
|
|
<statement-N>
|
|
|
|
|
|
|
|
Class definitions, like function definitions (:keyword:`def` statements) must be
|
|
|
|
executed before they have any effect. (You could conceivably place a class
|
|
|
|
definition in a branch of an :keyword:`if` statement, or inside a function.)
|
|
|
|
|
|
|
|
In practice, the statements inside a class definition will usually be function
|
|
|
|
definitions, but other statements are allowed, and sometimes useful --- we'll
|
|
|
|
come back to this later. The function definitions inside a class normally have
|
|
|
|
a peculiar form of argument list, dictated by the calling conventions for
|
|
|
|
methods --- again, this is explained later.
|
|
|
|
|
|
|
|
When a class definition is entered, a new namespace is created, and used as the
|
|
|
|
local scope --- thus, all assignments to local variables go into this new
|
|
|
|
namespace. In particular, function definitions bind the name of the new
|
|
|
|
function here.
|
|
|
|
|
|
|
|
When a class definition is left normally (via the end), a *class object* is
|
|
|
|
created. This is basically a wrapper around the contents of the namespace
|
|
|
|
created by the class definition; we'll learn more about class objects in the
|
|
|
|
next section. The original local scope (the one in effect just before the class
|
|
|
|
definition was entered) is reinstated, and the class object is bound here to the
|
|
|
|
class name given in the class definition header (:class:`ClassName` in the
|
|
|
|
example).
|
|
|
|
|
|
|
|
|
|
|
|
.. _tut-classobjects:
|
|
|
|
|
|
|
|
Class Objects
|
|
|
|
-------------
|
|
|
|
|
|
|
|
Class objects support two kinds of operations: attribute references and
|
|
|
|
instantiation.
|
|
|
|
|
|
|
|
*Attribute references* use the standard syntax used for all attribute references
|
|
|
|
in Python: ``obj.name``. Valid attribute names are all the names that were in
|
|
|
|
the class's namespace when the class object was created. So, if the class
|
|
|
|
definition looked like this::
|
|
|
|
|
|
|
|
class MyClass:
|
|
|
|
"A simple example class"
|
|
|
|
i = 12345
|
|
|
|
def f(self):
|
|
|
|
return 'hello world'
|
|
|
|
|
|
|
|
then ``MyClass.i`` and ``MyClass.f`` are valid attribute references, returning
|
|
|
|
an integer and a function object, respectively. Class attributes can also be
|
|
|
|
assigned to, so you can change the value of ``MyClass.i`` by assignment.
|
|
|
|
:attr:`__doc__` is also a valid attribute, returning the docstring belonging to
|
|
|
|
the class: ``"A simple example class"``.
|
|
|
|
|
|
|
|
Class *instantiation* uses function notation. Just pretend that the class
|
|
|
|
object is a parameterless function that returns a new instance of the class.
|
|
|
|
For example (assuming the above class)::
|
|
|
|
|
|
|
|
x = MyClass()
|
|
|
|
|
|
|
|
creates a new *instance* of the class and assigns this object to the local
|
|
|
|
variable ``x``.
|
|
|
|
|
|
|
|
The instantiation operation ("calling" a class object) creates an empty object.
|
|
|
|
Many classes like to create objects with instances customized to a specific
|
|
|
|
initial state. Therefore a class may define a special method named
|
|
|
|
:meth:`__init__`, like this::
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
self.data = []
|
|
|
|
|
|
|
|
When a class defines an :meth:`__init__` method, class instantiation
|
|
|
|
automatically invokes :meth:`__init__` for the newly-created class instance. So
|
|
|
|
in this example, a new, initialized instance can be obtained by::
|
|
|
|
|
|
|
|
x = MyClass()
|
|
|
|
|
|
|
|
Of course, the :meth:`__init__` method may have arguments for greater
|
|
|
|
flexibility. In that case, arguments given to the class instantiation operator
|
|
|
|
are passed on to :meth:`__init__`. For example, ::
|
|
|
|
|
|
|
|
>>> class Complex:
|
|
|
|
... def __init__(self, realpart, imagpart):
|
|
|
|
... self.r = realpart
|
|
|
|
... self.i = imagpart
|
|
|
|
...
|
|
|
|
>>> x = Complex(3.0, -4.5)
|
|
|
|
>>> x.r, x.i
|
|
|
|
(3.0, -4.5)
|
|
|
|
|
|
|
|
|
|
|
|
.. _tut-instanceobjects:
|
|
|
|
|
|
|
|
Instance Objects
|
|
|
|
----------------
|
|
|
|
|
|
|
|
Now what can we do with instance objects? The only operations understood by
|
|
|
|
instance objects are attribute references. There are two kinds of valid
|
|
|
|
attribute names, data attributes and methods.
|
|
|
|
|
|
|
|
*data attributes* correspond to "instance variables" in Smalltalk, and to "data
|
|
|
|
members" in C++. Data attributes need not be declared; like local variables,
|
|
|
|
they spring into existence when they are first assigned to. For example, if
|
|
|
|
``x`` is the instance of :class:`MyClass` created above, the following piece of
|
|
|
|
code will print the value ``16``, without leaving a trace::
|
|
|
|
|
|
|
|
x.counter = 1
|
|
|
|
while x.counter < 10:
|
|
|
|
x.counter = x.counter * 2
|
2007-08-31 00:25:11 -03:00
|
|
|
print(x.counter)
|
2007-08-15 11:28:22 -03:00
|
|
|
del x.counter
|
|
|
|
|
|
|
|
The other kind of instance attribute reference is a *method*. A method is a
|
|
|
|
function that "belongs to" an object. (In Python, the term method is not unique
|
|
|
|
to class instances: other object types can have methods as well. For example,
|
|
|
|
list objects have methods called append, insert, remove, sort, and so on.
|
|
|
|
However, in the following discussion, we'll use the term method exclusively to
|
|
|
|
mean methods of class instance objects, unless explicitly stated otherwise.)
|
|
|
|
|
|
|
|
.. index:: object: method
|
|
|
|
|
|
|
|
Valid method names of an instance object depend on its class. By definition,
|
|
|
|
all attributes of a class that are function objects define corresponding
|
|
|
|
methods of its instances. So in our example, ``x.f`` is a valid method
|
|
|
|
reference, since ``MyClass.f`` is a function, but ``x.i`` is not, since
|
|
|
|
``MyClass.i`` is not. But ``x.f`` is not the same thing as ``MyClass.f`` --- it
|
|
|
|
is a *method object*, not a function object.
|
|
|
|
|
|
|
|
|
|
|
|
.. _tut-methodobjects:
|
|
|
|
|
|
|
|
Method Objects
|
|
|
|
--------------
|
|
|
|
|
|
|
|
Usually, a method is called right after it is bound::
|
|
|
|
|
|
|
|
x.f()
|
|
|
|
|
|
|
|
In the :class:`MyClass` example, this will return the string ``'hello world'``.
|
|
|
|
However, it is not necessary to call a method right away: ``x.f`` is a method
|
|
|
|
object, and can be stored away and called at a later time. For example::
|
|
|
|
|
|
|
|
xf = x.f
|
|
|
|
while True:
|
2007-08-31 00:25:11 -03:00
|
|
|
print(xf())
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
will continue to print ``hello world`` until the end of time.
|
|
|
|
|
|
|
|
What exactly happens when a method is called? You may have noticed that
|
|
|
|
``x.f()`` was called without an argument above, even though the function
|
|
|
|
definition for :meth:`f` specified an argument. What happened to the argument?
|
|
|
|
Surely Python raises an exception when a function that requires an argument is
|
|
|
|
called without any --- even if the argument isn't actually used...
|
|
|
|
|
|
|
|
Actually, you may have guessed the answer: the special thing about methods is
|
|
|
|
that the object is passed as the first argument of the function. In our
|
|
|
|
example, the call ``x.f()`` is exactly equivalent to ``MyClass.f(x)``. In
|
|
|
|
general, calling a method with a list of *n* arguments is equivalent to calling
|
|
|
|
the corresponding function with an argument list that is created by inserting
|
|
|
|
the method's object before the first argument.
|
|
|
|
|
|
|
|
If you still don't understand how methods work, a look at the implementation can
|
|
|
|
perhaps clarify matters. When an instance attribute is referenced that isn't a
|
|
|
|
data attribute, its class is searched. If the name denotes a valid class
|
|
|
|
attribute that is a function object, a method object is created by packing
|
|
|
|
(pointers to) the instance object and the function object just found together in
|
|
|
|
an abstract object: this is the method object. When the method object is called
|
|
|
|
with an argument list, it is unpacked again, a new argument list is constructed
|
|
|
|
from the instance object and the original argument list, and the function object
|
|
|
|
is called with this new argument list.
|
|
|
|
|
|
|
|
|
|
|
|
.. _tut-remarks:
|
|
|
|
|
|
|
|
Random Remarks
|
|
|
|
==============
|
|
|
|
|
|
|
|
.. % [These should perhaps be placed more carefully...]
|
|
|
|
|
|
|
|
Data attributes override method attributes with the same name; to avoid
|
|
|
|
accidental name conflicts, which may cause hard-to-find bugs in large programs,
|
|
|
|
it is wise to use some kind of convention that minimizes the chance of
|
|
|
|
conflicts. Possible conventions include capitalizing method names, prefixing
|
|
|
|
data attribute names with a small unique string (perhaps just an underscore), or
|
|
|
|
using verbs for methods and nouns for data attributes.
|
|
|
|
|
|
|
|
Data attributes may be referenced by methods as well as by ordinary users
|
|
|
|
("clients") of an object. In other words, classes are not usable to implement
|
|
|
|
pure abstract data types. In fact, nothing in Python makes it possible to
|
|
|
|
enforce data hiding --- it is all based upon convention. (On the other hand,
|
|
|
|
the Python implementation, written in C, can completely hide implementation
|
|
|
|
details and control access to an object if necessary; this can be used by
|
|
|
|
extensions to Python written in C.)
|
|
|
|
|
|
|
|
Clients should use data attributes with care --- clients may mess up invariants
|
|
|
|
maintained by the methods by stamping on their data attributes. Note that
|
|
|
|
clients may add data attributes of their own to an instance object without
|
|
|
|
affecting the validity of the methods, as long as name conflicts are avoided ---
|
|
|
|
again, a naming convention can save a lot of headaches here.
|
|
|
|
|
|
|
|
There is no shorthand for referencing data attributes (or other methods!) from
|
|
|
|
within methods. I find that this actually increases the readability of methods:
|
|
|
|
there is no chance of confusing local variables and instance variables when
|
|
|
|
glancing through a method.
|
|
|
|
|
|
|
|
Often, the first argument of a method is called ``self``. This is nothing more
|
|
|
|
than a convention: the name ``self`` has absolutely no special meaning to
|
|
|
|
Python. (Note, however, that by not following the convention your code may be
|
|
|
|
less readable to other Python programmers, and it is also conceivable that a
|
|
|
|
*class browser* program might be written that relies upon such a convention.)
|
|
|
|
|
|
|
|
Any function object that is a class attribute defines a method for instances of
|
|
|
|
that class. It is not necessary that the function definition is textually
|
|
|
|
enclosed in the class definition: assigning a function object to a local
|
|
|
|
variable in the class is also ok. For example::
|
|
|
|
|
|
|
|
# Function defined outside the class
|
|
|
|
def f1(self, x, y):
|
|
|
|
return min(x, x+y)
|
|
|
|
|
|
|
|
class C:
|
|
|
|
f = f1
|
|
|
|
def g(self):
|
|
|
|
return 'hello world'
|
|
|
|
h = g
|
|
|
|
|
|
|
|
Now ``f``, ``g`` and ``h`` are all attributes of class :class:`C` that refer to
|
|
|
|
function objects, and consequently they are all methods of instances of
|
|
|
|
:class:`C` --- ``h`` being exactly equivalent to ``g``. Note that this practice
|
|
|
|
usually only serves to confuse the reader of a program.
|
|
|
|
|
|
|
|
Methods may call other methods by using method attributes of the ``self``
|
|
|
|
argument::
|
|
|
|
|
|
|
|
class Bag:
|
|
|
|
def __init__(self):
|
|
|
|
self.data = []
|
|
|
|
def add(self, x):
|
|
|
|
self.data.append(x)
|
|
|
|
def addtwice(self, x):
|
|
|
|
self.add(x)
|
|
|
|
self.add(x)
|
|
|
|
|
|
|
|
Methods may reference global names in the same way as ordinary functions. The
|
|
|
|
global scope associated with a method is the module containing the class
|
|
|
|
definition. (The class itself is never used as a global scope!) While one
|
|
|
|
rarely encounters a good reason for using global data in a method, there are
|
|
|
|
many legitimate uses of the global scope: for one thing, functions and modules
|
|
|
|
imported into the global scope can be used by methods, as well as functions and
|
|
|
|
classes defined in it. Usually, the class containing the method is itself
|
|
|
|
defined in this global scope, and in the next section we'll find some good
|
|
|
|
reasons why a method would want to reference its own class!
|
|
|
|
|
|
|
|
|
|
|
|
.. _tut-inheritance:
|
|
|
|
|
|
|
|
Inheritance
|
|
|
|
===========
|
|
|
|
|
|
|
|
Of course, a language feature would not be worthy of the name "class" without
|
|
|
|
supporting inheritance. The syntax for a derived class definition looks like
|
|
|
|
this::
|
|
|
|
|
|
|
|
class DerivedClassName(BaseClassName):
|
|
|
|
<statement-1>
|
|
|
|
.
|
|
|
|
.
|
|
|
|
.
|
|
|
|
<statement-N>
|
|
|
|
|
|
|
|
The name :class:`BaseClassName` must be defined in a scope containing the
|
|
|
|
derived class definition. In place of a base class name, other arbitrary
|
|
|
|
expressions are also allowed. This can be useful, for example, when the base
|
|
|
|
class is defined in another module::
|
|
|
|
|
|
|
|
class DerivedClassName(modname.BaseClassName):
|
|
|
|
|
|
|
|
Execution of a derived class definition proceeds the same as for a base class.
|
|
|
|
When the class object is constructed, the base class is remembered. This is
|
|
|
|
used for resolving attribute references: if a requested attribute is not found
|
|
|
|
in the class, the search proceeds to look in the base class. This rule is
|
|
|
|
applied recursively if the base class itself is derived from some other class.
|
|
|
|
|
|
|
|
There's nothing special about instantiation of derived classes:
|
|
|
|
``DerivedClassName()`` creates a new instance of the class. Method references
|
|
|
|
are resolved as follows: the corresponding class attribute is searched,
|
|
|
|
descending down the chain of base classes if necessary, and the method reference
|
|
|
|
is valid if this yields a function object.
|
|
|
|
|
|
|
|
Derived classes may override methods of their base classes. Because methods
|
|
|
|
have no special privileges when calling other methods of the same object, a
|
|
|
|
method of a base class that calls another method defined in the same base class
|
|
|
|
may end up calling a method of a derived class that overrides it. (For C++
|
|
|
|
programmers: all methods in Python are effectively :keyword:`virtual`.)
|
|
|
|
|
|
|
|
An overriding method in a derived class may in fact want to extend rather than
|
|
|
|
simply replace the base class method of the same name. There is a simple way to
|
|
|
|
call the base class method directly: just call ``BaseClassName.methodname(self,
|
|
|
|
arguments)``. This is occasionally useful to clients as well. (Note that this
|
|
|
|
only works if the base class is defined or imported directly in the global
|
|
|
|
scope.)
|
|
|
|
|
|
|
|
|
|
|
|
.. _tut-multiple:
|
|
|
|
|
|
|
|
Multiple Inheritance
|
|
|
|
--------------------
|
|
|
|
|
2007-09-28 10:13:35 -03:00
|
|
|
Python supports a form of multiple inheritance as well. A class definition with
|
|
|
|
multiple base classes looks like this::
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
class DerivedClassName(Base1, Base2, Base3):
|
|
|
|
<statement-1>
|
|
|
|
.
|
|
|
|
.
|
|
|
|
.
|
|
|
|
<statement-N>
|
|
|
|
|
2007-09-28 10:13:35 -03:00
|
|
|
For most purposes, in the simplest cases, you can think of the search for
|
|
|
|
attributes inherited from a parent class as depth-first, left-to-right, not
|
|
|
|
searching twice in the same class where there is an overlap in the hierarchy.
|
|
|
|
Thus, if an attribute is not found in :class:`DerivedClassName`, it is searched
|
|
|
|
for in :class:`Base1`, then (recursively) in the base classes of :class:`Base1`,
|
|
|
|
and if it was not found there, it was searched for in :class:`Base2`, and so on.
|
|
|
|
|
|
|
|
In fact, it is slightly more complex than that; the method resolution order
|
|
|
|
changes dynamically to support cooperative calls to :func:`super`. This
|
|
|
|
approach is known in some other multiple-inheritance languages as
|
|
|
|
call-next-method and is more powerful than the super call found in
|
|
|
|
single-inheritance languages.
|
2007-08-31 13:33:38 -03:00
|
|
|
|
|
|
|
Dynamic ordering is necessary because all cases of multiple inheritance exhibit
|
#1370: Finish the merge r58749, log below, by resolving all conflicts in Doc/.
Merged revisions 58221-58741 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r58221 | georg.brandl | 2007-09-20 10:57:59 -0700 (Thu, 20 Sep 2007) | 2 lines
Patch #1181: add os.environ.clear() method.
........
r58225 | sean.reifschneider | 2007-09-20 23:33:28 -0700 (Thu, 20 Sep 2007) | 3 lines
Issue1704287: "make install" fails unless you do "make" first. Make
oldsharedmods and sharedmods in "libinstall".
........
r58232 | guido.van.rossum | 2007-09-22 13:18:03 -0700 (Sat, 22 Sep 2007) | 4 lines
Patch # 188 by Philip Jenvey.
Make tell() mark CRLF as a newline.
With unit test.
........
r58242 | georg.brandl | 2007-09-24 10:55:47 -0700 (Mon, 24 Sep 2007) | 2 lines
Fix typo and double word.
........
r58245 | georg.brandl | 2007-09-24 10:59:28 -0700 (Mon, 24 Sep 2007) | 2 lines
#1196: document default radix for int().
........
r58247 | georg.brandl | 2007-09-24 11:08:24 -0700 (Mon, 24 Sep 2007) | 2 lines
#1177: accept 2xx responses for https too, not only http.
........
r58249 | andrew.kuchling | 2007-09-24 16:45:51 -0700 (Mon, 24 Sep 2007) | 1 line
Remove stray odd character; grammar fix
........
r58250 | andrew.kuchling | 2007-09-24 16:46:28 -0700 (Mon, 24 Sep 2007) | 1 line
Typo fix
........
r58251 | andrew.kuchling | 2007-09-24 17:09:42 -0700 (Mon, 24 Sep 2007) | 1 line
Add various items
........
r58268 | vinay.sajip | 2007-09-26 22:34:45 -0700 (Wed, 26 Sep 2007) | 1 line
Change to flush and close logic to fix #1760556.
........
r58269 | vinay.sajip | 2007-09-26 22:38:51 -0700 (Wed, 26 Sep 2007) | 1 line
Change to basicConfig() to fix #1021.
........
r58270 | georg.brandl | 2007-09-26 23:26:58 -0700 (Wed, 26 Sep 2007) | 2 lines
#1208: document match object's boolean value.
........
r58271 | vinay.sajip | 2007-09-26 23:56:13 -0700 (Wed, 26 Sep 2007) | 1 line
Minor date change.
........
r58272 | vinay.sajip | 2007-09-27 00:35:10 -0700 (Thu, 27 Sep 2007) | 1 line
Change to LogRecord.__init__() to fix #1206. Note that archaic use of type(x) == types.DictType is because of keeping 1.5.2 compatibility. While this is much less relevant these days, there probably needs to be a separate commit for removing all archaic constructs at the same time.
........
r58288 | brett.cannon | 2007-09-30 12:45:10 -0700 (Sun, 30 Sep 2007) | 9 lines
tuple.__repr__ did not consider a reference loop as it is not possible from
Python code; but it is possible from C. object.__str__ had the issue of not
expecting a type to doing something within it's tp_str implementation that
could trigger an infinite recursion, but it could in C code.. Both found
thanks to BaseException and how it handles its repr.
Closes issue #1686386. Thanks to Thomas Herve for taking an initial stab at
coming up with a solution.
........
r58289 | brett.cannon | 2007-09-30 13:37:19 -0700 (Sun, 30 Sep 2007) | 3 lines
Fix error introduced by r58288; if a tuple is length 0 return its repr and
don't worry about any self-referring tuples.
........
r58294 | facundo.batista | 2007-10-02 10:01:24 -0700 (Tue, 02 Oct 2007) | 11 lines
Made the various is_* operations return booleans. This was discussed
with Cawlishaw by mail, and he basically confirmed that to these is_*
operations, there's no need to return Decimal(0) and Decimal(1) if
the language supports the False and True booleans.
Also added a few tests for the these functions in extra.decTest, since
they are mostly untested (apart from the doctests).
Thanks Mark Dickinson
........
r58295 | facundo.batista | 2007-10-02 11:21:18 -0700 (Tue, 02 Oct 2007) | 4 lines
Added a class to store the digits of log(10), so that they can be made
available when necessary without recomputing. Thanks Mark Dickinson
........
r58299 | mark.summerfield | 2007-10-03 01:53:21 -0700 (Wed, 03 Oct 2007) | 4 lines
Added note in footnote about string comparisons about
unicodedata.normalize().
........
r58304 | raymond.hettinger | 2007-10-03 14:18:11 -0700 (Wed, 03 Oct 2007) | 1 line
enumerate() is no longer bounded to using sequences shorter than LONG_MAX. The possibility of overflow was sending some newsgroup posters into a tizzy.
........
r58305 | raymond.hettinger | 2007-10-03 17:20:27 -0700 (Wed, 03 Oct 2007) | 1 line
itertools.count() no longer limited to sys.maxint.
........
r58306 | kurt.kaiser | 2007-10-03 18:49:54 -0700 (Wed, 03 Oct 2007) | 3 lines
Assume that the user knows when he wants to end the line; don't insert
something he didn't select or complete.
........
r58307 | kurt.kaiser | 2007-10-03 19:07:50 -0700 (Wed, 03 Oct 2007) | 2 lines
Remove unused theme that was causing a fault in p3k.
........
r58308 | kurt.kaiser | 2007-10-03 19:09:17 -0700 (Wed, 03 Oct 2007) | 2 lines
Clean up EditorWindow close.
........
r58309 | kurt.kaiser | 2007-10-03 19:53:07 -0700 (Wed, 03 Oct 2007) | 7 lines
textView cleanup. Patch 1718043 Tal Einat.
M idlelib/EditorWindow.py
M idlelib/aboutDialog.py
M idlelib/textView.py
M idlelib/NEWS.txt
........
r58310 | kurt.kaiser | 2007-10-03 20:11:12 -0700 (Wed, 03 Oct 2007) | 3 lines
configDialog cleanup. Patch 1730217 Tal Einat.
........
r58311 | neal.norwitz | 2007-10-03 23:00:48 -0700 (Wed, 03 Oct 2007) | 4 lines
Coverity #151: Remove deadcode.
All this code already exists above starting at line 653.
........
r58325 | fred.drake | 2007-10-04 19:46:12 -0700 (Thu, 04 Oct 2007) | 1 line
wrap lines to <80 characters before fixing errors
........
r58326 | raymond.hettinger | 2007-10-04 19:47:07 -0700 (Thu, 04 Oct 2007) | 6 lines
Add __asdict__() to NamedTuple and refine the docs.
Add maxlen support to deque() and fixup docs.
Partially fix __reduce__(). The None as a third arg was no longer supported.
Still needs work on __reduce__() to handle recursive inputs.
........
r58327 | fred.drake | 2007-10-04 19:48:32 -0700 (Thu, 04 Oct 2007) | 3 lines
move descriptions of ac_(in|out)_buffer_size to the right place
http://bugs.python.org/issue1053
........
r58329 | neal.norwitz | 2007-10-04 20:39:17 -0700 (Thu, 04 Oct 2007) | 3 lines
dict could be NULL, so we need to XDECREF.
Fix a compiler warning about passing a PyTypeObject* instead of PyObject*.
........
r58330 | neal.norwitz | 2007-10-04 20:41:19 -0700 (Thu, 04 Oct 2007) | 2 lines
Fix Coverity #158: Check the correct variable.
........
r58332 | neal.norwitz | 2007-10-04 22:01:38 -0700 (Thu, 04 Oct 2007) | 7 lines
Fix Coverity #159.
This code was broken if save() returned a negative number since i contained
a boolean value and then we compared i < 0 which should never be true.
Will backport (assuming it's necessary)
........
r58334 | neal.norwitz | 2007-10-04 22:29:17 -0700 (Thu, 04 Oct 2007) | 1 line
Add a note about fixing some more warnings found by Coverity.
........
r58338 | raymond.hettinger | 2007-10-05 12:07:31 -0700 (Fri, 05 Oct 2007) | 1 line
Restore BEGIN/END THREADS macros which were squashed in the previous checkin
........
r58343 | gregory.p.smith | 2007-10-06 00:48:10 -0700 (Sat, 06 Oct 2007) | 3 lines
Stab in the dark attempt to fix the test_bsddb3 failure on sparc and S-390
ubuntu buildbots.
........
r58344 | gregory.p.smith | 2007-10-06 00:51:59 -0700 (Sat, 06 Oct 2007) | 2 lines
Allows BerkeleyDB 4.6.x >= 4.6.21 for the bsddb module.
........
r58348 | gregory.p.smith | 2007-10-06 08:47:37 -0700 (Sat, 06 Oct 2007) | 3 lines
Use the host the author likely meant in the first place. pop.gmail.com is
reliable. gmail.org is someones personal domain.
........
r58351 | neal.norwitz | 2007-10-06 12:16:28 -0700 (Sat, 06 Oct 2007) | 3 lines
Ensure that this test will pass even if another test left an unwritable TESTFN.
Also use the safe unlink in test_support instead of rolling our own here.
........
r58368 | georg.brandl | 2007-10-08 00:50:24 -0700 (Mon, 08 Oct 2007) | 3 lines
#1123: fix the docs for the str.split(None, sep) case.
Also expand a few other methods' docs, which had more info in the deprecated string module docs.
........
r58369 | georg.brandl | 2007-10-08 01:06:05 -0700 (Mon, 08 Oct 2007) | 2 lines
Update docstring of sched, also remove an unused assignment.
........
r58370 | raymond.hettinger | 2007-10-08 02:14:28 -0700 (Mon, 08 Oct 2007) | 5 lines
Add comments to NamedTuple code.
Let the field spec be either a string or a non-string sequence (suggested by Martin Blais with use cases).
Improve the error message in the case of a SyntaxError (caused by a duplicate field name).
........
r58371 | raymond.hettinger | 2007-10-08 02:56:29 -0700 (Mon, 08 Oct 2007) | 1 line
Missed a line in the docs
........
r58372 | raymond.hettinger | 2007-10-08 03:11:51 -0700 (Mon, 08 Oct 2007) | 1 line
Better variable names
........
r58376 | georg.brandl | 2007-10-08 07:12:47 -0700 (Mon, 08 Oct 2007) | 3 lines
#1199: docs for tp_as_{number,sequence,mapping}, by Amaury Forgeot d'Arc.
No need to merge this to py3k!
........
r58380 | raymond.hettinger | 2007-10-08 14:26:58 -0700 (Mon, 08 Oct 2007) | 1 line
Eliminate camelcase function name
........
r58381 | andrew.kuchling | 2007-10-08 16:23:03 -0700 (Mon, 08 Oct 2007) | 1 line
Eliminate camelcase function name
........
r58382 | raymond.hettinger | 2007-10-08 18:36:23 -0700 (Mon, 08 Oct 2007) | 1 line
Make the error messages more specific
........
r58384 | gregory.p.smith | 2007-10-08 23:02:21 -0700 (Mon, 08 Oct 2007) | 10 lines
Splits Modules/_bsddb.c up into bsddb.h and _bsddb.c and adds a C API
object available as bsddb.db.api. This is based on the patch submitted
by Duncan Grisby here:
http://sourceforge.net/tracker/index.php?func=detail&aid=1551895&group_id=13900&atid=313900
See this thread for additional info:
http://sourceforge.net/mailarchive/forum.php?thread_name=E1GAVDK-0002rk-Iw%40apasphere.com&forum_name=pybsddb-users
It also cleans up the code a little by removing some ifdef/endifs for
python prior to 2.1 and for unsupported Berkeley DB <= 3.2.
........
r58385 | gregory.p.smith | 2007-10-08 23:50:43 -0700 (Mon, 08 Oct 2007) | 5 lines
Fix a double free when positioning a database cursor to a non-existant
string key (and probably a few other situations with string keys).
This was reported with a patch as pybsddb sourceforge bug 1708868 by
jjjhhhlll at gmail.
........
r58386 | gregory.p.smith | 2007-10-09 00:19:11 -0700 (Tue, 09 Oct 2007) | 3 lines
Use the highest cPickle protocol in bsddb.dbshelve. This comes from
sourceforge pybsddb patch 1551443 by w_barnes.
........
r58394 | gregory.p.smith | 2007-10-09 11:26:02 -0700 (Tue, 09 Oct 2007) | 2 lines
remove another sleepycat reference
........
r58396 | kurt.kaiser | 2007-10-09 12:31:30 -0700 (Tue, 09 Oct 2007) | 3 lines
Allow interrupt only when executing user code in subprocess
Patch 1225 Tal Einat modified from IDLE-Spoon.
........
r58399 | brett.cannon | 2007-10-09 17:07:50 -0700 (Tue, 09 Oct 2007) | 5 lines
Remove file-level typedefs that were inconsistently used throughout the file.
Just move over to the public API names.
Closes issue1238.
........
r58401 | raymond.hettinger | 2007-10-09 17:26:46 -0700 (Tue, 09 Oct 2007) | 1 line
Accept Jim Jewett's api suggestion to use None instead of -1 to indicate unbounded deques.
........
r58403 | kurt.kaiser | 2007-10-09 17:55:40 -0700 (Tue, 09 Oct 2007) | 2 lines
Allow cursor color change w/o restart. Patch 1725576 Tal Einat.
........
r58404 | kurt.kaiser | 2007-10-09 18:06:47 -0700 (Tue, 09 Oct 2007) | 2 lines
show paste if > 80 columns. Patch 1659326 Tal Einat.
........
r58415 | thomas.heller | 2007-10-11 12:51:32 -0700 (Thu, 11 Oct 2007) | 5 lines
On OS X, use os.uname() instead of gestalt.sysv(...) to get the
operating system version. This allows to use ctypes when Python
was configured with --disable-toolbox-glue.
........
r58419 | neal.norwitz | 2007-10-11 20:01:01 -0700 (Thu, 11 Oct 2007) | 1 line
Get rid of warning about not being able to create an existing directory.
........
r58420 | neal.norwitz | 2007-10-11 20:01:30 -0700 (Thu, 11 Oct 2007) | 1 line
Get rid of warnings on a bunch of platforms by using a proper prototype.
........
r58421 | neal.norwitz | 2007-10-11 20:01:54 -0700 (Thu, 11 Oct 2007) | 4 lines
Get rid of compiler warning about retval being used (returned) without
being initialized. (gcc warning and Coverity 202)
........
r58422 | neal.norwitz | 2007-10-11 20:03:23 -0700 (Thu, 11 Oct 2007) | 1 line
Fix Coverity 168: Close the file before returning (exiting).
........
r58423 | neal.norwitz | 2007-10-11 20:04:18 -0700 (Thu, 11 Oct 2007) | 4 lines
Fix Coverity 180: Don't overallocate. We don't need structs, but pointers.
Also fix a memory leak.
........
r58424 | neal.norwitz | 2007-10-11 20:05:19 -0700 (Thu, 11 Oct 2007) | 5 lines
Fix Coverity 185-186: If the passed in FILE is NULL, uninitialized memory
would be accessed.
Will backport.
........
r58425 | neal.norwitz | 2007-10-11 20:52:34 -0700 (Thu, 11 Oct 2007) | 1 line
Get this module to compile with bsddb versions prior to 4.3
........
r58430 | martin.v.loewis | 2007-10-12 01:56:52 -0700 (Fri, 12 Oct 2007) | 3 lines
Bug #1216: Restore support for Visual Studio 2002.
Will backport to 2.5.
........
r58433 | raymond.hettinger | 2007-10-12 10:53:11 -0700 (Fri, 12 Oct 2007) | 1 line
Fix test of count.__repr__() to ignore the 'L' if the count is a long
........
r58434 | gregory.p.smith | 2007-10-12 11:44:06 -0700 (Fri, 12 Oct 2007) | 4 lines
Fixes http://bugs.python.org/issue1233 - bsddb.dbshelve.DBShelf.append
was useless due to inverted logic. Also adds a test case for RECNO dbs
to test_dbshelve.
........
r58445 | georg.brandl | 2007-10-13 06:20:03 -0700 (Sat, 13 Oct 2007) | 2 lines
Fix email example.
........
r58450 | gregory.p.smith | 2007-10-13 16:02:05 -0700 (Sat, 13 Oct 2007) | 2 lines
Fix an uncollectable reference leak in bsddb.db.DBShelf.append
........
r58453 | neal.norwitz | 2007-10-13 17:18:40 -0700 (Sat, 13 Oct 2007) | 8 lines
Let the O/S supply a port if none of the default ports can be used.
This should make the tests more robust at the expense of allowing
tests to be sloppier by not requiring them to cleanup after themselves.
(It will legitamitely help when running two test suites simultaneously
or if another process is already using one of the predefined ports.)
Also simplifies (slightLy) the exception handling elsewhere.
........
r58459 | neal.norwitz | 2007-10-14 11:30:21 -0700 (Sun, 14 Oct 2007) | 2 lines
Don't raise a string exception, they don't work anymore.
........
r58460 | neal.norwitz | 2007-10-14 11:40:37 -0700 (Sun, 14 Oct 2007) | 1 line
Use unittest for assertions
........
r58468 | armin.rigo | 2007-10-15 00:48:35 -0700 (Mon, 15 Oct 2007) | 2 lines
test_bigbits was not testing what it seemed to.
........
r58471 | guido.van.rossum | 2007-10-15 08:54:11 -0700 (Mon, 15 Oct 2007) | 3 lines
Change a PyErr_Print() into a PyErr_Clear(),
per discussion in issue 1031213.
........
r58500 | raymond.hettinger | 2007-10-16 12:18:30 -0700 (Tue, 16 Oct 2007) | 1 line
Improve error messages
........
r58506 | raymond.hettinger | 2007-10-16 14:28:32 -0700 (Tue, 16 Oct 2007) | 1 line
More docs, error messages, and tests
........
r58507 | andrew.kuchling | 2007-10-16 15:58:03 -0700 (Tue, 16 Oct 2007) | 1 line
Add items
........
r58508 | brett.cannon | 2007-10-16 16:24:06 -0700 (Tue, 16 Oct 2007) | 3 lines
Remove ``:const:`` notation on None in parameter list. Since the markup is not
rendered for parameters it just showed up as ``:const:`None` `` in the output.
........
r58509 | brett.cannon | 2007-10-16 16:26:45 -0700 (Tue, 16 Oct 2007) | 3 lines
Re-order some functions whose parameters differ between PyObject and const char
* so that they are next to each other.
........
r58522 | armin.rigo | 2007-10-17 11:46:37 -0700 (Wed, 17 Oct 2007) | 5 lines
Fix the overflow checking of list_repeat.
Introduce overflow checking into list_inplace_repeat.
Backport candidate, possibly.
........
r58530 | facundo.batista | 2007-10-17 20:16:03 -0700 (Wed, 17 Oct 2007) | 7 lines
Issue #1580738. When HTTPConnection reads the whole stream with read(),
it closes itself. When the stream is read in several calls to read(n),
it should behave in the same way if HTTPConnection knows where the end
of the stream is (through self.length). Added a test case for this
behaviour.
........
r58531 | facundo.batista | 2007-10-17 20:44:48 -0700 (Wed, 17 Oct 2007) | 3 lines
Issue 1289, just a typo.
........
r58532 | gregory.p.smith | 2007-10-18 00:56:54 -0700 (Thu, 18 Oct 2007) | 4 lines
cleanup test_dbtables to use mkdtemp. cleanup dbtables to pass txn as a
keyword argument whenever possible to avoid bugs and confusion. (dbtables.py
line 447 self.db.get using txn as a non-keyword was an actual bug due to this)
........
r58533 | gregory.p.smith | 2007-10-18 01:34:20 -0700 (Thu, 18 Oct 2007) | 4 lines
Fix a weird bug in dbtables: if it chose a random rowid string that contained
NULL bytes it would cause the database all sorts of problems in the future
leading to very strange random failures and corrupt dbtables.bsdTableDb dbs.
........
r58534 | gregory.p.smith | 2007-10-18 09:32:02 -0700 (Thu, 18 Oct 2007) | 3 lines
A cleaner fix than the one committed last night. Generate random rowids that
do not contain null bytes.
........
r58537 | gregory.p.smith | 2007-10-18 10:17:57 -0700 (Thu, 18 Oct 2007) | 2 lines
mention bsddb fixes.
........
r58538 | raymond.hettinger | 2007-10-18 14:13:06 -0700 (Thu, 18 Oct 2007) | 1 line
Remove useless warning
........
r58539 | gregory.p.smith | 2007-10-19 00:31:20 -0700 (Fri, 19 Oct 2007) | 2 lines
squelch the warning that this test is supposed to trigger.
........
r58542 | georg.brandl | 2007-10-19 05:32:39 -0700 (Fri, 19 Oct 2007) | 2 lines
Clarify wording for apply().
........
r58544 | mark.summerfield | 2007-10-19 05:48:17 -0700 (Fri, 19 Oct 2007) | 3 lines
Added a cross-ref to each other.
........
r58545 | georg.brandl | 2007-10-19 10:38:49 -0700 (Fri, 19 Oct 2007) | 2 lines
#1284: "S" means "seen", not unread.
........
r58548 | thomas.heller | 2007-10-19 11:11:41 -0700 (Fri, 19 Oct 2007) | 4 lines
Fix ctypes on 32-bit systems when Python is configured --with-system-ffi.
See also https://bugs.launchpad.net/bugs/72505.
Ported from release25-maint branch.
........
r58550 | facundo.batista | 2007-10-19 12:25:57 -0700 (Fri, 19 Oct 2007) | 8 lines
The constructor from tuple was way too permissive: it allowed bad
coefficient numbers, floats in the sign, and other details that
generated directly the wrong number in the best case, or triggered
misfunctionality in the alorithms.
Test cases added for these issues. Thanks Mark Dickinson.
........
r58559 | georg.brandl | 2007-10-20 06:22:53 -0700 (Sat, 20 Oct 2007) | 2 lines
Fix code being interpreted as a target.
........
r58561 | georg.brandl | 2007-10-20 06:36:24 -0700 (Sat, 20 Oct 2007) | 2 lines
Document new "cmdoption" directive.
........
r58562 | georg.brandl | 2007-10-20 08:21:22 -0700 (Sat, 20 Oct 2007) | 2 lines
Make a path more Unix-standardy.
........
r58564 | georg.brandl | 2007-10-20 10:51:39 -0700 (Sat, 20 Oct 2007) | 2 lines
Document new directive "envvar".
........
r58567 | georg.brandl | 2007-10-20 11:08:14 -0700 (Sat, 20 Oct 2007) | 6 lines
* Add new toplevel chapter, "Using Python." (how to install,
configure and setup python on different platforms -- at least
in theory.)
* Move the Python on Mac docs in that chapter.
* Add a new chapter about the command line invocation, by stargaming.
........
r58568 | georg.brandl | 2007-10-20 11:33:20 -0700 (Sat, 20 Oct 2007) | 2 lines
Change title, for now.
........
r58569 | georg.brandl | 2007-10-20 11:39:25 -0700 (Sat, 20 Oct 2007) | 2 lines
Add entry to ACKS.
........
r58570 | georg.brandl | 2007-10-20 12:05:45 -0700 (Sat, 20 Oct 2007) | 2 lines
Clarify -E docs.
........
r58571 | georg.brandl | 2007-10-20 12:08:36 -0700 (Sat, 20 Oct 2007) | 2 lines
Even more clarification.
........
r58572 | andrew.kuchling | 2007-10-20 12:25:37 -0700 (Sat, 20 Oct 2007) | 1 line
Fix protocol name
........
r58573 | andrew.kuchling | 2007-10-20 12:35:18 -0700 (Sat, 20 Oct 2007) | 1 line
Various items
........
r58574 | andrew.kuchling | 2007-10-20 12:39:35 -0700 (Sat, 20 Oct 2007) | 1 line
Use correct header line
........
r58576 | armin.rigo | 2007-10-21 02:14:15 -0700 (Sun, 21 Oct 2007) | 3 lines
Add a crasher for the long-standing issue with closing a file
while another thread uses it.
........
r58577 | georg.brandl | 2007-10-21 03:01:56 -0700 (Sun, 21 Oct 2007) | 2 lines
Remove duplicate crasher.
........
r58578 | georg.brandl | 2007-10-21 03:24:20 -0700 (Sun, 21 Oct 2007) | 2 lines
Unify "byte code" to "bytecode". Also sprinkle :term: markup for it.
........
r58579 | georg.brandl | 2007-10-21 03:32:54 -0700 (Sun, 21 Oct 2007) | 2 lines
Add markup to new function descriptions.
........
r58580 | georg.brandl | 2007-10-21 03:45:46 -0700 (Sun, 21 Oct 2007) | 2 lines
Add :term:s for descriptors.
........
r58581 | georg.brandl | 2007-10-21 03:46:24 -0700 (Sun, 21 Oct 2007) | 2 lines
Unify "file-descriptor" to "file descriptor".
........
r58582 | georg.brandl | 2007-10-21 03:52:38 -0700 (Sun, 21 Oct 2007) | 2 lines
Add :term: for generators.
........
r58583 | georg.brandl | 2007-10-21 05:10:28 -0700 (Sun, 21 Oct 2007) | 2 lines
Add :term:s for iterator.
........
r58584 | georg.brandl | 2007-10-21 05:15:05 -0700 (Sun, 21 Oct 2007) | 2 lines
Add :term:s for "new-style class".
........
r58588 | neal.norwitz | 2007-10-21 21:47:54 -0700 (Sun, 21 Oct 2007) | 1 line
Add Chris Monson so he can edit PEPs.
........
r58594 | guido.van.rossum | 2007-10-22 09:27:19 -0700 (Mon, 22 Oct 2007) | 4 lines
Issue #1307, patch by Derek Shockey.
When "MAIL" is received without args, an exception happens instead of
sending a 501 syntax error response.
........
r58598 | travis.oliphant | 2007-10-22 19:40:56 -0700 (Mon, 22 Oct 2007) | 1 line
Add phuang patch from Issue 708374 which adds offset parameter to mmap module.
........
r58601 | neal.norwitz | 2007-10-22 22:44:27 -0700 (Mon, 22 Oct 2007) | 2 lines
Bug #1313, fix typo (wrong variable name) in example.
........
r58609 | georg.brandl | 2007-10-23 11:21:35 -0700 (Tue, 23 Oct 2007) | 2 lines
Update Pygments version from externals.
........
r58618 | guido.van.rossum | 2007-10-23 12:25:41 -0700 (Tue, 23 Oct 2007) | 3 lines
Issue 1307 by Derek Shockey, fox the same bug for RCPT.
Neal: please backport!
........
r58620 | raymond.hettinger | 2007-10-23 13:37:41 -0700 (Tue, 23 Oct 2007) | 1 line
Shorter name for namedtuple()
........
r58621 | andrew.kuchling | 2007-10-23 13:55:47 -0700 (Tue, 23 Oct 2007) | 1 line
Update name
........
r58622 | raymond.hettinger | 2007-10-23 14:23:07 -0700 (Tue, 23 Oct 2007) | 1 line
Fixup news entry
........
r58623 | raymond.hettinger | 2007-10-23 18:28:33 -0700 (Tue, 23 Oct 2007) | 1 line
Optimize sum() for integer and float inputs.
........
r58624 | raymond.hettinger | 2007-10-23 19:05:51 -0700 (Tue, 23 Oct 2007) | 1 line
Fixup error return and add support for intermixed ints and floats/
........
r58628 | vinay.sajip | 2007-10-24 03:47:06 -0700 (Wed, 24 Oct 2007) | 1 line
Bug #1321: Fixed logic error in TimedRotatingFileHandler.__init__()
........
r58641 | facundo.batista | 2007-10-24 12:11:08 -0700 (Wed, 24 Oct 2007) | 4 lines
Issue 1290. CharacterData.__repr__ was constructing a string
in response that keeped having a non-ascii character.
........
r58643 | thomas.heller | 2007-10-24 12:50:45 -0700 (Wed, 24 Oct 2007) | 1 line
Added unittest for calling a function with paramflags (backport from py3k branch).
........
r58645 | matthias.klose | 2007-10-24 13:00:44 -0700 (Wed, 24 Oct 2007) | 2 lines
- Build using system ffi library on arm*-linux*.
........
r58651 | georg.brandl | 2007-10-24 14:40:38 -0700 (Wed, 24 Oct 2007) | 2 lines
Bug #1287: make os.environ.pop() work as expected.
........
r58652 | raymond.hettinger | 2007-10-24 19:26:58 -0700 (Wed, 24 Oct 2007) | 1 line
Missing DECREFs
........
r58653 | matthias.klose | 2007-10-24 23:37:24 -0700 (Wed, 24 Oct 2007) | 2 lines
- Build using system ffi library on arm*-linux*, pass --with-system-ffi to CONFIG_ARGS
........
r58655 | thomas.heller | 2007-10-25 12:47:32 -0700 (Thu, 25 Oct 2007) | 2 lines
ffi_type_longdouble may be already #defined.
See issue 1324.
........
r58656 | kurt.kaiser | 2007-10-25 15:43:45 -0700 (Thu, 25 Oct 2007) | 3 lines
Correct an ancient bug in an unused path by removing that path: register() is
now idempotent.
........
r58660 | kurt.kaiser | 2007-10-25 17:10:09 -0700 (Thu, 25 Oct 2007) | 4 lines
1. Add comments to provide top-level documentation.
2. Refactor to use more descriptive names.
3. Enhance tests in main().
........
r58675 | georg.brandl | 2007-10-26 11:30:41 -0700 (Fri, 26 Oct 2007) | 2 lines
Fix new pop() method on os.environ on ignorecase-platforms.
........
r58696 | neal.norwitz | 2007-10-27 15:32:21 -0700 (Sat, 27 Oct 2007) | 1 line
Update URL for Pygments. 0.8.1 is no longer available
........
r58697 | hyeshik.chang | 2007-10-28 04:19:02 -0700 (Sun, 28 Oct 2007) | 3 lines
- Add support for FreeBSD 8 which is recently forked from FreeBSD 7.
- Regenerate IN module for most recent maintenance tree of FreeBSD 6 and 7.
........
r58698 | hyeshik.chang | 2007-10-28 05:38:09 -0700 (Sun, 28 Oct 2007) | 2 lines
Enable platform-specific tweaks for FreeBSD 8 (exactly same to FreeBSD 7's yet)
........
r58700 | kurt.kaiser | 2007-10-28 12:03:59 -0700 (Sun, 28 Oct 2007) | 2 lines
Add confirmation dialog before printing. Patch 1717170 Tal Einat.
........
r58706 | guido.van.rossum | 2007-10-29 13:52:45 -0700 (Mon, 29 Oct 2007) | 3 lines
Patch 1353 by Jacob Winther.
Add mp4 mapping to mimetypes.py.
........
r58709 | guido.van.rossum | 2007-10-29 15:15:05 -0700 (Mon, 29 Oct 2007) | 6 lines
Backport fixes for the code that decodes octal escapes (and for PyString
also hex escapes) -- this was reaching beyond the end of the input string
buffer, even though it is not supposed to be \0-terminated.
This has no visible effect but is clearly the correct thing to do.
(In 3.0 it had a visible effect after removing ob_sstate from PyString.)
........
r58710 | kurt.kaiser | 2007-10-29 19:38:54 -0700 (Mon, 29 Oct 2007) | 7 lines
check in Tal Einat's update to tabpage.py
Patch 1612746
M configDialog.py
M NEWS.txt
AM tabbedpages.py
........
r58715 | georg.brandl | 2007-10-30 10:51:18 -0700 (Tue, 30 Oct 2007) | 2 lines
Use correct markup.
........
r58716 | georg.brandl | 2007-10-30 10:57:12 -0700 (Tue, 30 Oct 2007) | 2 lines
Make example about hiding None return values at the prompt clearer.
........
r58728 | neal.norwitz | 2007-10-30 23:33:20 -0700 (Tue, 30 Oct 2007) | 1 line
Fix some compiler warnings for signed comparisons on Unix and Windows.
........
r58731 | martin.v.loewis | 2007-10-31 10:19:33 -0700 (Wed, 31 Oct 2007) | 2 lines
Adding Christian Heimes.
........
r58737 | raymond.hettinger | 2007-10-31 14:57:58 -0700 (Wed, 31 Oct 2007) | 1 line
Clarify the reasons why pickle is almost always better than marshal
........
r58739 | raymond.hettinger | 2007-10-31 15:15:49 -0700 (Wed, 31 Oct 2007) | 1 line
Sets are marshalable.
........
2007-11-01 17:32:30 -03:00
|
|
|
one or more diamond relationships (where at least one of the parent classes
|
2007-08-31 13:33:38 -03:00
|
|
|
can be accessed through multiple paths from the bottommost class). For example,
|
|
|
|
all classes inherit from :class:`object`, so any case of multiple inheritance
|
|
|
|
provides more than one path to reach :class:`object`. To keep the base classes
|
|
|
|
from being accessed more than once, the dynamic algorithm linearizes the search
|
|
|
|
order in a way that preserves the left-to-right ordering specified in each
|
|
|
|
class, that calls each parent only once, and that is monotonic (meaning that a
|
|
|
|
class can be subclassed without affecting the precedence order of its parents).
|
|
|
|
Taken together, these properties make it possible to design reliable and
|
|
|
|
extensible classes with multiple inheritance. For more detail, see
|
2007-08-15 11:28:22 -03:00
|
|
|
http://www.python.org/download/releases/2.3/mro/.
|
|
|
|
|
|
|
|
|
|
|
|
.. _tut-private:
|
|
|
|
|
|
|
|
Private Variables
|
|
|
|
=================
|
|
|
|
|
|
|
|
There is limited support for class-private identifiers. Any identifier of the
|
|
|
|
form ``__spam`` (at least two leading underscores, at most one trailing
|
|
|
|
underscore) is textually replaced with ``_classname__spam``, where ``classname``
|
|
|
|
is the current class name with leading underscore(s) stripped. This mangling is
|
|
|
|
done without regard to the syntactic position of the identifier, so it can be
|
|
|
|
used to define class-private instance and class variables, methods, variables
|
|
|
|
stored in globals, and even variables stored in instances. private to this class
|
|
|
|
on instances of *other* classes. Truncation may occur when the mangled name
|
|
|
|
would be longer than 255 characters. Outside classes, or when the class name
|
|
|
|
consists of only underscores, no mangling occurs.
|
|
|
|
|
|
|
|
Name mangling is intended to give classes an easy way to define "private"
|
|
|
|
instance variables and methods, without having to worry about instance variables
|
|
|
|
defined by derived classes, or mucking with instance variables by code outside
|
|
|
|
the class. Note that the mangling rules are designed mostly to avoid accidents;
|
|
|
|
it still is possible for a determined soul to access or modify a variable that
|
|
|
|
is considered private. This can even be useful in special circumstances, such
|
|
|
|
as in the debugger, and that's one reason why this loophole is not closed.
|
|
|
|
(Buglet: derivation of a class with the same name as the base class makes use of
|
|
|
|
private variables of the base class possible.)
|
|
|
|
|
|
|
|
Notice that code passed to ``exec()`` or ``eval()`` does not
|
|
|
|
consider the classname of the invoking class to be the current class; this is
|
|
|
|
similar to the effect of the ``global`` statement, the effect of which is
|
|
|
|
likewise restricted to code that is byte-compiled together. The same
|
|
|
|
restriction applies to ``getattr()``, ``setattr()`` and ``delattr()``, as well
|
|
|
|
as when referencing ``__dict__`` directly.
|
|
|
|
|
|
|
|
|
|
|
|
.. _tut-odds:
|
|
|
|
|
|
|
|
Odds and Ends
|
|
|
|
=============
|
|
|
|
|
|
|
|
Sometimes it is useful to have a data type similar to the Pascal "record" or C
|
|
|
|
"struct", bundling together a few named data items. An empty class definition
|
|
|
|
will do nicely::
|
|
|
|
|
|
|
|
class Employee:
|
|
|
|
pass
|
|
|
|
|
|
|
|
john = Employee() # Create an empty employee record
|
|
|
|
|
|
|
|
# Fill the fields of the record
|
|
|
|
john.name = 'John Doe'
|
|
|
|
john.dept = 'computer lab'
|
|
|
|
john.salary = 1000
|
|
|
|
|
|
|
|
A piece of Python code that expects a particular abstract data type can often be
|
|
|
|
passed a class that emulates the methods of that data type instead. For
|
|
|
|
instance, if you have a function that formats some data from a file object, you
|
|
|
|
can define a class with methods :meth:`read` and :meth:`readline` that get the
|
|
|
|
data from a string buffer instead, and pass it as an argument.
|
|
|
|
|
|
|
|
.. % (Unfortunately, this
|
|
|
|
.. % technique has its limitations: a class can't define operations that
|
|
|
|
.. % are accessed by special syntax such as sequence subscripting or
|
|
|
|
.. % arithmetic operators, and assigning such a ``pseudo-file'' to
|
|
|
|
.. % \code{sys.stdin} will not cause the interpreter to read further input
|
|
|
|
.. % from it.)
|
|
|
|
|
2007-11-27 06:40:20 -04:00
|
|
|
Instance method objects have attributes, too: ``m.__self__`` is the instance
|
|
|
|
object with the method :meth:`m`, and ``m.__func__`` is the function object
|
2007-08-15 11:28:22 -03:00
|
|
|
corresponding to the method.
|
|
|
|
|
|
|
|
|
|
|
|
.. _tut-exceptionclasses:
|
|
|
|
|
|
|
|
Exceptions Are Classes Too
|
|
|
|
==========================
|
|
|
|
|
|
|
|
User-defined exceptions are identified by classes as well. Using this mechanism
|
|
|
|
it is possible to create extensible hierarchies of exceptions.
|
|
|
|
|
2007-09-09 21:27:23 -03:00
|
|
|
There are two valid (semantic) forms for the raise statement::
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2007-09-09 21:27:23 -03:00
|
|
|
raise Class
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2007-09-09 21:27:23 -03:00
|
|
|
raise Instance
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2007-09-09 21:27:23 -03:00
|
|
|
In the first form, ``Class`` must be an instance of :class:`type` or of a
|
|
|
|
class derived from it. The first form is a shorthand for::
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2007-09-09 21:27:23 -03:00
|
|
|
raise Class()
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
A class in an except clause is compatible with an exception if it is the same
|
|
|
|
class or a base class thereof (but not the other way around --- an except clause
|
|
|
|
listing a derived class is not compatible with a base class). For example, the
|
|
|
|
following code will print B, C, D in that order::
|
|
|
|
|
|
|
|
class B:
|
|
|
|
pass
|
|
|
|
class C(B):
|
|
|
|
pass
|
|
|
|
class D(C):
|
|
|
|
pass
|
|
|
|
|
|
|
|
for c in [B, C, D]:
|
|
|
|
try:
|
|
|
|
raise c()
|
|
|
|
except D:
|
2007-08-31 00:25:11 -03:00
|
|
|
print("D")
|
2007-08-15 11:28:22 -03:00
|
|
|
except C:
|
2007-08-31 00:25:11 -03:00
|
|
|
print("C")
|
2007-08-15 11:28:22 -03:00
|
|
|
except B:
|
2007-08-31 00:25:11 -03:00
|
|
|
print("B")
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
Note that if the except clauses were reversed (with ``except B`` first), it
|
|
|
|
would have printed B, B, B --- the first matching except clause is triggered.
|
|
|
|
|
|
|
|
When an error message is printed for an unhandled exception, the exception's
|
|
|
|
class name is printed, then a colon and a space, and finally the instance
|
|
|
|
converted to a string using the built-in function :func:`str`.
|
|
|
|
|
|
|
|
|
|
|
|
.. _tut-iterators:
|
|
|
|
|
|
|
|
Iterators
|
|
|
|
=========
|
|
|
|
|
|
|
|
By now you have probably noticed that most container objects can be looped over
|
|
|
|
using a :keyword:`for` statement::
|
|
|
|
|
|
|
|
for element in [1, 2, 3]:
|
2007-08-31 00:25:11 -03:00
|
|
|
print(element)
|
2007-08-15 11:28:22 -03:00
|
|
|
for element in (1, 2, 3):
|
2007-08-31 00:25:11 -03:00
|
|
|
print(element)
|
2007-08-15 11:28:22 -03:00
|
|
|
for key in {'one':1, 'two':2}:
|
2007-08-31 00:25:11 -03:00
|
|
|
print(key)
|
2007-08-15 11:28:22 -03:00
|
|
|
for char in "123":
|
2007-08-31 00:25:11 -03:00
|
|
|
print(char)
|
2007-08-15 11:28:22 -03:00
|
|
|
for line in open("myfile.txt"):
|
2007-08-31 00:25:11 -03:00
|
|
|
print(line)
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
This style of access is clear, concise, and convenient. The use of iterators
|
|
|
|
pervades and unifies Python. Behind the scenes, the :keyword:`for` statement
|
|
|
|
calls :func:`iter` on the container object. The function returns an iterator
|
|
|
|
object that defines the method :meth:`__next__` which accesses elements in the
|
|
|
|
container one at a time. When there are no more elements, :meth:`__next__`
|
|
|
|
raises a :exc:`StopIteration` exception which tells the :keyword:`for` loop to
|
|
|
|
terminate. You can call the :meth:`__next__` method using the :func:`next`
|
|
|
|
builtin; this example shows how it all works::
|
|
|
|
|
|
|
|
>>> s = 'abc'
|
|
|
|
>>> it = iter(s)
|
|
|
|
>>> it
|
|
|
|
<iterator object at 0x00A1DB50>
|
|
|
|
>>> next(it)
|
|
|
|
'a'
|
|
|
|
>>> next(it)
|
|
|
|
'b'
|
|
|
|
>>> next(it)
|
|
|
|
'c'
|
|
|
|
>>> next(it)
|
|
|
|
|
|
|
|
Traceback (most recent call last):
|
|
|
|
File "<stdin>", line 1, in ?
|
|
|
|
next(it)
|
|
|
|
StopIteration
|
|
|
|
|
|
|
|
Having seen the mechanics behind the iterator protocol, it is easy to add
|
|
|
|
iterator behavior to your classes. Define a :meth:`__iter__` method which
|
|
|
|
returns an object with a :meth:`__next__` method. If the class defines
|
|
|
|
:meth:`__next__`, then :meth:`__iter__` can just return ``self``::
|
|
|
|
|
|
|
|
class Reverse:
|
|
|
|
"Iterator for looping over a sequence backwards"
|
|
|
|
def __init__(self, data):
|
|
|
|
self.data = data
|
|
|
|
self.index = len(data)
|
|
|
|
def __iter__(self):
|
|
|
|
return self
|
|
|
|
def __next__(self):
|
|
|
|
if self.index == 0:
|
|
|
|
raise StopIteration
|
|
|
|
self.index = self.index - 1
|
|
|
|
return self.data[self.index]
|
|
|
|
|
|
|
|
>>> for char in Reverse('spam'):
|
2007-08-31 00:25:11 -03:00
|
|
|
... print(char)
|
2007-08-15 11:28:22 -03:00
|
|
|
...
|
|
|
|
m
|
|
|
|
a
|
|
|
|
p
|
|
|
|
s
|
|
|
|
|
|
|
|
|
|
|
|
.. _tut-generators:
|
|
|
|
|
|
|
|
Generators
|
|
|
|
==========
|
|
|
|
|
#1370: Finish the merge r58749, log below, by resolving all conflicts in Doc/.
Merged revisions 58221-58741 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r58221 | georg.brandl | 2007-09-20 10:57:59 -0700 (Thu, 20 Sep 2007) | 2 lines
Patch #1181: add os.environ.clear() method.
........
r58225 | sean.reifschneider | 2007-09-20 23:33:28 -0700 (Thu, 20 Sep 2007) | 3 lines
Issue1704287: "make install" fails unless you do "make" first. Make
oldsharedmods and sharedmods in "libinstall".
........
r58232 | guido.van.rossum | 2007-09-22 13:18:03 -0700 (Sat, 22 Sep 2007) | 4 lines
Patch # 188 by Philip Jenvey.
Make tell() mark CRLF as a newline.
With unit test.
........
r58242 | georg.brandl | 2007-09-24 10:55:47 -0700 (Mon, 24 Sep 2007) | 2 lines
Fix typo and double word.
........
r58245 | georg.brandl | 2007-09-24 10:59:28 -0700 (Mon, 24 Sep 2007) | 2 lines
#1196: document default radix for int().
........
r58247 | georg.brandl | 2007-09-24 11:08:24 -0700 (Mon, 24 Sep 2007) | 2 lines
#1177: accept 2xx responses for https too, not only http.
........
r58249 | andrew.kuchling | 2007-09-24 16:45:51 -0700 (Mon, 24 Sep 2007) | 1 line
Remove stray odd character; grammar fix
........
r58250 | andrew.kuchling | 2007-09-24 16:46:28 -0700 (Mon, 24 Sep 2007) | 1 line
Typo fix
........
r58251 | andrew.kuchling | 2007-09-24 17:09:42 -0700 (Mon, 24 Sep 2007) | 1 line
Add various items
........
r58268 | vinay.sajip | 2007-09-26 22:34:45 -0700 (Wed, 26 Sep 2007) | 1 line
Change to flush and close logic to fix #1760556.
........
r58269 | vinay.sajip | 2007-09-26 22:38:51 -0700 (Wed, 26 Sep 2007) | 1 line
Change to basicConfig() to fix #1021.
........
r58270 | georg.brandl | 2007-09-26 23:26:58 -0700 (Wed, 26 Sep 2007) | 2 lines
#1208: document match object's boolean value.
........
r58271 | vinay.sajip | 2007-09-26 23:56:13 -0700 (Wed, 26 Sep 2007) | 1 line
Minor date change.
........
r58272 | vinay.sajip | 2007-09-27 00:35:10 -0700 (Thu, 27 Sep 2007) | 1 line
Change to LogRecord.__init__() to fix #1206. Note that archaic use of type(x) == types.DictType is because of keeping 1.5.2 compatibility. While this is much less relevant these days, there probably needs to be a separate commit for removing all archaic constructs at the same time.
........
r58288 | brett.cannon | 2007-09-30 12:45:10 -0700 (Sun, 30 Sep 2007) | 9 lines
tuple.__repr__ did not consider a reference loop as it is not possible from
Python code; but it is possible from C. object.__str__ had the issue of not
expecting a type to doing something within it's tp_str implementation that
could trigger an infinite recursion, but it could in C code.. Both found
thanks to BaseException and how it handles its repr.
Closes issue #1686386. Thanks to Thomas Herve for taking an initial stab at
coming up with a solution.
........
r58289 | brett.cannon | 2007-09-30 13:37:19 -0700 (Sun, 30 Sep 2007) | 3 lines
Fix error introduced by r58288; if a tuple is length 0 return its repr and
don't worry about any self-referring tuples.
........
r58294 | facundo.batista | 2007-10-02 10:01:24 -0700 (Tue, 02 Oct 2007) | 11 lines
Made the various is_* operations return booleans. This was discussed
with Cawlishaw by mail, and he basically confirmed that to these is_*
operations, there's no need to return Decimal(0) and Decimal(1) if
the language supports the False and True booleans.
Also added a few tests for the these functions in extra.decTest, since
they are mostly untested (apart from the doctests).
Thanks Mark Dickinson
........
r58295 | facundo.batista | 2007-10-02 11:21:18 -0700 (Tue, 02 Oct 2007) | 4 lines
Added a class to store the digits of log(10), so that they can be made
available when necessary without recomputing. Thanks Mark Dickinson
........
r58299 | mark.summerfield | 2007-10-03 01:53:21 -0700 (Wed, 03 Oct 2007) | 4 lines
Added note in footnote about string comparisons about
unicodedata.normalize().
........
r58304 | raymond.hettinger | 2007-10-03 14:18:11 -0700 (Wed, 03 Oct 2007) | 1 line
enumerate() is no longer bounded to using sequences shorter than LONG_MAX. The possibility of overflow was sending some newsgroup posters into a tizzy.
........
r58305 | raymond.hettinger | 2007-10-03 17:20:27 -0700 (Wed, 03 Oct 2007) | 1 line
itertools.count() no longer limited to sys.maxint.
........
r58306 | kurt.kaiser | 2007-10-03 18:49:54 -0700 (Wed, 03 Oct 2007) | 3 lines
Assume that the user knows when he wants to end the line; don't insert
something he didn't select or complete.
........
r58307 | kurt.kaiser | 2007-10-03 19:07:50 -0700 (Wed, 03 Oct 2007) | 2 lines
Remove unused theme that was causing a fault in p3k.
........
r58308 | kurt.kaiser | 2007-10-03 19:09:17 -0700 (Wed, 03 Oct 2007) | 2 lines
Clean up EditorWindow close.
........
r58309 | kurt.kaiser | 2007-10-03 19:53:07 -0700 (Wed, 03 Oct 2007) | 7 lines
textView cleanup. Patch 1718043 Tal Einat.
M idlelib/EditorWindow.py
M idlelib/aboutDialog.py
M idlelib/textView.py
M idlelib/NEWS.txt
........
r58310 | kurt.kaiser | 2007-10-03 20:11:12 -0700 (Wed, 03 Oct 2007) | 3 lines
configDialog cleanup. Patch 1730217 Tal Einat.
........
r58311 | neal.norwitz | 2007-10-03 23:00:48 -0700 (Wed, 03 Oct 2007) | 4 lines
Coverity #151: Remove deadcode.
All this code already exists above starting at line 653.
........
r58325 | fred.drake | 2007-10-04 19:46:12 -0700 (Thu, 04 Oct 2007) | 1 line
wrap lines to <80 characters before fixing errors
........
r58326 | raymond.hettinger | 2007-10-04 19:47:07 -0700 (Thu, 04 Oct 2007) | 6 lines
Add __asdict__() to NamedTuple and refine the docs.
Add maxlen support to deque() and fixup docs.
Partially fix __reduce__(). The None as a third arg was no longer supported.
Still needs work on __reduce__() to handle recursive inputs.
........
r58327 | fred.drake | 2007-10-04 19:48:32 -0700 (Thu, 04 Oct 2007) | 3 lines
move descriptions of ac_(in|out)_buffer_size to the right place
http://bugs.python.org/issue1053
........
r58329 | neal.norwitz | 2007-10-04 20:39:17 -0700 (Thu, 04 Oct 2007) | 3 lines
dict could be NULL, so we need to XDECREF.
Fix a compiler warning about passing a PyTypeObject* instead of PyObject*.
........
r58330 | neal.norwitz | 2007-10-04 20:41:19 -0700 (Thu, 04 Oct 2007) | 2 lines
Fix Coverity #158: Check the correct variable.
........
r58332 | neal.norwitz | 2007-10-04 22:01:38 -0700 (Thu, 04 Oct 2007) | 7 lines
Fix Coverity #159.
This code was broken if save() returned a negative number since i contained
a boolean value and then we compared i < 0 which should never be true.
Will backport (assuming it's necessary)
........
r58334 | neal.norwitz | 2007-10-04 22:29:17 -0700 (Thu, 04 Oct 2007) | 1 line
Add a note about fixing some more warnings found by Coverity.
........
r58338 | raymond.hettinger | 2007-10-05 12:07:31 -0700 (Fri, 05 Oct 2007) | 1 line
Restore BEGIN/END THREADS macros which were squashed in the previous checkin
........
r58343 | gregory.p.smith | 2007-10-06 00:48:10 -0700 (Sat, 06 Oct 2007) | 3 lines
Stab in the dark attempt to fix the test_bsddb3 failure on sparc and S-390
ubuntu buildbots.
........
r58344 | gregory.p.smith | 2007-10-06 00:51:59 -0700 (Sat, 06 Oct 2007) | 2 lines
Allows BerkeleyDB 4.6.x >= 4.6.21 for the bsddb module.
........
r58348 | gregory.p.smith | 2007-10-06 08:47:37 -0700 (Sat, 06 Oct 2007) | 3 lines
Use the host the author likely meant in the first place. pop.gmail.com is
reliable. gmail.org is someones personal domain.
........
r58351 | neal.norwitz | 2007-10-06 12:16:28 -0700 (Sat, 06 Oct 2007) | 3 lines
Ensure that this test will pass even if another test left an unwritable TESTFN.
Also use the safe unlink in test_support instead of rolling our own here.
........
r58368 | georg.brandl | 2007-10-08 00:50:24 -0700 (Mon, 08 Oct 2007) | 3 lines
#1123: fix the docs for the str.split(None, sep) case.
Also expand a few other methods' docs, which had more info in the deprecated string module docs.
........
r58369 | georg.brandl | 2007-10-08 01:06:05 -0700 (Mon, 08 Oct 2007) | 2 lines
Update docstring of sched, also remove an unused assignment.
........
r58370 | raymond.hettinger | 2007-10-08 02:14:28 -0700 (Mon, 08 Oct 2007) | 5 lines
Add comments to NamedTuple code.
Let the field spec be either a string or a non-string sequence (suggested by Martin Blais with use cases).
Improve the error message in the case of a SyntaxError (caused by a duplicate field name).
........
r58371 | raymond.hettinger | 2007-10-08 02:56:29 -0700 (Mon, 08 Oct 2007) | 1 line
Missed a line in the docs
........
r58372 | raymond.hettinger | 2007-10-08 03:11:51 -0700 (Mon, 08 Oct 2007) | 1 line
Better variable names
........
r58376 | georg.brandl | 2007-10-08 07:12:47 -0700 (Mon, 08 Oct 2007) | 3 lines
#1199: docs for tp_as_{number,sequence,mapping}, by Amaury Forgeot d'Arc.
No need to merge this to py3k!
........
r58380 | raymond.hettinger | 2007-10-08 14:26:58 -0700 (Mon, 08 Oct 2007) | 1 line
Eliminate camelcase function name
........
r58381 | andrew.kuchling | 2007-10-08 16:23:03 -0700 (Mon, 08 Oct 2007) | 1 line
Eliminate camelcase function name
........
r58382 | raymond.hettinger | 2007-10-08 18:36:23 -0700 (Mon, 08 Oct 2007) | 1 line
Make the error messages more specific
........
r58384 | gregory.p.smith | 2007-10-08 23:02:21 -0700 (Mon, 08 Oct 2007) | 10 lines
Splits Modules/_bsddb.c up into bsddb.h and _bsddb.c and adds a C API
object available as bsddb.db.api. This is based on the patch submitted
by Duncan Grisby here:
http://sourceforge.net/tracker/index.php?func=detail&aid=1551895&group_id=13900&atid=313900
See this thread for additional info:
http://sourceforge.net/mailarchive/forum.php?thread_name=E1GAVDK-0002rk-Iw%40apasphere.com&forum_name=pybsddb-users
It also cleans up the code a little by removing some ifdef/endifs for
python prior to 2.1 and for unsupported Berkeley DB <= 3.2.
........
r58385 | gregory.p.smith | 2007-10-08 23:50:43 -0700 (Mon, 08 Oct 2007) | 5 lines
Fix a double free when positioning a database cursor to a non-existant
string key (and probably a few other situations with string keys).
This was reported with a patch as pybsddb sourceforge bug 1708868 by
jjjhhhlll at gmail.
........
r58386 | gregory.p.smith | 2007-10-09 00:19:11 -0700 (Tue, 09 Oct 2007) | 3 lines
Use the highest cPickle protocol in bsddb.dbshelve. This comes from
sourceforge pybsddb patch 1551443 by w_barnes.
........
r58394 | gregory.p.smith | 2007-10-09 11:26:02 -0700 (Tue, 09 Oct 2007) | 2 lines
remove another sleepycat reference
........
r58396 | kurt.kaiser | 2007-10-09 12:31:30 -0700 (Tue, 09 Oct 2007) | 3 lines
Allow interrupt only when executing user code in subprocess
Patch 1225 Tal Einat modified from IDLE-Spoon.
........
r58399 | brett.cannon | 2007-10-09 17:07:50 -0700 (Tue, 09 Oct 2007) | 5 lines
Remove file-level typedefs that were inconsistently used throughout the file.
Just move over to the public API names.
Closes issue1238.
........
r58401 | raymond.hettinger | 2007-10-09 17:26:46 -0700 (Tue, 09 Oct 2007) | 1 line
Accept Jim Jewett's api suggestion to use None instead of -1 to indicate unbounded deques.
........
r58403 | kurt.kaiser | 2007-10-09 17:55:40 -0700 (Tue, 09 Oct 2007) | 2 lines
Allow cursor color change w/o restart. Patch 1725576 Tal Einat.
........
r58404 | kurt.kaiser | 2007-10-09 18:06:47 -0700 (Tue, 09 Oct 2007) | 2 lines
show paste if > 80 columns. Patch 1659326 Tal Einat.
........
r58415 | thomas.heller | 2007-10-11 12:51:32 -0700 (Thu, 11 Oct 2007) | 5 lines
On OS X, use os.uname() instead of gestalt.sysv(...) to get the
operating system version. This allows to use ctypes when Python
was configured with --disable-toolbox-glue.
........
r58419 | neal.norwitz | 2007-10-11 20:01:01 -0700 (Thu, 11 Oct 2007) | 1 line
Get rid of warning about not being able to create an existing directory.
........
r58420 | neal.norwitz | 2007-10-11 20:01:30 -0700 (Thu, 11 Oct 2007) | 1 line
Get rid of warnings on a bunch of platforms by using a proper prototype.
........
r58421 | neal.norwitz | 2007-10-11 20:01:54 -0700 (Thu, 11 Oct 2007) | 4 lines
Get rid of compiler warning about retval being used (returned) without
being initialized. (gcc warning and Coverity 202)
........
r58422 | neal.norwitz | 2007-10-11 20:03:23 -0700 (Thu, 11 Oct 2007) | 1 line
Fix Coverity 168: Close the file before returning (exiting).
........
r58423 | neal.norwitz | 2007-10-11 20:04:18 -0700 (Thu, 11 Oct 2007) | 4 lines
Fix Coverity 180: Don't overallocate. We don't need structs, but pointers.
Also fix a memory leak.
........
r58424 | neal.norwitz | 2007-10-11 20:05:19 -0700 (Thu, 11 Oct 2007) | 5 lines
Fix Coverity 185-186: If the passed in FILE is NULL, uninitialized memory
would be accessed.
Will backport.
........
r58425 | neal.norwitz | 2007-10-11 20:52:34 -0700 (Thu, 11 Oct 2007) | 1 line
Get this module to compile with bsddb versions prior to 4.3
........
r58430 | martin.v.loewis | 2007-10-12 01:56:52 -0700 (Fri, 12 Oct 2007) | 3 lines
Bug #1216: Restore support for Visual Studio 2002.
Will backport to 2.5.
........
r58433 | raymond.hettinger | 2007-10-12 10:53:11 -0700 (Fri, 12 Oct 2007) | 1 line
Fix test of count.__repr__() to ignore the 'L' if the count is a long
........
r58434 | gregory.p.smith | 2007-10-12 11:44:06 -0700 (Fri, 12 Oct 2007) | 4 lines
Fixes http://bugs.python.org/issue1233 - bsddb.dbshelve.DBShelf.append
was useless due to inverted logic. Also adds a test case for RECNO dbs
to test_dbshelve.
........
r58445 | georg.brandl | 2007-10-13 06:20:03 -0700 (Sat, 13 Oct 2007) | 2 lines
Fix email example.
........
r58450 | gregory.p.smith | 2007-10-13 16:02:05 -0700 (Sat, 13 Oct 2007) | 2 lines
Fix an uncollectable reference leak in bsddb.db.DBShelf.append
........
r58453 | neal.norwitz | 2007-10-13 17:18:40 -0700 (Sat, 13 Oct 2007) | 8 lines
Let the O/S supply a port if none of the default ports can be used.
This should make the tests more robust at the expense of allowing
tests to be sloppier by not requiring them to cleanup after themselves.
(It will legitamitely help when running two test suites simultaneously
or if another process is already using one of the predefined ports.)
Also simplifies (slightLy) the exception handling elsewhere.
........
r58459 | neal.norwitz | 2007-10-14 11:30:21 -0700 (Sun, 14 Oct 2007) | 2 lines
Don't raise a string exception, they don't work anymore.
........
r58460 | neal.norwitz | 2007-10-14 11:40:37 -0700 (Sun, 14 Oct 2007) | 1 line
Use unittest for assertions
........
r58468 | armin.rigo | 2007-10-15 00:48:35 -0700 (Mon, 15 Oct 2007) | 2 lines
test_bigbits was not testing what it seemed to.
........
r58471 | guido.van.rossum | 2007-10-15 08:54:11 -0700 (Mon, 15 Oct 2007) | 3 lines
Change a PyErr_Print() into a PyErr_Clear(),
per discussion in issue 1031213.
........
r58500 | raymond.hettinger | 2007-10-16 12:18:30 -0700 (Tue, 16 Oct 2007) | 1 line
Improve error messages
........
r58506 | raymond.hettinger | 2007-10-16 14:28:32 -0700 (Tue, 16 Oct 2007) | 1 line
More docs, error messages, and tests
........
r58507 | andrew.kuchling | 2007-10-16 15:58:03 -0700 (Tue, 16 Oct 2007) | 1 line
Add items
........
r58508 | brett.cannon | 2007-10-16 16:24:06 -0700 (Tue, 16 Oct 2007) | 3 lines
Remove ``:const:`` notation on None in parameter list. Since the markup is not
rendered for parameters it just showed up as ``:const:`None` `` in the output.
........
r58509 | brett.cannon | 2007-10-16 16:26:45 -0700 (Tue, 16 Oct 2007) | 3 lines
Re-order some functions whose parameters differ between PyObject and const char
* so that they are next to each other.
........
r58522 | armin.rigo | 2007-10-17 11:46:37 -0700 (Wed, 17 Oct 2007) | 5 lines
Fix the overflow checking of list_repeat.
Introduce overflow checking into list_inplace_repeat.
Backport candidate, possibly.
........
r58530 | facundo.batista | 2007-10-17 20:16:03 -0700 (Wed, 17 Oct 2007) | 7 lines
Issue #1580738. When HTTPConnection reads the whole stream with read(),
it closes itself. When the stream is read in several calls to read(n),
it should behave in the same way if HTTPConnection knows where the end
of the stream is (through self.length). Added a test case for this
behaviour.
........
r58531 | facundo.batista | 2007-10-17 20:44:48 -0700 (Wed, 17 Oct 2007) | 3 lines
Issue 1289, just a typo.
........
r58532 | gregory.p.smith | 2007-10-18 00:56:54 -0700 (Thu, 18 Oct 2007) | 4 lines
cleanup test_dbtables to use mkdtemp. cleanup dbtables to pass txn as a
keyword argument whenever possible to avoid bugs and confusion. (dbtables.py
line 447 self.db.get using txn as a non-keyword was an actual bug due to this)
........
r58533 | gregory.p.smith | 2007-10-18 01:34:20 -0700 (Thu, 18 Oct 2007) | 4 lines
Fix a weird bug in dbtables: if it chose a random rowid string that contained
NULL bytes it would cause the database all sorts of problems in the future
leading to very strange random failures and corrupt dbtables.bsdTableDb dbs.
........
r58534 | gregory.p.smith | 2007-10-18 09:32:02 -0700 (Thu, 18 Oct 2007) | 3 lines
A cleaner fix than the one committed last night. Generate random rowids that
do not contain null bytes.
........
r58537 | gregory.p.smith | 2007-10-18 10:17:57 -0700 (Thu, 18 Oct 2007) | 2 lines
mention bsddb fixes.
........
r58538 | raymond.hettinger | 2007-10-18 14:13:06 -0700 (Thu, 18 Oct 2007) | 1 line
Remove useless warning
........
r58539 | gregory.p.smith | 2007-10-19 00:31:20 -0700 (Fri, 19 Oct 2007) | 2 lines
squelch the warning that this test is supposed to trigger.
........
r58542 | georg.brandl | 2007-10-19 05:32:39 -0700 (Fri, 19 Oct 2007) | 2 lines
Clarify wording for apply().
........
r58544 | mark.summerfield | 2007-10-19 05:48:17 -0700 (Fri, 19 Oct 2007) | 3 lines
Added a cross-ref to each other.
........
r58545 | georg.brandl | 2007-10-19 10:38:49 -0700 (Fri, 19 Oct 2007) | 2 lines
#1284: "S" means "seen", not unread.
........
r58548 | thomas.heller | 2007-10-19 11:11:41 -0700 (Fri, 19 Oct 2007) | 4 lines
Fix ctypes on 32-bit systems when Python is configured --with-system-ffi.
See also https://bugs.launchpad.net/bugs/72505.
Ported from release25-maint branch.
........
r58550 | facundo.batista | 2007-10-19 12:25:57 -0700 (Fri, 19 Oct 2007) | 8 lines
The constructor from tuple was way too permissive: it allowed bad
coefficient numbers, floats in the sign, and other details that
generated directly the wrong number in the best case, or triggered
misfunctionality in the alorithms.
Test cases added for these issues. Thanks Mark Dickinson.
........
r58559 | georg.brandl | 2007-10-20 06:22:53 -0700 (Sat, 20 Oct 2007) | 2 lines
Fix code being interpreted as a target.
........
r58561 | georg.brandl | 2007-10-20 06:36:24 -0700 (Sat, 20 Oct 2007) | 2 lines
Document new "cmdoption" directive.
........
r58562 | georg.brandl | 2007-10-20 08:21:22 -0700 (Sat, 20 Oct 2007) | 2 lines
Make a path more Unix-standardy.
........
r58564 | georg.brandl | 2007-10-20 10:51:39 -0700 (Sat, 20 Oct 2007) | 2 lines
Document new directive "envvar".
........
r58567 | georg.brandl | 2007-10-20 11:08:14 -0700 (Sat, 20 Oct 2007) | 6 lines
* Add new toplevel chapter, "Using Python." (how to install,
configure and setup python on different platforms -- at least
in theory.)
* Move the Python on Mac docs in that chapter.
* Add a new chapter about the command line invocation, by stargaming.
........
r58568 | georg.brandl | 2007-10-20 11:33:20 -0700 (Sat, 20 Oct 2007) | 2 lines
Change title, for now.
........
r58569 | georg.brandl | 2007-10-20 11:39:25 -0700 (Sat, 20 Oct 2007) | 2 lines
Add entry to ACKS.
........
r58570 | georg.brandl | 2007-10-20 12:05:45 -0700 (Sat, 20 Oct 2007) | 2 lines
Clarify -E docs.
........
r58571 | georg.brandl | 2007-10-20 12:08:36 -0700 (Sat, 20 Oct 2007) | 2 lines
Even more clarification.
........
r58572 | andrew.kuchling | 2007-10-20 12:25:37 -0700 (Sat, 20 Oct 2007) | 1 line
Fix protocol name
........
r58573 | andrew.kuchling | 2007-10-20 12:35:18 -0700 (Sat, 20 Oct 2007) | 1 line
Various items
........
r58574 | andrew.kuchling | 2007-10-20 12:39:35 -0700 (Sat, 20 Oct 2007) | 1 line
Use correct header line
........
r58576 | armin.rigo | 2007-10-21 02:14:15 -0700 (Sun, 21 Oct 2007) | 3 lines
Add a crasher for the long-standing issue with closing a file
while another thread uses it.
........
r58577 | georg.brandl | 2007-10-21 03:01:56 -0700 (Sun, 21 Oct 2007) | 2 lines
Remove duplicate crasher.
........
r58578 | georg.brandl | 2007-10-21 03:24:20 -0700 (Sun, 21 Oct 2007) | 2 lines
Unify "byte code" to "bytecode". Also sprinkle :term: markup for it.
........
r58579 | georg.brandl | 2007-10-21 03:32:54 -0700 (Sun, 21 Oct 2007) | 2 lines
Add markup to new function descriptions.
........
r58580 | georg.brandl | 2007-10-21 03:45:46 -0700 (Sun, 21 Oct 2007) | 2 lines
Add :term:s for descriptors.
........
r58581 | georg.brandl | 2007-10-21 03:46:24 -0700 (Sun, 21 Oct 2007) | 2 lines
Unify "file-descriptor" to "file descriptor".
........
r58582 | georg.brandl | 2007-10-21 03:52:38 -0700 (Sun, 21 Oct 2007) | 2 lines
Add :term: for generators.
........
r58583 | georg.brandl | 2007-10-21 05:10:28 -0700 (Sun, 21 Oct 2007) | 2 lines
Add :term:s for iterator.
........
r58584 | georg.brandl | 2007-10-21 05:15:05 -0700 (Sun, 21 Oct 2007) | 2 lines
Add :term:s for "new-style class".
........
r58588 | neal.norwitz | 2007-10-21 21:47:54 -0700 (Sun, 21 Oct 2007) | 1 line
Add Chris Monson so he can edit PEPs.
........
r58594 | guido.van.rossum | 2007-10-22 09:27:19 -0700 (Mon, 22 Oct 2007) | 4 lines
Issue #1307, patch by Derek Shockey.
When "MAIL" is received without args, an exception happens instead of
sending a 501 syntax error response.
........
r58598 | travis.oliphant | 2007-10-22 19:40:56 -0700 (Mon, 22 Oct 2007) | 1 line
Add phuang patch from Issue 708374 which adds offset parameter to mmap module.
........
r58601 | neal.norwitz | 2007-10-22 22:44:27 -0700 (Mon, 22 Oct 2007) | 2 lines
Bug #1313, fix typo (wrong variable name) in example.
........
r58609 | georg.brandl | 2007-10-23 11:21:35 -0700 (Tue, 23 Oct 2007) | 2 lines
Update Pygments version from externals.
........
r58618 | guido.van.rossum | 2007-10-23 12:25:41 -0700 (Tue, 23 Oct 2007) | 3 lines
Issue 1307 by Derek Shockey, fox the same bug for RCPT.
Neal: please backport!
........
r58620 | raymond.hettinger | 2007-10-23 13:37:41 -0700 (Tue, 23 Oct 2007) | 1 line
Shorter name for namedtuple()
........
r58621 | andrew.kuchling | 2007-10-23 13:55:47 -0700 (Tue, 23 Oct 2007) | 1 line
Update name
........
r58622 | raymond.hettinger | 2007-10-23 14:23:07 -0700 (Tue, 23 Oct 2007) | 1 line
Fixup news entry
........
r58623 | raymond.hettinger | 2007-10-23 18:28:33 -0700 (Tue, 23 Oct 2007) | 1 line
Optimize sum() for integer and float inputs.
........
r58624 | raymond.hettinger | 2007-10-23 19:05:51 -0700 (Tue, 23 Oct 2007) | 1 line
Fixup error return and add support for intermixed ints and floats/
........
r58628 | vinay.sajip | 2007-10-24 03:47:06 -0700 (Wed, 24 Oct 2007) | 1 line
Bug #1321: Fixed logic error in TimedRotatingFileHandler.__init__()
........
r58641 | facundo.batista | 2007-10-24 12:11:08 -0700 (Wed, 24 Oct 2007) | 4 lines
Issue 1290. CharacterData.__repr__ was constructing a string
in response that keeped having a non-ascii character.
........
r58643 | thomas.heller | 2007-10-24 12:50:45 -0700 (Wed, 24 Oct 2007) | 1 line
Added unittest for calling a function with paramflags (backport from py3k branch).
........
r58645 | matthias.klose | 2007-10-24 13:00:44 -0700 (Wed, 24 Oct 2007) | 2 lines
- Build using system ffi library on arm*-linux*.
........
r58651 | georg.brandl | 2007-10-24 14:40:38 -0700 (Wed, 24 Oct 2007) | 2 lines
Bug #1287: make os.environ.pop() work as expected.
........
r58652 | raymond.hettinger | 2007-10-24 19:26:58 -0700 (Wed, 24 Oct 2007) | 1 line
Missing DECREFs
........
r58653 | matthias.klose | 2007-10-24 23:37:24 -0700 (Wed, 24 Oct 2007) | 2 lines
- Build using system ffi library on arm*-linux*, pass --with-system-ffi to CONFIG_ARGS
........
r58655 | thomas.heller | 2007-10-25 12:47:32 -0700 (Thu, 25 Oct 2007) | 2 lines
ffi_type_longdouble may be already #defined.
See issue 1324.
........
r58656 | kurt.kaiser | 2007-10-25 15:43:45 -0700 (Thu, 25 Oct 2007) | 3 lines
Correct an ancient bug in an unused path by removing that path: register() is
now idempotent.
........
r58660 | kurt.kaiser | 2007-10-25 17:10:09 -0700 (Thu, 25 Oct 2007) | 4 lines
1. Add comments to provide top-level documentation.
2. Refactor to use more descriptive names.
3. Enhance tests in main().
........
r58675 | georg.brandl | 2007-10-26 11:30:41 -0700 (Fri, 26 Oct 2007) | 2 lines
Fix new pop() method on os.environ on ignorecase-platforms.
........
r58696 | neal.norwitz | 2007-10-27 15:32:21 -0700 (Sat, 27 Oct 2007) | 1 line
Update URL for Pygments. 0.8.1 is no longer available
........
r58697 | hyeshik.chang | 2007-10-28 04:19:02 -0700 (Sun, 28 Oct 2007) | 3 lines
- Add support for FreeBSD 8 which is recently forked from FreeBSD 7.
- Regenerate IN module for most recent maintenance tree of FreeBSD 6 and 7.
........
r58698 | hyeshik.chang | 2007-10-28 05:38:09 -0700 (Sun, 28 Oct 2007) | 2 lines
Enable platform-specific tweaks for FreeBSD 8 (exactly same to FreeBSD 7's yet)
........
r58700 | kurt.kaiser | 2007-10-28 12:03:59 -0700 (Sun, 28 Oct 2007) | 2 lines
Add confirmation dialog before printing. Patch 1717170 Tal Einat.
........
r58706 | guido.van.rossum | 2007-10-29 13:52:45 -0700 (Mon, 29 Oct 2007) | 3 lines
Patch 1353 by Jacob Winther.
Add mp4 mapping to mimetypes.py.
........
r58709 | guido.van.rossum | 2007-10-29 15:15:05 -0700 (Mon, 29 Oct 2007) | 6 lines
Backport fixes for the code that decodes octal escapes (and for PyString
also hex escapes) -- this was reaching beyond the end of the input string
buffer, even though it is not supposed to be \0-terminated.
This has no visible effect but is clearly the correct thing to do.
(In 3.0 it had a visible effect after removing ob_sstate from PyString.)
........
r58710 | kurt.kaiser | 2007-10-29 19:38:54 -0700 (Mon, 29 Oct 2007) | 7 lines
check in Tal Einat's update to tabpage.py
Patch 1612746
M configDialog.py
M NEWS.txt
AM tabbedpages.py
........
r58715 | georg.brandl | 2007-10-30 10:51:18 -0700 (Tue, 30 Oct 2007) | 2 lines
Use correct markup.
........
r58716 | georg.brandl | 2007-10-30 10:57:12 -0700 (Tue, 30 Oct 2007) | 2 lines
Make example about hiding None return values at the prompt clearer.
........
r58728 | neal.norwitz | 2007-10-30 23:33:20 -0700 (Tue, 30 Oct 2007) | 1 line
Fix some compiler warnings for signed comparisons on Unix and Windows.
........
r58731 | martin.v.loewis | 2007-10-31 10:19:33 -0700 (Wed, 31 Oct 2007) | 2 lines
Adding Christian Heimes.
........
r58737 | raymond.hettinger | 2007-10-31 14:57:58 -0700 (Wed, 31 Oct 2007) | 1 line
Clarify the reasons why pickle is almost always better than marshal
........
r58739 | raymond.hettinger | 2007-10-31 15:15:49 -0700 (Wed, 31 Oct 2007) | 1 line
Sets are marshalable.
........
2007-11-01 17:32:30 -03:00
|
|
|
:term:`Generator`\s are a simple and powerful tool for creating iterators. They
|
|
|
|
are written like regular functions but use the :keyword:`yield` statement
|
|
|
|
whenever they want to return data. Each time :func:`next` is called on it, the
|
|
|
|
generator resumes where it left-off (it remembers all the data values and which
|
|
|
|
statement was last executed). An example shows that generators can be trivially
|
|
|
|
easy to create::
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
def reverse(data):
|
|
|
|
for index in range(len(data)-1, -1, -1):
|
|
|
|
yield data[index]
|
|
|
|
|
|
|
|
>>> for char in reverse('golf'):
|
2007-08-31 00:25:11 -03:00
|
|
|
... print(char)
|
2007-08-15 11:28:22 -03:00
|
|
|
...
|
|
|
|
f
|
|
|
|
l
|
|
|
|
o
|
|
|
|
g
|
|
|
|
|
|
|
|
Anything that can be done with generators can also be done with class based
|
|
|
|
iterators as described in the previous section. What makes generators so
|
|
|
|
compact is that the :meth:`__iter__` and :meth:`__next__` methods are created
|
|
|
|
automatically.
|
|
|
|
|
|
|
|
Another key feature is that the local variables and execution state are
|
|
|
|
automatically saved between calls. This made the function easier to write and
|
|
|
|
much more clear than an approach using instance variables like ``self.index``
|
|
|
|
and ``self.data``.
|
|
|
|
|
|
|
|
In addition to automatic method creation and saving program state, when
|
|
|
|
generators terminate, they automatically raise :exc:`StopIteration`. In
|
|
|
|
combination, these features make it easy to create iterators with no more effort
|
|
|
|
than writing a regular function.
|
|
|
|
|
|
|
|
|
|
|
|
.. _tut-genexps:
|
|
|
|
|
|
|
|
Generator Expressions
|
|
|
|
=====================
|
|
|
|
|
|
|
|
Some simple generators can be coded succinctly as expressions using a syntax
|
|
|
|
similar to list comprehensions but with parentheses instead of brackets. These
|
|
|
|
expressions are designed for situations where the generator is used right away
|
|
|
|
by an enclosing function. Generator expressions are more compact but less
|
|
|
|
versatile than full generator definitions and tend to be more memory friendly
|
|
|
|
than equivalent list comprehensions.
|
|
|
|
|
|
|
|
Examples::
|
|
|
|
|
|
|
|
>>> sum(i*i for i in range(10)) # sum of squares
|
|
|
|
285
|
|
|
|
|
|
|
|
>>> xvec = [10, 20, 30]
|
|
|
|
>>> yvec = [7, 5, 3]
|
|
|
|
>>> sum(x*y for x,y in zip(xvec, yvec)) # dot product
|
|
|
|
260
|
|
|
|
|
|
|
|
>>> from math import pi, sin
|
|
|
|
>>> sine_table = dict((x, sin(x*pi/180)) for x in range(0, 91))
|
|
|
|
|
|
|
|
>>> unique_words = set(word for line in page for word in line.split())
|
|
|
|
|
|
|
|
>>> valedictorian = max((student.gpa, student.name) for student in graduates)
|
|
|
|
|
|
|
|
>>> data = 'golf'
|
2007-09-03 04:10:24 -03:00
|
|
|
>>> list(data[i] for i in range(len(data)-1, -1, -1))
|
2007-08-15 11:28:22 -03:00
|
|
|
['f', 'l', 'o', 'g']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.. rubric:: Footnotes
|
|
|
|
|
|
|
|
.. [#] Except for one thing. Module objects have a secret read-only attribute called
|
|
|
|
:attr:`__dict__` which returns the dictionary used to implement the module's
|
|
|
|
namespace; the name :attr:`__dict__` is an attribute but not a global name.
|
|
|
|
Obviously, using this violates the abstraction of namespace implementation, and
|
|
|
|
should be restricted to things like post-mortem debuggers.
|
|
|
|
|