add files
This commit is contained in:
545
python-3.7.4-docs-html/_sources/tutorial/introduction.rst.txt
Normal file
545
python-3.7.4-docs-html/_sources/tutorial/introduction.rst.txt
Normal file
@@ -0,0 +1,545 @@
|
||||
.. _tut-informal:
|
||||
|
||||
**********************************
|
||||
An Informal Introduction to Python
|
||||
**********************************
|
||||
|
||||
In the following examples, input and output are distinguished by the presence or
|
||||
absence of prompts (:term:`>>>` and :term:`...`): 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.
|
||||
|
||||
.. index:: single: # (hash); comment
|
||||
|
||||
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.
|
||||
Since comments are to clarify code and are not interpreted by Python, they may
|
||||
be omitted when typing in examples.
|
||||
|
||||
Some examples::
|
||||
|
||||
# this is the first comment
|
||||
spam = 1 # and this is the second comment
|
||||
# ... and now a third!
|
||||
text = "# This is not a comment because it's inside quotes."
|
||||
|
||||
|
||||
.. _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
|
||||
>>> 50 - 5*6
|
||||
20
|
||||
>>> (50 - 5*6) / 4
|
||||
5.0
|
||||
>>> 8 / 5 # division always returns a floating point number
|
||||
1.6
|
||||
|
||||
The integer numbers (e.g. ``2``, ``4``, ``20``) have type :class:`int`,
|
||||
the ones with a fractional part (e.g. ``5.0``, ``1.6``) have type
|
||||
:class:`float`. We will see more about numeric types later in the tutorial.
|
||||
|
||||
Division (``/``) always returns a float. To do :term:`floor division` and
|
||||
get an integer result (discarding any fractional result) you can use the ``//``
|
||||
operator; to calculate the remainder you can use ``%``::
|
||||
|
||||
>>> 17 / 3 # classic division returns a float
|
||||
5.666666666666667
|
||||
>>>
|
||||
>>> 17 // 3 # floor division discards the fractional part
|
||||
5
|
||||
>>> 17 % 3 # the % operator returns the remainder of the division
|
||||
2
|
||||
>>> 5 * 3 + 2 # result * divisor + remainder
|
||||
17
|
||||
|
||||
With Python, it is possible to use the ``**`` operator to calculate powers [#]_::
|
||||
|
||||
>>> 5 ** 2 # 5 squared
|
||||
25
|
||||
>>> 2 ** 7 # 2 to the power of 7
|
||||
128
|
||||
|
||||
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
|
||||
|
||||
If a variable is not "defined" (assigned a value), trying to use it will
|
||||
give you an error::
|
||||
|
||||
>>> n # try to access an undefined variable
|
||||
Traceback (most recent call last):
|
||||
File "<stdin>", line 1, in <module>
|
||||
NameError: name 'n' is not defined
|
||||
|
||||
There is full support for floating point; operators with mixed type operands
|
||||
convert the integer operand to floating point::
|
||||
|
||||
>>> 4 * 3.75 - 1
|
||||
14.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.
|
||||
|
||||
In addition to :class:`int` and :class:`float`, Python supports other types of
|
||||
numbers, such as :class:`~decimal.Decimal` and :class:`~fractions.Fraction`.
|
||||
Python also has built-in support for :ref:`complex numbers <typesnumeric>`,
|
||||
and uses the ``j`` or ``J`` suffix to indicate the imaginary part
|
||||
(e.g. ``3+5j``).
|
||||
|
||||
|
||||
.. _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 (``"..."``) with the same result [#]_. ``\`` can be used
|
||||
to escape quotes::
|
||||
|
||||
>>> 'spam eggs' # single quotes
|
||||
'spam eggs'
|
||||
>>> 'doesn\'t' # use \' to escape the single quote...
|
||||
"doesn't"
|
||||
>>> "doesn't" # ...or use double quotes instead
|
||||
"doesn't"
|
||||
>>> '"Yes," they said.'
|
||||
'"Yes," they said.'
|
||||
>>> "\"Yes,\" they said."
|
||||
'"Yes," they said.'
|
||||
>>> '"Isn\'t," they said.'
|
||||
'"Isn\'t," they said.'
|
||||
|
||||
In the interactive interpreter, the output string is enclosed in quotes and
|
||||
special characters are escaped with backslashes. While this might sometimes
|
||||
look different from the input (the enclosing quotes could change), the two
|
||||
strings are equivalent. The string is enclosed in double quotes if
|
||||
the string contains a single quote and no double quotes, otherwise it is
|
||||
enclosed in single quotes. The :func:`print` function produces a more
|
||||
readable output, by omitting the enclosing quotes and by printing escaped
|
||||
and special characters::
|
||||
|
||||
>>> '"Isn\'t," they said.'
|
||||
'"Isn\'t," they said.'
|
||||
>>> print('"Isn\'t," they said.')
|
||||
"Isn't," they said.
|
||||
>>> s = 'First line.\nSecond line.' # \n means newline
|
||||
>>> s # without print(), \n is included in the output
|
||||
'First line.\nSecond line.'
|
||||
>>> print(s) # with print(), \n produces a new line
|
||||
First line.
|
||||
Second line.
|
||||
|
||||
If you don't want characters prefaced by ``\`` to be interpreted as
|
||||
special characters, you can use *raw strings* by adding an ``r`` before
|
||||
the first quote::
|
||||
|
||||
>>> print('C:\some\name') # here \n means newline!
|
||||
C:\some
|
||||
ame
|
||||
>>> print(r'C:\some\name') # note the r before the quote
|
||||
C:\some\name
|
||||
|
||||
String literals can span multiple lines. One way is using triple-quotes:
|
||||
``"""..."""`` or ``'''...'''``. End of lines are automatically
|
||||
included in the string, but it's possible to prevent this by adding a ``\`` at
|
||||
the end of the line. The following example::
|
||||
|
||||
print("""\
|
||||
Usage: thingy [OPTIONS]
|
||||
-h Display this usage message
|
||||
-H hostname Hostname to connect to
|
||||
""")
|
||||
|
||||
produces the following output (note that the initial newline is not included):
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
Usage: thingy [OPTIONS]
|
||||
-h Display this usage message
|
||||
-H hostname Hostname to connect to
|
||||
|
||||
Strings can be concatenated (glued together) with the ``+`` operator, and
|
||||
repeated with ``*``::
|
||||
|
||||
>>> # 3 times 'un', followed by 'ium'
|
||||
>>> 3 * 'un' + 'ium'
|
||||
'unununium'
|
||||
|
||||
Two or more *string literals* (i.e. the ones enclosed between quotes) next
|
||||
to each other are automatically concatenated. ::
|
||||
|
||||
>>> 'Py' 'thon'
|
||||
'Python'
|
||||
|
||||
This feature is particularly useful when you want to break long strings::
|
||||
|
||||
>>> text = ('Put several strings within parentheses '
|
||||
... 'to have them joined together.')
|
||||
>>> text
|
||||
'Put several strings within parentheses to have them joined together.'
|
||||
|
||||
This only works with two literals though, not with variables or expressions::
|
||||
|
||||
>>> prefix = 'Py'
|
||||
>>> prefix 'thon' # can't concatenate a variable and a string literal
|
||||
File "<stdin>", line 1
|
||||
prefix 'thon'
|
||||
^
|
||||
SyntaxError: invalid syntax
|
||||
>>> ('un' * 3) 'ium'
|
||||
File "<stdin>", line 1
|
||||
('un' * 3) 'ium'
|
||||
^
|
||||
SyntaxError: invalid syntax
|
||||
|
||||
If you want to concatenate variables or a variable and a literal, use ``+``::
|
||||
|
||||
>>> prefix + 'thon'
|
||||
'Python'
|
||||
|
||||
Strings can be *indexed* (subscripted), with the first character having index 0.
|
||||
There is no separate character type; a character is simply a string of size
|
||||
one::
|
||||
|
||||
>>> word = 'Python'
|
||||
>>> word[0] # character in position 0
|
||||
'P'
|
||||
>>> word[5] # character in position 5
|
||||
'n'
|
||||
|
||||
Indices may also be negative numbers, to start counting from the right::
|
||||
|
||||
>>> word[-1] # last character
|
||||
'n'
|
||||
>>> word[-2] # second-last character
|
||||
'o'
|
||||
>>> word[-6]
|
||||
'P'
|
||||
|
||||
Note that since -0 is the same as 0, negative indices start from -1.
|
||||
|
||||
In addition to indexing, *slicing* is also supported. While indexing is used
|
||||
to obtain individual characters, *slicing* allows you to obtain substring::
|
||||
|
||||
>>> word[0:2] # characters from position 0 (included) to 2 (excluded)
|
||||
'Py'
|
||||
>>> word[2:5] # characters from position 2 (included) to 5 (excluded)
|
||||
'tho'
|
||||
|
||||
Note how the start is always included, and the end always excluded. This
|
||||
makes sure that ``s[:i] + s[i:]`` is always equal to ``s``::
|
||||
|
||||
>>> word[:2] + word[2:]
|
||||
'Python'
|
||||
>>> word[:4] + word[4:]
|
||||
'Python'
|
||||
|
||||
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] # character from the beginning to position 2 (excluded)
|
||||
'Py'
|
||||
>>> word[4:] # characters from position 4 (included) to the end
|
||||
'on'
|
||||
>>> word[-2:] # characters from the second-last (included) to the end
|
||||
'on'
|
||||
|
||||
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::
|
||||
|
||||
+---+---+---+---+---+---+
|
||||
| P | y | t | h | o | n |
|
||||
+---+---+---+---+---+---+
|
||||
0 1 2 3 4 5 6
|
||||
-6 -5 -4 -3 -2 -1
|
||||
|
||||
The first row of numbers gives the position of the indices 0...6 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.
|
||||
|
||||
Attempting to use an index that is too large will result in an error::
|
||||
|
||||
>>> word[42] # the word only has 6 characters
|
||||
Traceback (most recent call last):
|
||||
File "<stdin>", line 1, in <module>
|
||||
IndexError: string index out of range
|
||||
|
||||
However, out of range slice indexes are handled gracefully when used for
|
||||
slicing::
|
||||
|
||||
>>> word[4:42]
|
||||
'on'
|
||||
>>> word[42:]
|
||||
''
|
||||
|
||||
Python strings cannot be changed --- they are :term:`immutable`.
|
||||
Therefore, assigning to an indexed position in the string results in an error::
|
||||
|
||||
>>> word[0] = 'J'
|
||||
Traceback (most recent call last):
|
||||
File "<stdin>", line 1, in <module>
|
||||
TypeError: 'str' object does not support item assignment
|
||||
>>> word[2:] = 'py'
|
||||
Traceback (most recent call last):
|
||||
File "<stdin>", line 1, in <module>
|
||||
TypeError: 'str' object does not support item assignment
|
||||
|
||||
If you need a different string, you should create a new one::
|
||||
|
||||
>>> 'J' + word[1:]
|
||||
'Jython'
|
||||
>>> word[:2] + 'py'
|
||||
'Pypy'
|
||||
|
||||
The built-in function :func:`len` returns the length of a string::
|
||||
|
||||
>>> s = 'supercalifragilisticexpialidocious'
|
||||
>>> len(s)
|
||||
34
|
||||
|
||||
|
||||
.. seealso::
|
||||
|
||||
:ref:`textseq`
|
||||
Strings are examples of *sequence types*, and support the common
|
||||
operations supported by such types.
|
||||
|
||||
:ref:`string-methods`
|
||||
Strings support a large number of methods for
|
||||
basic transformations and searching.
|
||||
|
||||
:ref:`f-strings`
|
||||
String literals that have embedded expressions.
|
||||
|
||||
:ref:`formatstrings`
|
||||
Information about string formatting with :meth:`str.format`.
|
||||
|
||||
:ref:`old-string-formatting`
|
||||
The old formatting operations invoked when strings are
|
||||
the left operand of the ``%`` operator are described in more detail here.
|
||||
|
||||
|
||||
.. _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. Lists might contain
|
||||
items of different types, but usually the items all have the same type. ::
|
||||
|
||||
>>> squares = [1, 4, 9, 16, 25]
|
||||
>>> squares
|
||||
[1, 4, 9, 16, 25]
|
||||
|
||||
Like strings (and all other built-in :term:`sequence` types), lists can be
|
||||
indexed and sliced::
|
||||
|
||||
>>> squares[0] # indexing returns the item
|
||||
1
|
||||
>>> squares[-1]
|
||||
25
|
||||
>>> squares[-3:] # slicing returns a new list
|
||||
[9, 16, 25]
|
||||
|
||||
All slice operations return a new list containing the requested elements. This
|
||||
means that the following slice returns a new (shallow) copy of the list::
|
||||
|
||||
>>> squares[:]
|
||||
[1, 4, 9, 16, 25]
|
||||
|
||||
Lists also support operations like concatenation::
|
||||
|
||||
>>> squares + [36, 49, 64, 81, 100]
|
||||
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
|
||||
|
||||
Unlike strings, which are :term:`immutable`, lists are a :term:`mutable`
|
||||
type, i.e. it is possible to change their content::
|
||||
|
||||
>>> cubes = [1, 8, 27, 65, 125] # something's wrong here
|
||||
>>> 4 ** 3 # the cube of 4 is 64, not 65!
|
||||
64
|
||||
>>> cubes[3] = 64 # replace the wrong value
|
||||
>>> cubes
|
||||
[1, 8, 27, 64, 125]
|
||||
|
||||
You can also add new items at the end of the list, by using
|
||||
the :meth:`~list.append` *method* (we will see more about methods later)::
|
||||
|
||||
>>> cubes.append(216) # add the cube of 6
|
||||
>>> cubes.append(7 ** 3) # and the cube of 7
|
||||
>>> cubes
|
||||
[1, 8, 27, 64, 125, 216, 343]
|
||||
|
||||
Assignment to slices is also possible, and this can even change the size of the
|
||||
list or clear it entirely::
|
||||
|
||||
>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
|
||||
>>> letters
|
||||
['a', 'b', 'c', 'd', 'e', 'f', 'g']
|
||||
>>> # replace some values
|
||||
>>> letters[2:5] = ['C', 'D', 'E']
|
||||
>>> letters
|
||||
['a', 'b', 'C', 'D', 'E', 'f', 'g']
|
||||
>>> # now remove them
|
||||
>>> letters[2:5] = []
|
||||
>>> letters
|
||||
['a', 'b', 'f', 'g']
|
||||
>>> # clear the list by replacing all the elements with an empty list
|
||||
>>> letters[:] = []
|
||||
>>> letters
|
||||
[]
|
||||
|
||||
The built-in function :func:`len` also applies to lists::
|
||||
|
||||
>>> letters = ['a', 'b', 'c', 'd']
|
||||
>>> len(letters)
|
||||
4
|
||||
|
||||
It is possible to nest lists (create lists containing other lists), for
|
||||
example::
|
||||
|
||||
>>> a = ['a', 'b', 'c']
|
||||
>>> n = [1, 2, 3]
|
||||
>>> x = [a, n]
|
||||
>>> x
|
||||
[['a', 'b', 'c'], [1, 2, 3]]
|
||||
>>> x[0]
|
||||
['a', 'b', 'c']
|
||||
>>> x[0][1]
|
||||
'b'
|
||||
|
||||
.. _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 <https://en.wikipedia.org/wiki/Fibonacci_number>`_
|
||||
as follows::
|
||||
|
||||
>>> # Fibonacci series:
|
||||
... # the sum of two elements defines the next
|
||||
... a, b = 0, 1
|
||||
>>> while a < 10:
|
||||
... print(a)
|
||||
... a, b = b, a+b
|
||||
...
|
||||
0
|
||||
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: ``a < 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. At the interactive prompt, 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; all decent 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 :func:`print` function writes the value of the argument(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 arguments,
|
||||
floating point quantities, 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
|
||||
|
||||
The keyword argument *end* can be used to avoid the newline after the output,
|
||||
or end the output with a different string::
|
||||
|
||||
>>> a, b = 0, 1
|
||||
>>> while a < 1000:
|
||||
... print(a, end=',')
|
||||
... a, b = b, a+b
|
||||
...
|
||||
0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,
|
||||
|
||||
|
||||
.. rubric:: Footnotes
|
||||
|
||||
.. [#] Since ``**`` has higher precedence than ``-``, ``-3**2`` will be
|
||||
interpreted as ``-(3**2)`` and thus result in ``-9``. To avoid this
|
||||
and get ``9``, you can use ``(-3)**2``.
|
||||
|
||||
.. [#] Unlike other languages, special characters such as ``\n`` have the
|
||||
same meaning with both single (``'...'``) and double (``"..."``) quotes.
|
||||
The only difference between the two is that within single quotes you don't
|
||||
need to escape ``"`` (but you have to escape ``\'``) and vice versa.
|
Reference in New Issue
Block a user