mirror of
https://github.com/python/cpython.git
synced 2025-07-29 06:05:00 +00:00
Merged revisions 82262,82269,82434,82480-82481,82484-82485,82487-82488,82594,82599,82615 via svnmerge from
svn+ssh://svn.python.org/python/branches/py3k ................ r82262 | georg.brandl | 2010-06-27 12:17:12 +0200 (So, 27 Jun 2010) | 1 line #9078: fix some Unicode C API descriptions, in comments and docs. ................ r82269 | georg.brandl | 2010-06-27 12:59:19 +0200 (So, 27 Jun 2010) | 1 line Wording fix. ................ r82434 | georg.brandl | 2010-07-02 09:41:51 +0200 (Fr, 02 Jul 2010) | 9 lines Merged revisions 82433 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r82433 | georg.brandl | 2010-07-02 09:33:50 +0200 (Fr, 02 Jul 2010) | 1 line Grammar and markup fixes. ........ ................ r82480 | georg.brandl | 2010-07-03 12:21:50 +0200 (Sa, 03 Jul 2010) | 1 line Wrap and use the correct directive. ................ r82481 | georg.brandl | 2010-07-03 12:22:10 +0200 (Sa, 03 Jul 2010) | 1 line Use the right role. ................ r82484 | georg.brandl | 2010-07-03 12:26:17 +0200 (Sa, 03 Jul 2010) | 9 lines Recorded merge of revisions 82474 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r82474 | georg.brandl | 2010-07-03 10:40:13 +0200 (Sa, 03 Jul 2010) | 1 line Fix role name. ........ ................ r82485 | georg.brandl | 2010-07-03 12:26:54 +0200 (Sa, 03 Jul 2010) | 9 lines Merged revisions 82483 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r82483 | georg.brandl | 2010-07-03 12:25:54 +0200 (Sa, 03 Jul 2010) | 1 line Add link to bytecode docs. ........ ................ r82487 | georg.brandl | 2010-07-03 12:33:26 +0200 (Sa, 03 Jul 2010) | 1 line Fix markup. ................ r82488 | georg.brandl | 2010-07-03 12:41:33 +0200 (Sa, 03 Jul 2010) | 1 line Remove the need for a "()" empty argument list after opcodes. ................ r82594 | georg.brandl | 2010-07-05 22:13:41 +0200 (Mo, 05 Jul 2010) | 1 line Update Vec class constructor, remove indirection via function, use operator module. ................ r82599 | alexander.belopolsky | 2010-07-05 23:44:05 +0200 (Mo, 05 Jul 2010) | 1 line "Modernized" the demo a little. ................ r82615 | georg.brandl | 2010-07-07 00:58:50 +0200 (Mi, 07 Jul 2010) | 1 line Fix typo. ................
This commit is contained in:
parent
16489247aa
commit
c7b6908bb1
9 changed files with 151 additions and 124 deletions
|
@ -1,23 +1,41 @@
|
||||||
# A simple vector class
|
|
||||||
|
|
||||||
|
|
||||||
def vec(*v):
|
|
||||||
return Vec(*v)
|
|
||||||
|
|
||||||
|
|
||||||
class Vec:
|
class Vec:
|
||||||
|
""" A simple vector class
|
||||||
|
|
||||||
|
Instances of the Vec class can be constructed from numbers
|
||||||
|
|
||||||
|
>>> a = Vec(1, 2, 3)
|
||||||
|
>>> b = Vec(3, 2, 1)
|
||||||
|
|
||||||
|
added
|
||||||
|
>>> a + b
|
||||||
|
Vec(4, 4, 4)
|
||||||
|
|
||||||
|
subtracted
|
||||||
|
>>> a - b
|
||||||
|
Vec(-2, 0, 2)
|
||||||
|
|
||||||
|
and multiplied by a scalar on the left
|
||||||
|
>>> 3.0 * a
|
||||||
|
Vec(3.0, 6.0, 9.0)
|
||||||
|
|
||||||
|
or on the right
|
||||||
|
>>> a * 3.0
|
||||||
|
Vec(3.0, 6.0, 9.0)
|
||||||
|
"""
|
||||||
def __init__(self, *v):
|
def __init__(self, *v):
|
||||||
self.v = list(v)
|
self.v = list(v)
|
||||||
|
|
||||||
def fromlist(self, v):
|
@classmethod
|
||||||
|
def fromlist(cls, v):
|
||||||
if not isinstance(v, list):
|
if not isinstance(v, list):
|
||||||
raise TypeError
|
raise TypeError
|
||||||
self.v = v[:]
|
inst = cls()
|
||||||
return self
|
inst.v = v
|
||||||
|
return inst
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return 'vec(' + repr(self.v)[1:-1] + ')'
|
args = ', '.join(repr(x) for x in self.v)
|
||||||
|
return 'Vec({})'.format(args)
|
||||||
|
|
||||||
def __len__(self):
|
def __len__(self):
|
||||||
return len(self.v)
|
return len(self.v)
|
||||||
|
@ -27,28 +45,24 @@ class Vec:
|
||||||
|
|
||||||
def __add__(self, other):
|
def __add__(self, other):
|
||||||
# Element-wise addition
|
# Element-wise addition
|
||||||
v = list(map(lambda x, y: x+y, self, other))
|
v = [x + y for x, y in zip(self.v, other.v)]
|
||||||
return Vec().fromlist(v)
|
return Vec.fromlist(v)
|
||||||
|
|
||||||
def __sub__(self, other):
|
def __sub__(self, other):
|
||||||
# Element-wise subtraction
|
# Element-wise subtraction
|
||||||
v = list(map(lambda x, y: x-y, self, other))
|
v = [x - y for x, y in zip(self.v, other.v)]
|
||||||
return Vec().fromlist(v)
|
return Vec.fromlist(v)
|
||||||
|
|
||||||
def __mul__(self, scalar):
|
def __mul__(self, scalar):
|
||||||
# Multiply by scalar
|
# Multiply by scalar
|
||||||
v = [x*scalar for x in self.v]
|
v = [x * scalar for x in self.v]
|
||||||
return Vec().fromlist(v)
|
return Vec.fromlist(v)
|
||||||
|
|
||||||
|
__rmul__ = __mul__
|
||||||
|
|
||||||
|
|
||||||
def test():
|
def test():
|
||||||
a = vec(1, 2, 3)
|
import doctest
|
||||||
b = vec(3, 2, 1)
|
doctest.testmod()
|
||||||
print(a)
|
|
||||||
print(b)
|
|
||||||
print(a+b)
|
|
||||||
print(a-b)
|
|
||||||
print(a*3.0)
|
|
||||||
|
|
||||||
test()
|
test()
|
||||||
|
|
|
@ -328,10 +328,10 @@ APIs:
|
||||||
Coerce an encoded object *obj* to an Unicode object and return a reference with
|
Coerce an encoded object *obj* to an Unicode object and return a reference with
|
||||||
incremented refcount.
|
incremented refcount.
|
||||||
|
|
||||||
String and other char buffer compatible objects are decoded according to the
|
:class:`bytes`, :class:`bytearray` and other char buffer compatible objects
|
||||||
given encoding and using the error handling defined by errors. Both can be
|
are decoded according to the given encoding and using the error handling
|
||||||
*NULL* to have the interface use the default values (see the next section for
|
defined by errors. Both can be *NULL* to have the interface use the default
|
||||||
details).
|
values (see the next section for details).
|
||||||
|
|
||||||
All other objects, including Unicode objects, cause a :exc:`TypeError` to be
|
All other objects, including Unicode objects, cause a :exc:`TypeError` to be
|
||||||
set.
|
set.
|
||||||
|
|
|
@ -63,6 +63,9 @@ Glossary
|
||||||
"intermediate language" is said to run on a :term:`virtual machine`
|
"intermediate language" is said to run on a :term:`virtual machine`
|
||||||
that executes the machine code corresponding to each bytecode.
|
that executes the machine code corresponding to each bytecode.
|
||||||
|
|
||||||
|
A list of bytecode instructions can be found in the documentation for
|
||||||
|
:ref:`the dis module <bytecodes>`.
|
||||||
|
|
||||||
class
|
class
|
||||||
A template for creating user-defined objects. Class definitions
|
A template for creating user-defined objects. Class definitions
|
||||||
normally contain method definitions which operate on instances of the
|
normally contain method definitions which operate on instances of the
|
||||||
|
|
|
@ -17,6 +17,7 @@ and the interpreter.
|
||||||
between versions of Python. Use of this module should not be considered to
|
between versions of Python. Use of this module should not be considered to
|
||||||
work across Python VMs or Python releases.
|
work across Python VMs or Python releases.
|
||||||
|
|
||||||
|
|
||||||
Example: Given the function :func:`myfunc`::
|
Example: Given the function :func:`myfunc`::
|
||||||
|
|
||||||
def myfunc(alist):
|
def myfunc(alist):
|
||||||
|
@ -37,23 +38,27 @@ The :mod:`dis` module defines the following functions and constants:
|
||||||
|
|
||||||
.. function:: dis(x=None)
|
.. function:: dis(x=None)
|
||||||
|
|
||||||
Disassemble the *x* object. *x* can denote either a module, a
|
Disassemble the *x* object. *x* can denote either a module, a
|
||||||
class, a method, a function, or a code object. For a module, it disassembles
|
class, a method, a function, a code object, a string of source code or a
|
||||||
all functions. For a class, it disassembles all methods. For a single code
|
byte sequence of raw bytecode. For a module, it disassembles all
|
||||||
sequence, it prints one line per bytecode instruction. If no object is
|
functions. For a class, it disassembles all methods. For a code object
|
||||||
provided, it disassembles the last traceback.
|
or sequence of raw bytecode, it prints one line per bytecode instruction.
|
||||||
|
Strings are first compiled to code objects with the :func:`compile`
|
||||||
|
built-in function before being disassembled. If no object is provided,
|
||||||
|
this function disassembles the last traceback.
|
||||||
|
|
||||||
|
|
||||||
.. function:: distb(tb=None)
|
.. function:: distb(tb=None)
|
||||||
|
|
||||||
Disassembles the top-of-stack function of a traceback, using the last traceback
|
Disassemble the top-of-stack function of a traceback, using the last
|
||||||
if none was passed. The instruction causing the exception is indicated.
|
traceback if none was passed. The instruction causing the exception is
|
||||||
|
indicated.
|
||||||
|
|
||||||
|
|
||||||
.. function:: disassemble(code, lasti=-1)
|
.. function:: disassemble(code, lasti=-1)
|
||||||
disco(code, lasti=-1)
|
disco(code, lasti=-1)
|
||||||
|
|
||||||
Disassembles a code object, indicating the last instruction if *lasti* was
|
Disassemble a code object, indicating the last instruction if *lasti* was
|
||||||
provided. The output is divided in the following columns:
|
provided. The output is divided in the following columns:
|
||||||
|
|
||||||
#. the line number, for the first instruction of each line
|
#. the line number, for the first instruction of each line
|
||||||
|
@ -139,225 +144,233 @@ Python Bytecode Instructions
|
||||||
The Python compiler currently generates the following bytecode instructions.
|
The Python compiler currently generates the following bytecode instructions.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: STOP_CODE ()
|
**General instructions**
|
||||||
|
|
||||||
|
.. opcode:: STOP_CODE
|
||||||
|
|
||||||
Indicates end-of-code to the compiler, not used by the interpreter.
|
Indicates end-of-code to the compiler, not used by the interpreter.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: NOP ()
|
.. opcode:: NOP
|
||||||
|
|
||||||
Do nothing code. Used as a placeholder by the bytecode optimizer.
|
Do nothing code. Used as a placeholder by the bytecode optimizer.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: POP_TOP ()
|
.. opcode:: POP_TOP
|
||||||
|
|
||||||
Removes the top-of-stack (TOS) item.
|
Removes the top-of-stack (TOS) item.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: ROT_TWO ()
|
.. opcode:: ROT_TWO
|
||||||
|
|
||||||
Swaps the two top-most stack items.
|
Swaps the two top-most stack items.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: ROT_THREE ()
|
.. opcode:: ROT_THREE
|
||||||
|
|
||||||
Lifts second and third stack item one position up, moves top down to position
|
Lifts second and third stack item one position up, moves top down to position
|
||||||
three.
|
three.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: ROT_FOUR ()
|
.. opcode:: ROT_FOUR
|
||||||
|
|
||||||
Lifts second, third and forth stack item one position up, moves top down to
|
Lifts second, third and forth stack item one position up, moves top down to
|
||||||
position four.
|
position four.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: DUP_TOP ()
|
.. opcode:: DUP_TOP
|
||||||
|
|
||||||
Duplicates the reference on top of the stack.
|
Duplicates the reference on top of the stack.
|
||||||
|
|
||||||
Unary Operations take the top of the stack, apply the operation, and push the
|
|
||||||
|
**Unary operations**
|
||||||
|
|
||||||
|
Unary operations take the top of the stack, apply the operation, and push the
|
||||||
result back on the stack.
|
result back on the stack.
|
||||||
|
|
||||||
|
.. opcode:: UNARY_POSITIVE
|
||||||
.. opcode:: UNARY_POSITIVE ()
|
|
||||||
|
|
||||||
Implements ``TOS = +TOS``.
|
Implements ``TOS = +TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: UNARY_NEGATIVE ()
|
.. opcode:: UNARY_NEGATIVE
|
||||||
|
|
||||||
Implements ``TOS = -TOS``.
|
Implements ``TOS = -TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: UNARY_NOT ()
|
.. opcode:: UNARY_NOT
|
||||||
|
|
||||||
Implements ``TOS = not TOS``.
|
Implements ``TOS = not TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: UNARY_INVERT ()
|
.. opcode:: UNARY_INVERT
|
||||||
|
|
||||||
Implements ``TOS = ~TOS``.
|
Implements ``TOS = ~TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: GET_ITER ()
|
.. opcode:: GET_ITER
|
||||||
|
|
||||||
Implements ``TOS = iter(TOS)``.
|
Implements ``TOS = iter(TOS)``.
|
||||||
|
|
||||||
|
|
||||||
|
**Binary operations**
|
||||||
|
|
||||||
Binary operations remove the top of the stack (TOS) and the second top-most
|
Binary operations remove the top of the stack (TOS) and the second top-most
|
||||||
stack item (TOS1) from the stack. They perform the operation, and put the
|
stack item (TOS1) from the stack. They perform the operation, and put the
|
||||||
result back on the stack.
|
result back on the stack.
|
||||||
|
|
||||||
|
.. opcode:: BINARY_POWER
|
||||||
.. opcode:: BINARY_POWER ()
|
|
||||||
|
|
||||||
Implements ``TOS = TOS1 ** TOS``.
|
Implements ``TOS = TOS1 ** TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: BINARY_MULTIPLY ()
|
.. opcode:: BINARY_MULTIPLY
|
||||||
|
|
||||||
Implements ``TOS = TOS1 * TOS``.
|
Implements ``TOS = TOS1 * TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: BINARY_FLOOR_DIVIDE ()
|
.. opcode:: BINARY_FLOOR_DIVIDE
|
||||||
|
|
||||||
Implements ``TOS = TOS1 // TOS``.
|
Implements ``TOS = TOS1 // TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: BINARY_TRUE_DIVIDE ()
|
.. opcode:: BINARY_TRUE_DIVIDE
|
||||||
|
|
||||||
Implements ``TOS = TOS1 / TOS``.
|
Implements ``TOS = TOS1 / TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: BINARY_MODULO ()
|
.. opcode:: BINARY_MODULO
|
||||||
|
|
||||||
Implements ``TOS = TOS1 % TOS``.
|
Implements ``TOS = TOS1 % TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: BINARY_ADD ()
|
.. opcode:: BINARY_ADD
|
||||||
|
|
||||||
Implements ``TOS = TOS1 + TOS``.
|
Implements ``TOS = TOS1 + TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: BINARY_SUBTRACT ()
|
.. opcode:: BINARY_SUBTRACT
|
||||||
|
|
||||||
Implements ``TOS = TOS1 - TOS``.
|
Implements ``TOS = TOS1 - TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: BINARY_SUBSCR ()
|
.. opcode:: BINARY_SUBSCR
|
||||||
|
|
||||||
Implements ``TOS = TOS1[TOS]``.
|
Implements ``TOS = TOS1[TOS]``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: BINARY_LSHIFT ()
|
.. opcode:: BINARY_LSHIFT
|
||||||
|
|
||||||
Implements ``TOS = TOS1 << TOS``.
|
Implements ``TOS = TOS1 << TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: BINARY_RSHIFT ()
|
.. opcode:: BINARY_RSHIFT
|
||||||
|
|
||||||
Implements ``TOS = TOS1 >> TOS``.
|
Implements ``TOS = TOS1 >> TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: BINARY_AND ()
|
.. opcode:: BINARY_AND
|
||||||
|
|
||||||
Implements ``TOS = TOS1 & TOS``.
|
Implements ``TOS = TOS1 & TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: BINARY_XOR ()
|
.. opcode:: BINARY_XOR
|
||||||
|
|
||||||
Implements ``TOS = TOS1 ^ TOS``.
|
Implements ``TOS = TOS1 ^ TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: BINARY_OR ()
|
.. opcode:: BINARY_OR
|
||||||
|
|
||||||
Implements ``TOS = TOS1 | TOS``.
|
Implements ``TOS = TOS1 | TOS``.
|
||||||
|
|
||||||
|
|
||||||
|
**In-place operations**
|
||||||
|
|
||||||
In-place operations are like binary operations, in that they remove TOS and
|
In-place operations are like binary operations, in that they remove TOS and
|
||||||
TOS1, and push the result back on the stack, but the operation is done in-place
|
TOS1, and push the result back on the stack, but the operation is done in-place
|
||||||
when TOS1 supports it, and the resulting TOS may be (but does not have to be)
|
when TOS1 supports it, and the resulting TOS may be (but does not have to be)
|
||||||
the original TOS1.
|
the original TOS1.
|
||||||
|
|
||||||
|
.. opcode:: INPLACE_POWER
|
||||||
.. opcode:: INPLACE_POWER ()
|
|
||||||
|
|
||||||
Implements in-place ``TOS = TOS1 ** TOS``.
|
Implements in-place ``TOS = TOS1 ** TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: INPLACE_MULTIPLY ()
|
.. opcode:: INPLACE_MULTIPLY
|
||||||
|
|
||||||
Implements in-place ``TOS = TOS1 * TOS``.
|
Implements in-place ``TOS = TOS1 * TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: INPLACE_FLOOR_DIVIDE ()
|
.. opcode:: INPLACE_FLOOR_DIVIDE
|
||||||
|
|
||||||
Implements in-place ``TOS = TOS1 // TOS``.
|
Implements in-place ``TOS = TOS1 // TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: INPLACE_TRUE_DIVIDE ()
|
.. opcode:: INPLACE_TRUE_DIVIDE
|
||||||
|
|
||||||
Implements in-place ``TOS = TOS1 / TOS``.
|
Implements in-place ``TOS = TOS1 / TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: INPLACE_MODULO ()
|
.. opcode:: INPLACE_MODULO
|
||||||
|
|
||||||
Implements in-place ``TOS = TOS1 % TOS``.
|
Implements in-place ``TOS = TOS1 % TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: INPLACE_ADD ()
|
.. opcode:: INPLACE_ADD
|
||||||
|
|
||||||
Implements in-place ``TOS = TOS1 + TOS``.
|
Implements in-place ``TOS = TOS1 + TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: INPLACE_SUBTRACT ()
|
.. opcode:: INPLACE_SUBTRACT
|
||||||
|
|
||||||
Implements in-place ``TOS = TOS1 - TOS``.
|
Implements in-place ``TOS = TOS1 - TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: INPLACE_LSHIFT ()
|
.. opcode:: INPLACE_LSHIFT
|
||||||
|
|
||||||
Implements in-place ``TOS = TOS1 << TOS``.
|
Implements in-place ``TOS = TOS1 << TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: INPLACE_RSHIFT ()
|
.. opcode:: INPLACE_RSHIFT
|
||||||
|
|
||||||
Implements in-place ``TOS = TOS1 >> TOS``.
|
Implements in-place ``TOS = TOS1 >> TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: INPLACE_AND ()
|
.. opcode:: INPLACE_AND
|
||||||
|
|
||||||
Implements in-place ``TOS = TOS1 & TOS``.
|
Implements in-place ``TOS = TOS1 & TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: INPLACE_XOR ()
|
.. opcode:: INPLACE_XOR
|
||||||
|
|
||||||
Implements in-place ``TOS = TOS1 ^ TOS``.
|
Implements in-place ``TOS = TOS1 ^ TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: INPLACE_OR ()
|
.. opcode:: INPLACE_OR
|
||||||
|
|
||||||
Implements in-place ``TOS = TOS1 | TOS``.
|
Implements in-place ``TOS = TOS1 | TOS``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: STORE_SUBSCR ()
|
.. opcode:: STORE_SUBSCR
|
||||||
|
|
||||||
Implements ``TOS1[TOS] = TOS2``.
|
Implements ``TOS1[TOS] = TOS2``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: DELETE_SUBSCR ()
|
.. opcode:: DELETE_SUBSCR
|
||||||
|
|
||||||
Implements ``del TOS1[TOS]``.
|
Implements ``del TOS1[TOS]``.
|
||||||
|
|
||||||
Miscellaneous opcodes.
|
|
||||||
|
|
||||||
|
**Miscellaneous opcodes**
|
||||||
|
|
||||||
.. opcode:: PRINT_EXPR ()
|
.. opcode:: PRINT_EXPR
|
||||||
|
|
||||||
Implements the expression statement for the interactive mode. TOS is removed
|
Implements the expression statement for the interactive mode. TOS is removed
|
||||||
from the stack and printed. In non-interactive mode, an expression statement is
|
from the stack and printed. In non-interactive mode, an expression statement is
|
||||||
terminated with ``POP_STACK``.
|
terminated with ``POP_STACK``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: BREAK_LOOP ()
|
.. opcode:: BREAK_LOOP
|
||||||
|
|
||||||
Terminates a loop due to a :keyword:`break` statement.
|
Terminates a loop due to a :keyword:`break` statement.
|
||||||
|
|
||||||
|
@ -383,36 +396,35 @@ Miscellaneous opcodes.
|
||||||
Calls ``dict.setitem(TOS1[-i], TOS, TOS1)``. Used to implement dict
|
Calls ``dict.setitem(TOS1[-i], TOS, TOS1)``. Used to implement dict
|
||||||
comprehensions.
|
comprehensions.
|
||||||
|
|
||||||
|
|
||||||
For all of the SET_ADD, LIST_APPEND and MAP_ADD instructions, while the
|
For all of the SET_ADD, LIST_APPEND and MAP_ADD instructions, while the
|
||||||
added value or key/value pair is popped off, the container object remains on
|
added value or key/value pair is popped off, the container object remains on
|
||||||
the stack so that it is available for further iterations of the loop.
|
the stack so that it is available for further iterations of the loop.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: RETURN_VALUE ()
|
.. opcode:: RETURN_VALUE
|
||||||
|
|
||||||
Returns with TOS to the caller of the function.
|
Returns with TOS to the caller of the function.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: YIELD_VALUE ()
|
.. opcode:: YIELD_VALUE
|
||||||
|
|
||||||
Pops ``TOS`` and yields it from a :term:`generator`.
|
Pops ``TOS`` and yields it from a :term:`generator`.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: IMPORT_STAR ()
|
.. opcode:: IMPORT_STAR
|
||||||
|
|
||||||
Loads all symbols not starting with ``'_'`` directly from the module TOS to the
|
Loads all symbols not starting with ``'_'`` directly from the module TOS to the
|
||||||
local namespace. The module is popped after loading all names. This opcode
|
local namespace. The module is popped after loading all names. This opcode
|
||||||
implements ``from module import *``.
|
implements ``from module import *``.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: POP_BLOCK ()
|
.. opcode:: POP_BLOCK
|
||||||
|
|
||||||
Removes one block from the block stack. Per frame, there is a stack of blocks,
|
Removes one block from the block stack. Per frame, there is a stack of blocks,
|
||||||
denoting nested loops, try statements, and such.
|
denoting nested loops, try statements, and such.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: POP_EXCEPT ()
|
.. opcode:: POP_EXCEPT
|
||||||
|
|
||||||
Removes one block from the block stack. The popped block must be an exception
|
Removes one block from the block stack. The popped block must be an exception
|
||||||
handler block, as implicitly created when entering an except handler.
|
handler block, as implicitly created when entering an except handler.
|
||||||
|
@ -420,20 +432,20 @@ the stack so that it is available for further iterations of the loop.
|
||||||
last three popped values are used to restore the exception state.
|
last three popped values are used to restore the exception state.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: END_FINALLY ()
|
.. opcode:: END_FINALLY
|
||||||
|
|
||||||
Terminates a :keyword:`finally` clause. The interpreter recalls whether the
|
Terminates a :keyword:`finally` clause. The interpreter recalls whether the
|
||||||
exception has to be re-raised, or whether the function returns, and continues
|
exception has to be re-raised, or whether the function returns, and continues
|
||||||
with the outer-next block.
|
with the outer-next block.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: LOAD_BUILD_CLASS ()
|
.. opcode:: LOAD_BUILD_CLASS
|
||||||
|
|
||||||
Pushes :func:`builtins.__build_class__` onto the stack. It is later called
|
Pushes :func:`builtins.__build_class__` onto the stack. It is later called
|
||||||
by ``CALL_FUNCTION`` to construct a class.
|
by ``CALL_FUNCTION`` to construct a class.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: WITH_CLEANUP ()
|
.. opcode:: WITH_CLEANUP
|
||||||
|
|
||||||
Cleans up the stack when a :keyword:`with` statement block exits. TOS is
|
Cleans up the stack when a :keyword:`with` statement block exits. TOS is
|
||||||
the context manager's :meth:`__exit__` bound method. Below TOS are 1--3
|
the context manager's :meth:`__exit__` bound method. Below TOS are 1--3
|
||||||
|
@ -643,7 +655,7 @@ the more significant byte last.
|
||||||
Pushes a try block from a try-except clause onto the block stack. *delta* points
|
Pushes a try block from a try-except clause onto the block stack. *delta* points
|
||||||
to the finally block.
|
to the finally block.
|
||||||
|
|
||||||
.. opcode:: STORE_MAP ()
|
.. opcode:: STORE_MAP
|
||||||
|
|
||||||
Store a key and value pair in a dictionary. Pops the key and value while leaving
|
Store a key and value pair in a dictionary. Pops the key and value while leaving
|
||||||
the dictionary on the stack.
|
the dictionary on the stack.
|
||||||
|
@ -759,7 +771,7 @@ the more significant byte last.
|
||||||
variable-arguments tuple, followed by explicit keyword and positional arguments.
|
variable-arguments tuple, followed by explicit keyword and positional arguments.
|
||||||
|
|
||||||
|
|
||||||
.. opcode:: HAVE_ARGUMENT ()
|
.. opcode:: HAVE_ARGUMENT
|
||||||
|
|
||||||
This is not really an opcode. It identifies the dividing line between opcodes
|
This is not really an opcode. It identifies the dividing line between opcodes
|
||||||
which don't take arguments ``< HAVE_ARGUMENT`` and those which do ``>=
|
which don't take arguments ``< HAVE_ARGUMENT`` and those which do ``>=
|
||||||
|
|
|
@ -284,30 +284,30 @@ of which this module provides three different variants:
|
||||||
For example usage, see the implementation of the :func:`test` function
|
For example usage, see the implementation of the :func:`test` function
|
||||||
invocation in the :mod:`http.server` module.
|
invocation in the :mod:`http.server` module.
|
||||||
|
|
||||||
The :class:`SimpleHTTPRequestHandler` class can be invoked the following manner
|
|
||||||
with the :mod:`http.server` to create a very basic webserver serving files
|
|
||||||
relative to the current directory.::
|
|
||||||
|
|
||||||
import http.server
|
The :class:`SimpleHTTPRequestHandler` class can be used in the following
|
||||||
import socketserver
|
manner in order to create a very basic webserver serving files relative to
|
||||||
|
the current directory. ::
|
||||||
|
|
||||||
PORT = 8000
|
import http.server
|
||||||
|
import socketserver
|
||||||
|
|
||||||
Handler = http.server.SimpleHTTPRequestHandler
|
PORT = 8000
|
||||||
|
|
||||||
httpd = socketserver.TCPServer(("", PORT), Handler)
|
Handler = http.server.SimpleHTTPRequestHandler
|
||||||
|
|
||||||
print("serving at port", PORT)
|
httpd = socketserver.TCPServer(("", PORT), Handler)
|
||||||
httpd.serve_forever()
|
|
||||||
|
|
||||||
:mod:`http.server` can also be invoked directly using the ``-m`` switch of
|
print("serving at port", PORT)
|
||||||
interpreter a with ``port number`` argument which uses
|
httpd.serve_forever()
|
||||||
:class:`SimpleHTTPRequestHandler` as the default request Handler. Similar to
|
|
||||||
the previous example, even this serves files relative to the current
|
:mod:`http.server` can also be invoked directly using the :option:`-m`
|
||||||
directory.::
|
switch of the interpreter a with ``port number`` argument. Similar to
|
||||||
|
the previous example, this serves files relative to the current directory. ::
|
||||||
|
|
||||||
python -m http.server 8000
|
python -m http.server 8000
|
||||||
|
|
||||||
|
|
||||||
.. class:: CGIHTTPRequestHandler(request, client_address, server)
|
.. class:: CGIHTTPRequestHandler(request, client_address, server)
|
||||||
|
|
||||||
This class is used to serve either files or output of CGI scripts from the
|
This class is used to serve either files or output of CGI scripts from the
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
Sphinx extension with Python doc-specific markup.
|
Sphinx extension with Python doc-specific markup.
|
||||||
|
|
||||||
:copyright: 2008, 2009 by Georg Brandl.
|
:copyright: 2008, 2009, 2010 by Georg Brandl.
|
||||||
:license: Python license.
|
:license: Python license.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -149,7 +149,7 @@ import suspicious
|
||||||
import re
|
import re
|
||||||
from sphinx import addnodes
|
from sphinx import addnodes
|
||||||
|
|
||||||
opcode_sig_re = re.compile(r'(\w+(?:\+\d)?)\s*\((.*)\)')
|
opcode_sig_re = re.compile(r'(\w+(?:\+\d)?)(?:\s*\((.*)\))?')
|
||||||
|
|
||||||
def parse_opcode_signature(env, sig, signode):
|
def parse_opcode_signature(env, sig, signode):
|
||||||
"""Transform an opcode signature into RST nodes."""
|
"""Transform an opcode signature into RST nodes."""
|
||||||
|
@ -158,9 +158,10 @@ def parse_opcode_signature(env, sig, signode):
|
||||||
raise ValueError
|
raise ValueError
|
||||||
opname, arglist = m.groups()
|
opname, arglist = m.groups()
|
||||||
signode += addnodes.desc_name(opname, opname)
|
signode += addnodes.desc_name(opname, opname)
|
||||||
paramlist = addnodes.desc_parameterlist()
|
if arglist is not None:
|
||||||
signode += paramlist
|
paramlist = addnodes.desc_parameterlist()
|
||||||
paramlist += addnodes.desc_parameter(arglist, arglist)
|
signode += paramlist
|
||||||
|
paramlist += addnodes.desc_parameter(arglist, arglist)
|
||||||
return opname.strip()
|
return opname.strip()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,6 @@ The :func:`range` Function
|
||||||
If you do need to iterate over a sequence of numbers, the built-in function
|
If you do need to iterate over a sequence of numbers, the built-in function
|
||||||
:func:`range` comes in handy. It generates arithmetic progressions::
|
:func:`range` comes in handy. It generates arithmetic progressions::
|
||||||
|
|
||||||
|
|
||||||
>>> for i in range(5):
|
>>> for i in range(5):
|
||||||
... print(i)
|
... print(i)
|
||||||
...
|
...
|
||||||
|
@ -97,9 +96,7 @@ If you do need to iterate over a sequence of numbers, the built-in function
|
||||||
3
|
3
|
||||||
4
|
4
|
||||||
|
|
||||||
|
The given end point is never part of the generated sequence; ``range(10)`` generates
|
||||||
|
|
||||||
The given end point is never part of the generated list; ``range(10)`` generates
|
|
||||||
10 values, the legal indices for items of a sequence of length 10. It
|
10 values, the legal indices for items of a sequence of length 10. It
|
||||||
is possible to let the range start at another number, or to specify a different
|
is possible to let the range start at another number, or to specify a different
|
||||||
increment (even negative; sometimes this is called the 'step')::
|
increment (even negative; sometimes this is called the 'step')::
|
||||||
|
|
|
@ -58,7 +58,7 @@ source.
|
||||||
|
|
||||||
.. cmdoption:: -c <command>
|
.. cmdoption:: -c <command>
|
||||||
|
|
||||||
Execute the Python code in *command*. *command* can be one ore more
|
Execute the Python code in *command*. *command* can be one or more
|
||||||
statements separated by newlines, with significant leading whitespace as in
|
statements separated by newlines, with significant leading whitespace as in
|
||||||
normal module code.
|
normal module code.
|
||||||
|
|
||||||
|
|
|
@ -496,14 +496,14 @@ PyAPI_FUNC(PyObject*) PyUnicode_FromUnicode(
|
||||||
Py_ssize_t size /* size of buffer */
|
Py_ssize_t size /* size of buffer */
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Similar to PyUnicode_FromUnicode(), but u points to Latin-1 encoded bytes */
|
/* Similar to PyUnicode_FromUnicode(), but u points to UTF-8 encoded bytes */
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_FromStringAndSize(
|
PyAPI_FUNC(PyObject*) PyUnicode_FromStringAndSize(
|
||||||
const char *u, /* char buffer */
|
const char *u, /* char buffer */
|
||||||
Py_ssize_t size /* size of buffer */
|
Py_ssize_t size /* size of buffer */
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Similar to PyUnicode_FromUnicode(), but u points to null-terminated
|
/* Similar to PyUnicode_FromUnicode(), but u points to null-terminated
|
||||||
Latin-1 encoded bytes */
|
UTF-8 encoded bytes */
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_FromString(
|
PyAPI_FUNC(PyObject*) PyUnicode_FromString(
|
||||||
const char *u /* string */
|
const char *u /* string */
|
||||||
);
|
);
|
||||||
|
@ -548,7 +548,7 @@ PyAPI_FUNC(int) PyUnicode_Resize(
|
||||||
|
|
||||||
Coercion is done in the following way:
|
Coercion is done in the following way:
|
||||||
|
|
||||||
1. String and other char buffer compatible objects are decoded
|
1. bytes, bytearray and other char buffer compatible objects are decoded
|
||||||
under the assumptions that they contain data using the current
|
under the assumptions that they contain data using the current
|
||||||
default encoding. Decoding is done in "strict" mode.
|
default encoding. Decoding is done in "strict" mode.
|
||||||
|
|
||||||
|
@ -572,7 +572,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_FromEncodedObject(
|
||||||
Unicode objects are passed back as-is (subclasses are converted to
|
Unicode objects are passed back as-is (subclasses are converted to
|
||||||
true Unicode objects), all other objects are delegated to
|
true Unicode objects), all other objects are delegated to
|
||||||
PyUnicode_FromEncodedObject(obj, NULL, "strict") which results in
|
PyUnicode_FromEncodedObject(obj, NULL, "strict") which results in
|
||||||
using the default encoding as basis for decoding the object.
|
using UTF-8 encoding as basis for decoding the object.
|
||||||
|
|
||||||
The API returns NULL in case of an error. The caller is responsible
|
The API returns NULL in case of an error. The caller is responsible
|
||||||
for decref'ing the returned objects.
|
for decref'ing the returned objects.
|
||||||
|
@ -604,7 +604,7 @@ PyAPI_FUNC(void) _Py_ReleaseInternedUnicodeStrings(void);
|
||||||
|
|
||||||
#ifdef HAVE_WCHAR_H
|
#ifdef HAVE_WCHAR_H
|
||||||
|
|
||||||
/* Create a Unicode Object from the whcar_t buffer w of the given
|
/* Create a Unicode Object from the wchar_t buffer w of the given
|
||||||
size.
|
size.
|
||||||
|
|
||||||
The buffer is copied into the new object. */
|
The buffer is copied into the new object. */
|
||||||
|
@ -663,7 +663,7 @@ PyAPI_FUNC(int) PyUnicode_ClearFreeList(void);
|
||||||
parameters encoding and errors have the same semantics as the ones
|
parameters encoding and errors have the same semantics as the ones
|
||||||
of the builtin unicode() API.
|
of the builtin unicode() API.
|
||||||
|
|
||||||
Setting encoding to NULL causes the default encoding to be used.
|
Setting encoding to NULL causes the default encoding (UTF-8) to be used.
|
||||||
|
|
||||||
Error handling is set by errors which may also be set to NULL
|
Error handling is set by errors which may also be set to NULL
|
||||||
meaning to use the default handling defined for the codec. Default
|
meaning to use the default handling defined for the codec. Default
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue