mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			645 lines
		
	
	
	
		
			20 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			645 lines
		
	
	
	
		
			20 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
.. _tut-informal:
 | 
						|
 | 
						|
**********************************
 | 
						|
An Informal Introduction to Python
 | 
						|
**********************************
 | 
						|
 | 
						|
In the following examples, input and output are distinguished by the presence or
 | 
						|
absence of prompts (``>>>`` and ``...``): to repeat the example, you must type
 | 
						|
everything after the prompt, when the prompt appears; lines that do not begin
 | 
						|
with a prompt are output from the interpreter. Note that a secondary prompt on a
 | 
						|
line by itself in an example means you must type a blank line; this is used to
 | 
						|
end a multi-line command.
 | 
						|
 | 
						|
.. % 
 | 
						|
.. % \footnote{
 | 
						|
.. % I'd prefer to use different fonts to distinguish input
 | 
						|
.. % from output, but the amount of LaTeX hacking that would require
 | 
						|
.. % is currently beyond my ability.
 | 
						|
.. % }
 | 
						|
 | 
						|
Many of the examples in this manual, even those entered at the interactive
 | 
						|
prompt, include comments.  Comments in Python start with the hash character,
 | 
						|
``'#'``, and extend to the end of the physical line.  A comment may appear at
 | 
						|
the start of a line or following whitespace or code, but not within a string
 | 
						|
literal.  A hash  character within a string literal is just a hash character.
 | 
						|
 | 
						|
Some examples::
 | 
						|
 | 
						|
   # this is the first comment
 | 
						|
   SPAM = 1                 # and this is the second comment
 | 
						|
                            # ... and now a third!
 | 
						|
   STRING = "# This is not a comment."
 | 
						|
 | 
						|
 | 
						|
.. _tut-calculator:
 | 
						|
 | 
						|
Using Python as a Calculator
 | 
						|
============================
 | 
						|
 | 
						|
Let's try some simple Python commands.  Start the interpreter and wait for the
 | 
						|
primary prompt, ``>>>``.  (It shouldn't take long.)
 | 
						|
 | 
						|
 | 
						|
.. _tut-numbers:
 | 
						|
 | 
						|
Numbers
 | 
						|
-------
 | 
						|
 | 
						|
The interpreter acts as a simple calculator: you can type an expression at it
 | 
						|
and it will write the value.  Expression syntax is straightforward: the
 | 
						|
operators ``+``, ``-``, ``*`` and ``/`` work just like in most other languages
 | 
						|
(for example, Pascal or C); parentheses can be used for grouping.  For example::
 | 
						|
 | 
						|
   >>> 2+2
 | 
						|
   4
 | 
						|
   >>> # This is a comment
 | 
						|
   ... 2+2
 | 
						|
   4
 | 
						|
   >>> 2+2  # and a comment on the same line as code
 | 
						|
   4
 | 
						|
   >>> (50-5*6)/4
 | 
						|
   5
 | 
						|
   >>> # Integer division returns the floor:
 | 
						|
   ... 7/3
 | 
						|
   2
 | 
						|
   >>> 7/-3
 | 
						|
   -3
 | 
						|
 | 
						|
The equal sign (``'='``) is used to assign a value to a variable. Afterwards, no
 | 
						|
result is displayed before the next interactive prompt::
 | 
						|
 | 
						|
   >>> width = 20
 | 
						|
   >>> height = 5*9
 | 
						|
   >>> width * height
 | 
						|
   900
 | 
						|
 | 
						|
A value can be assigned to several variables simultaneously::
 | 
						|
 | 
						|
   >>> x = y = z = 0  # Zero x, y and z
 | 
						|
   >>> x
 | 
						|
   0
 | 
						|
   >>> y
 | 
						|
   0
 | 
						|
   >>> z
 | 
						|
   0
 | 
						|
 | 
						|
There is full support for floating point; operators with mixed type operands
 | 
						|
convert the integer operand to floating point::
 | 
						|
 | 
						|
   >>> 3 * 3.75 / 1.5
 | 
						|
   7.5
 | 
						|
   >>> 7.0 / 2
 | 
						|
   3.5
 | 
						|
 | 
						|
Complex numbers are also supported; imaginary numbers are written with a suffix
 | 
						|
of ``j`` or ``J``.  Complex numbers with a nonzero real component are written as
 | 
						|
``(real+imagj)``, or can be created with the ``complex(real, imag)`` function.
 | 
						|
::
 | 
						|
 | 
						|
   >>> 1j * 1J
 | 
						|
   (-1+0j)
 | 
						|
   >>> 1j * complex(0,1)
 | 
						|
   (-1+0j)
 | 
						|
   >>> 3+1j*3
 | 
						|
   (3+3j)
 | 
						|
   >>> (3+1j)*3
 | 
						|
   (9+3j)
 | 
						|
   >>> (1+2j)/(1+1j)
 | 
						|
   (1.5+0.5j)
 | 
						|
 | 
						|
Complex numbers are always represented as two floating point numbers, the real
 | 
						|
and imaginary part.  To extract these parts from a complex number *z*, use
 | 
						|
``z.real`` and ``z.imag``.   ::
 | 
						|
 | 
						|
   >>> a=1.5+0.5j
 | 
						|
   >>> a.real
 | 
						|
   1.5
 | 
						|
   >>> a.imag
 | 
						|
   0.5
 | 
						|
 | 
						|
The conversion functions to floating point and integer (:func:`float`,
 | 
						|
:func:`int` and :func:`long`) don't work for complex numbers --- there is no one
 | 
						|
correct way to convert a complex number to a real number.  Use ``abs(z)`` to get
 | 
						|
its magnitude (as a float) or ``z.real`` to get its real part. ::
 | 
						|
 | 
						|
   >>> a=3.0+4.0j
 | 
						|
   >>> float(a)
 | 
						|
   Traceback (most recent call last):
 | 
						|
     File "<stdin>", line 1, in ?
 | 
						|
   TypeError: can't convert complex to float; use abs(z)
 | 
						|
   >>> a.real
 | 
						|
   3.0
 | 
						|
   >>> a.imag
 | 
						|
   4.0
 | 
						|
   >>> abs(a)  # sqrt(a.real**2 + a.imag**2)
 | 
						|
   5.0
 | 
						|
   >>>
 | 
						|
 | 
						|
In interactive mode, the last printed expression is assigned to the variable
 | 
						|
``_``.  This means that when you are using Python as a desk calculator, it is
 | 
						|
somewhat easier to continue calculations, for example::
 | 
						|
 | 
						|
   >>> tax = 12.5 / 100
 | 
						|
   >>> price = 100.50
 | 
						|
   >>> price * tax
 | 
						|
   12.5625
 | 
						|
   >>> price + _
 | 
						|
   113.0625
 | 
						|
   >>> round(_, 2)
 | 
						|
   113.06
 | 
						|
   >>>
 | 
						|
 | 
						|
This variable should be treated as read-only by the user.  Don't explicitly
 | 
						|
assign a value to it --- you would create an independent local variable with the
 | 
						|
same name masking the built-in variable with its magic behavior.
 | 
						|
 | 
						|
 | 
						|
.. _tut-strings:
 | 
						|
 | 
						|
Strings
 | 
						|
-------
 | 
						|
 | 
						|
Besides numbers, Python can also manipulate strings, which can be expressed in
 | 
						|
several ways.  They can be enclosed in single quotes or double quotes::
 | 
						|
 | 
						|
   >>> 'spam eggs'
 | 
						|
   'spam eggs'
 | 
						|
   >>> 'doesn\'t'
 | 
						|
   "doesn't"
 | 
						|
   >>> "doesn't"
 | 
						|
   "doesn't"
 | 
						|
   >>> '"Yes," he said.'
 | 
						|
   '"Yes," he said.'
 | 
						|
   >>> "\"Yes,\" he said."
 | 
						|
   '"Yes," he said.'
 | 
						|
   >>> '"Isn\'t," she said.'
 | 
						|
   '"Isn\'t," she said.'
 | 
						|
 | 
						|
String literals can span multiple lines in several ways.  Continuation lines can
 | 
						|
be used, with a backslash as the last character on the line indicating that the
 | 
						|
next line is a logical continuation of the line::
 | 
						|
 | 
						|
   hello = "This is a rather long string containing\n\
 | 
						|
   several lines of text just as you would do in C.\n\
 | 
						|
       Note that whitespace at the beginning of the line is\
 | 
						|
    significant."
 | 
						|
 | 
						|
   print hello
 | 
						|
 | 
						|
Note that newlines still need to be embedded in the string using ``\n``; the
 | 
						|
newline following the trailing backslash is discarded.  This example would print
 | 
						|
the following::
 | 
						|
 | 
						|
   This is a rather long string containing
 | 
						|
   several lines of text just as you would do in C.
 | 
						|
       Note that whitespace at the beginning of the line is significant.
 | 
						|
 | 
						|
If we make the string literal a "raw" string, however, the ``\n`` sequences are
 | 
						|
not converted to newlines, but the backslash at the end of the line, and the
 | 
						|
newline character in the source, are both included in the string as data.  Thus,
 | 
						|
the example::
 | 
						|
 | 
						|
   hello = r"This is a rather long string containing\n\
 | 
						|
   several lines of text much as you would do in C."
 | 
						|
 | 
						|
   print hello
 | 
						|
 | 
						|
would print::
 | 
						|
 | 
						|
   This is a rather long string containing\n\
 | 
						|
   several lines of text much as you would do in C.
 | 
						|
 | 
						|
Or, strings can be surrounded in a pair of matching triple-quotes: ``"""`` or
 | 
						|
``'''``.  End of lines do not need to be escaped when using triple-quotes, but
 | 
						|
they will be included in the string. ::
 | 
						|
 | 
						|
   print """
 | 
						|
   Usage: thingy [OPTIONS] 
 | 
						|
        -h                        Display this usage message
 | 
						|
        -H hostname               Hostname to connect to
 | 
						|
   """
 | 
						|
 | 
						|
produces the following output::
 | 
						|
 | 
						|
   Usage: thingy [OPTIONS] 
 | 
						|
        -h                        Display this usage message
 | 
						|
        -H hostname               Hostname to connect to
 | 
						|
 | 
						|
The interpreter prints the result of string operations in the same way as they
 | 
						|
are typed for input: inside quotes, and with quotes and other funny characters
 | 
						|
escaped by backslashes, to show the precise value.  The string is enclosed in
 | 
						|
double quotes if the string contains a single quote and no double quotes, else
 | 
						|
it's enclosed in single quotes.  (The :keyword:`print` statement, described
 | 
						|
later, can be used to write strings without quotes or escapes.)
 | 
						|
 | 
						|
Strings can be concatenated (glued together) with the ``+`` operator, and
 | 
						|
repeated with ``*``::
 | 
						|
 | 
						|
   >>> word = 'Help' + 'A'
 | 
						|
   >>> word
 | 
						|
   'HelpA'
 | 
						|
   >>> '<' + word*5 + '>'
 | 
						|
   '<HelpAHelpAHelpAHelpAHelpA>'
 | 
						|
 | 
						|
Two string literals next to each other are automatically concatenated; the first
 | 
						|
line above could also have been written ``word = 'Help' 'A'``; this only works
 | 
						|
with two literals, not with arbitrary string expressions::
 | 
						|
 | 
						|
   >>> 'str' 'ing'                   #  <-  This is ok
 | 
						|
   'string'
 | 
						|
   >>> 'str'.strip() + 'ing'   #  <-  This is ok
 | 
						|
   'string'
 | 
						|
   >>> 'str'.strip() 'ing'     #  <-  This is invalid
 | 
						|
     File "<stdin>", line 1, in ?
 | 
						|
       'str'.strip() 'ing'
 | 
						|
                         ^
 | 
						|
   SyntaxError: invalid syntax
 | 
						|
 | 
						|
Strings can be subscripted (indexed); like in C, the first character of a string
 | 
						|
has subscript (index) 0.  There is no separate character type; a character is
 | 
						|
simply a string of size one.  Like in Icon, substrings can be specified with the
 | 
						|
*slice notation*: two indices separated by a colon. ::
 | 
						|
 | 
						|
   >>> word[4]
 | 
						|
   'A'
 | 
						|
   >>> word[0:2]
 | 
						|
   'He'
 | 
						|
   >>> word[2:4]
 | 
						|
   'lp'
 | 
						|
 | 
						|
Slice indices have useful defaults; an omitted first index defaults to zero, an
 | 
						|
omitted second index defaults to the size of the string being sliced. ::
 | 
						|
 | 
						|
   >>> word[:2]    # The first two characters
 | 
						|
   'He'
 | 
						|
   >>> word[2:]    # Everything except the first two characters
 | 
						|
   'lpA'
 | 
						|
 | 
						|
Unlike a C string, Python strings cannot be changed.  Assigning to an  indexed
 | 
						|
position in the string results in an error::
 | 
						|
 | 
						|
   >>> word[0] = 'x'
 | 
						|
   Traceback (most recent call last):
 | 
						|
     File "<stdin>", line 1, in ?
 | 
						|
   TypeError: object doesn't support item assignment
 | 
						|
   >>> word[:1] = 'Splat'
 | 
						|
   Traceback (most recent call last):
 | 
						|
     File "<stdin>", line 1, in ?
 | 
						|
   TypeError: object doesn't support slice assignment
 | 
						|
 | 
						|
However, creating a new string with the combined content is easy and efficient::
 | 
						|
 | 
						|
   >>> 'x' + word[1:]
 | 
						|
   'xelpA'
 | 
						|
   >>> 'Splat' + word[4]
 | 
						|
   'SplatA'
 | 
						|
 | 
						|
Here's a useful invariant of slice operations: ``s[:i] + s[i:]`` equals ``s``.
 | 
						|
::
 | 
						|
 | 
						|
   >>> word[:2] + word[2:]
 | 
						|
   'HelpA'
 | 
						|
   >>> word[:3] + word[3:]
 | 
						|
   'HelpA'
 | 
						|
 | 
						|
Degenerate slice indices are handled gracefully: an index that is too large is
 | 
						|
replaced by the string size, an upper bound smaller than the lower bound returns
 | 
						|
an empty string. ::
 | 
						|
 | 
						|
   >>> word[1:100]
 | 
						|
   'elpA'
 | 
						|
   >>> word[10:]
 | 
						|
   ''
 | 
						|
   >>> word[2:1]
 | 
						|
   ''
 | 
						|
 | 
						|
Indices may be negative numbers, to start counting from the right. For example::
 | 
						|
 | 
						|
   >>> word[-1]     # The last character
 | 
						|
   'A'
 | 
						|
   >>> word[-2]     # The last-but-one character
 | 
						|
   'p'
 | 
						|
   >>> word[-2:]    # The last two characters
 | 
						|
   'pA'
 | 
						|
   >>> word[:-2]    # Everything except the last two characters
 | 
						|
   'Hel'
 | 
						|
 | 
						|
But note that -0 is really the same as 0, so it does not count from the right!
 | 
						|
::
 | 
						|
 | 
						|
   >>> word[-0]     # (since -0 equals 0)
 | 
						|
   'H'
 | 
						|
 | 
						|
Out-of-range negative slice indices are truncated, but don't try this for
 | 
						|
single-element (non-slice) indices::
 | 
						|
 | 
						|
   >>> word[-100:]
 | 
						|
   'HelpA'
 | 
						|
   >>> word[-10]    # error
 | 
						|
   Traceback (most recent call last):
 | 
						|
     File "<stdin>", line 1, in ?
 | 
						|
   IndexError: string index out of range
 | 
						|
 | 
						|
One way to remember how slices work is to think of the indices as pointing
 | 
						|
*between* characters, with the left edge of the first character numbered 0.
 | 
						|
Then the right edge of the last character of a string of *n* characters has
 | 
						|
index *n*, for example::
 | 
						|
 | 
						|
    +---+---+---+---+---+ 
 | 
						|
    | H | e | l | p | A |
 | 
						|
    +---+---+---+---+---+ 
 | 
						|
    0   1   2   3   4   5 
 | 
						|
   -5  -4  -3  -2  -1
 | 
						|
 | 
						|
The first row of numbers gives the position of the indices 0...5 in the string;
 | 
						|
the second row gives the corresponding negative indices. The slice from *i* to
 | 
						|
*j* consists of all characters between the edges labeled *i* and *j*,
 | 
						|
respectively.
 | 
						|
 | 
						|
For non-negative indices, the length of a slice is the difference of the
 | 
						|
indices, if both are within bounds.  For example, the length of ``word[1:3]`` is
 | 
						|
2.
 | 
						|
 | 
						|
The built-in function :func:`len` returns the length of a string::
 | 
						|
 | 
						|
   >>> s = 'supercalifragilisticexpialidocious'
 | 
						|
   >>> len(s)
 | 
						|
   34
 | 
						|
 | 
						|
 | 
						|
.. seealso::
 | 
						|
 | 
						|
   :ref:`typesseq`
 | 
						|
      Strings, and the Unicode strings described in the next section, are
 | 
						|
      examples of *sequence types*, and support the common operations supported
 | 
						|
      by such types.
 | 
						|
 | 
						|
   :ref:`string-methods`
 | 
						|
      Both strings and Unicode strings support a large number of methods for
 | 
						|
      basic transformations and searching.
 | 
						|
 | 
						|
   :ref:`string-formatting`
 | 
						|
      The formatting operations invoked when strings and Unicode strings are the
 | 
						|
      left operand of the ``%`` operator are described in more detail here.
 | 
						|
 | 
						|
 | 
						|
.. _tut-unicodestrings:
 | 
						|
 | 
						|
Unicode Strings
 | 
						|
---------------
 | 
						|
 | 
						|
.. sectionauthor:: Marc-Andre Lemburg <mal@lemburg.com>
 | 
						|
 | 
						|
 | 
						|
Starting with Python 2.0 a new data type for storing text data is available to
 | 
						|
the programmer: the Unicode object. It can be used to store and manipulate
 | 
						|
Unicode data (see http://www.unicode.org/) and integrates well with the existing
 | 
						|
string objects, providing auto-conversions where necessary.
 | 
						|
 | 
						|
Unicode has the advantage of providing one ordinal for every character in every
 | 
						|
script used in modern and ancient texts. Previously, there were only 256
 | 
						|
possible ordinals for script characters. Texts were typically bound to a code
 | 
						|
page which mapped the ordinals to script characters. This lead to very much
 | 
						|
confusion especially with respect to internationalization (usually written as
 | 
						|
``i18n`` --- ``'i'`` + 18 characters + ``'n'``) of software.  Unicode solves
 | 
						|
these problems by defining one code page for all scripts.
 | 
						|
 | 
						|
Creating Unicode strings in Python is just as simple as creating normal
 | 
						|
strings::
 | 
						|
 | 
						|
   >>> u'Hello World !'
 | 
						|
   u'Hello World !'
 | 
						|
 | 
						|
The small ``'u'`` in front of the quote indicates that a Unicode string is
 | 
						|
supposed to be created. If you want to include special characters in the string,
 | 
						|
you can do so by using the Python *Unicode-Escape* encoding. The following
 | 
						|
example shows how::
 | 
						|
 | 
						|
   >>> u'Hello\u0020World !'
 | 
						|
   u'Hello World !'
 | 
						|
 | 
						|
The escape sequence ``\u0020`` indicates to insert the Unicode character with
 | 
						|
the ordinal value 0x0020 (the space character) at the given position.
 | 
						|
 | 
						|
Other characters are interpreted by using their respective ordinal values
 | 
						|
directly as Unicode ordinals.  If you have literal strings in the standard
 | 
						|
Latin-1 encoding that is used in many Western countries, you will find it
 | 
						|
convenient that the lower 256 characters of Unicode are the same as the 256
 | 
						|
characters of Latin-1.
 | 
						|
 | 
						|
For experts, there is also a raw mode just like the one for normal strings. You
 | 
						|
have to prefix the opening quote with 'ur' to have Python use the
 | 
						|
*Raw-Unicode-Escape* encoding. It will only apply the above ``\uXXXX``
 | 
						|
conversion if there is an uneven number of backslashes in front of the small
 | 
						|
'u'. ::
 | 
						|
 | 
						|
   >>> ur'Hello\u0020World !'
 | 
						|
   u'Hello World !'
 | 
						|
   >>> ur'Hello\\u0020World !'
 | 
						|
   u'Hello\\\\u0020World !'
 | 
						|
 | 
						|
The raw mode is most useful when you have to enter lots of backslashes, as can
 | 
						|
be necessary in regular expressions.
 | 
						|
 | 
						|
Apart from these standard encodings, Python provides a whole set of other ways
 | 
						|
of creating Unicode strings on the basis of a known encoding.
 | 
						|
 | 
						|
.. index:: builtin: unicode
 | 
						|
 | 
						|
The built-in function :func:`unicode` provides access to all registered Unicode
 | 
						|
codecs (COders and DECoders). Some of the more well known encodings which these
 | 
						|
codecs can convert are *Latin-1*, *ASCII*, *UTF-8*, and *UTF-16*. The latter two
 | 
						|
are variable-length encodings that store each Unicode character in one or more
 | 
						|
bytes. The default encoding is normally set to ASCII, which passes through
 | 
						|
characters in the range 0 to 127 and rejects any other characters with an error.
 | 
						|
When a Unicode string is printed, written to a file, or converted with
 | 
						|
:func:`str`, conversion takes place using this default encoding. ::
 | 
						|
 | 
						|
   >>> u"abc"
 | 
						|
   u'abc'
 | 
						|
   >>> str(u"abc")
 | 
						|
   'abc'
 | 
						|
   >>> u"äöü"
 | 
						|
   u'\xe4\xf6\xfc'
 | 
						|
   >>> str(u"äöü")
 | 
						|
   Traceback (most recent call last):
 | 
						|
     File "<stdin>", line 1, in ?
 | 
						|
   UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
 | 
						|
 | 
						|
To convert a Unicode string into an 8-bit string using a specific encoding,
 | 
						|
Unicode objects provide an :func:`encode` method that takes one argument, the
 | 
						|
name of the encoding.  Lowercase names for encodings are preferred. ::
 | 
						|
 | 
						|
   >>> u"äöü".encode('utf-8')
 | 
						|
   '\xc3\xa4\xc3\xb6\xc3\xbc'
 | 
						|
 | 
						|
If you have data in a specific encoding and want to produce a corresponding
 | 
						|
Unicode string from it, you can use the :func:`unicode` function with the
 | 
						|
encoding name as the second argument. ::
 | 
						|
 | 
						|
   >>> unicode('\xc3\xa4\xc3\xb6\xc3\xbc', 'utf-8')
 | 
						|
   u'\xe4\xf6\xfc'
 | 
						|
 | 
						|
 | 
						|
.. _tut-lists:
 | 
						|
 | 
						|
Lists
 | 
						|
-----
 | 
						|
 | 
						|
Python knows a number of *compound* data types, used to group together other
 | 
						|
values.  The most versatile is the *list*, which can be written as a list of
 | 
						|
comma-separated values (items) between square brackets.  List items need not all
 | 
						|
have the same type. ::
 | 
						|
 | 
						|
   >>> a = ['spam', 'eggs', 100, 1234]
 | 
						|
   >>> a
 | 
						|
   ['spam', 'eggs', 100, 1234]
 | 
						|
 | 
						|
Like string indices, list indices start at 0, and lists can be sliced,
 | 
						|
concatenated and so on::
 | 
						|
 | 
						|
   >>> a[0]
 | 
						|
   'spam'
 | 
						|
   >>> a[3]
 | 
						|
   1234
 | 
						|
   >>> a[-2]
 | 
						|
   100
 | 
						|
   >>> a[1:-1]
 | 
						|
   ['eggs', 100]
 | 
						|
   >>> a[:2] + ['bacon', 2*2]
 | 
						|
   ['spam', 'eggs', 'bacon', 4]
 | 
						|
   >>> 3*a[:3] + ['Boo!']
 | 
						|
   ['spam', 'eggs', 100, 'spam', 'eggs', 100, 'spam', 'eggs', 100, 'Boo!']
 | 
						|
 | 
						|
Unlike strings, which are *immutable*, it is possible to change individual
 | 
						|
elements of a list::
 | 
						|
 | 
						|
   >>> a
 | 
						|
   ['spam', 'eggs', 100, 1234]
 | 
						|
   >>> a[2] = a[2] + 23
 | 
						|
   >>> a
 | 
						|
   ['spam', 'eggs', 123, 1234]
 | 
						|
 | 
						|
Assignment to slices is also possible, and this can even change the size of the
 | 
						|
list or clear it entirely::
 | 
						|
 | 
						|
   >>> # Replace some items:
 | 
						|
   ... a[0:2] = [1, 12]
 | 
						|
   >>> a
 | 
						|
   [1, 12, 123, 1234]
 | 
						|
   >>> # Remove some:
 | 
						|
   ... a[0:2] = []
 | 
						|
   >>> a
 | 
						|
   [123, 1234]
 | 
						|
   >>> # Insert some:
 | 
						|
   ... a[1:1] = ['bletch', 'xyzzy']
 | 
						|
   >>> a
 | 
						|
   [123, 'bletch', 'xyzzy', 1234]
 | 
						|
   >>> # Insert (a copy of) itself at the beginning
 | 
						|
   >>> a[:0] = a
 | 
						|
   >>> a
 | 
						|
   [123, 'bletch', 'xyzzy', 1234, 123, 'bletch', 'xyzzy', 1234]
 | 
						|
   >>> # Clear the list: replace all items with an empty list
 | 
						|
   >>> a[:] = []
 | 
						|
   >>> a
 | 
						|
   []
 | 
						|
 | 
						|
The built-in function :func:`len` also applies to lists::
 | 
						|
 | 
						|
   >>> len(a)
 | 
						|
   8
 | 
						|
 | 
						|
It is possible to nest lists (create lists containing other lists), for
 | 
						|
example::
 | 
						|
 | 
						|
   >>> q = [2, 3]
 | 
						|
   >>> p = [1, q, 4]
 | 
						|
   >>> len(p)
 | 
						|
   3
 | 
						|
   >>> p[1]
 | 
						|
   [2, 3]
 | 
						|
   >>> p[1][0]
 | 
						|
   2
 | 
						|
   >>> p[1].append('xtra')     # See section 5.1
 | 
						|
   >>> p
 | 
						|
   [1, [2, 3, 'xtra'], 4]
 | 
						|
   >>> q
 | 
						|
   [2, 3, 'xtra']
 | 
						|
 | 
						|
Note that in the last example, ``p[1]`` and ``q`` really refer to the same
 | 
						|
object!  We'll come back to *object semantics* later.
 | 
						|
 | 
						|
 | 
						|
.. _tut-firststeps:
 | 
						|
 | 
						|
First Steps Towards Programming
 | 
						|
===============================
 | 
						|
 | 
						|
Of course, we can use Python for more complicated tasks than adding two and two
 | 
						|
together.  For instance, we can write an initial sub-sequence of the *Fibonacci*
 | 
						|
series as follows::
 | 
						|
 | 
						|
   >>> # Fibonacci series:
 | 
						|
   ... # the sum of two elements defines the next
 | 
						|
   ... a, b = 0, 1
 | 
						|
   >>> while b < 10:
 | 
						|
   ...       print b
 | 
						|
   ...       a, b = b, a+b
 | 
						|
   ... 
 | 
						|
   1
 | 
						|
   1
 | 
						|
   2
 | 
						|
   3
 | 
						|
   5
 | 
						|
   8
 | 
						|
 | 
						|
This example introduces several new features.
 | 
						|
 | 
						|
* The first line contains a *multiple assignment*: the variables ``a`` and ``b``
 | 
						|
  simultaneously get the new values 0 and 1.  On the last line this is used again,
 | 
						|
  demonstrating that the expressions on the right-hand side are all evaluated
 | 
						|
  first before any of the assignments take place.  The right-hand side expressions
 | 
						|
  are evaluated  from the left to the right.
 | 
						|
 | 
						|
* The :keyword:`while` loop executes as long as the condition (here: ``b < 10``)
 | 
						|
  remains true.  In Python, like in C, any non-zero integer value is true; zero is
 | 
						|
  false.  The condition may also be a string or list value, in fact any sequence;
 | 
						|
  anything with a non-zero length is true, empty sequences are false.  The test
 | 
						|
  used in the example is a simple comparison.  The standard comparison operators
 | 
						|
  are written the same as in C: ``<`` (less than), ``>`` (greater than), ``==``
 | 
						|
  (equal to), ``<=`` (less than or equal to), ``>=`` (greater than or equal to)
 | 
						|
  and ``!=`` (not equal to).
 | 
						|
 | 
						|
* The *body* of the loop is *indented*: indentation is Python's way of grouping
 | 
						|
  statements.  Python does not (yet!) provide an intelligent input line editing
 | 
						|
  facility, so you have to type a tab or space(s) for each indented line.  In
 | 
						|
  practice you will prepare more complicated input for Python with a text editor;
 | 
						|
  most text editors have an auto-indent facility.  When a compound statement is
 | 
						|
  entered interactively, it must be followed by a blank line to indicate
 | 
						|
  completion (since the parser cannot guess when you have typed the last line).
 | 
						|
  Note that each line within a basic block must be indented by the same amount.
 | 
						|
 | 
						|
* The :keyword:`print` statement writes the value of the expression(s) it is
 | 
						|
  given.  It differs from just writing the expression you want to write (as we did
 | 
						|
  earlier in the calculator examples) in the way it handles multiple expressions
 | 
						|
  and strings.  Strings are printed without quotes, and a space is inserted
 | 
						|
  between items, so you can format things nicely, like this::
 | 
						|
 | 
						|
     >>> i = 256*256
 | 
						|
     >>> print 'The value of i is', i
 | 
						|
     The value of i is 65536
 | 
						|
 | 
						|
  A trailing comma avoids the newline after the output::
 | 
						|
 | 
						|
     >>> a, b = 0, 1
 | 
						|
     >>> while b < 1000:
 | 
						|
     ...     print b,
 | 
						|
     ...     a, b = b, a+b
 | 
						|
     ... 
 | 
						|
     1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
 | 
						|
 | 
						|
  Note that the interpreter inserts a newline before it prints the next prompt if
 | 
						|
  the last line was not completed.
 | 
						|
 | 
						|
 |