Python Tutorial
Guido van Rossum
Fred L. Drake, Jr., editor
Python Software Foundation
Email: docs@python.org
Release 2.4
30 November 2004
2. Интерпретатор
2.1 Вызов интерпретатор
Интерпретатор обычно инсталлируется в
/usr/local/bin/python ;
набрав /usr/local/bin в Unix-шелле ,
затем можно набрать :
Набрав
Control-Z
выходим из питона. Если это не помогает ,
набираем
"import sys; sys.exit()".
Работа из командной строки не обладает явными продвинутыми возможностями.
На Unix-машинах в командной строке есть возможность
использовать некоторые фичи редактирования и истории .
Для проверки таких возможностей можно набрать Control-P - если никакой реакции ,
значит остается только backspace .
Интерпретатор работает подобно шеллу - либо он выполняет команды непосредственно
из командной строки , либо запускает скрипт из файла .
Другой путь запуска интерпретатора - выполнить команду
"python -c command [arg] ...",
которая выполнит выражение в command, аналогично шелловской опции -c .
Поскольку питоновские выражения часто содержат пробелы и другие спец-символы ,
выражение command лучше квотировать двойными кавычками .
Другой путь - запустить модуль питона командой
"python -m module [arg] ...".
Обратите внимание на разницу между
"python file" и "python <file".
Во втором случае речь идет не о файле , а о потоке input .
Иногда после запуса скрипта нужно вслед интерактивно взаимодействовать с ним ,
для этого нужно использовать опцию -i .
2.1.1 Передача аргументов
Когда из командной строки запускается комбинация интерпретатора,имени скрипта и аргументов ,
последние передаются скрипту с помощью встроенной переменной
sys.argv , которая есть набор строк . Если аргументов нет ,
sys.argv[0] есть пустая строка . Когда имя скрипта дается как '-' (что
подразумевает input), sys.argv[0] равно '-' . При использовании
-c command , sys.argv[0] равно
'-c' . При использовании -m module , sys.argv[0]
равно имени модуля . Опции , найденные после
-c command или -m module , интерпретатором
не рассматриваются , но добавляются в sys.argv .
2.1.2 Интерактивный режим
Признаком интерактивности питона обычно служит тройное квотирование
(">> > "); Для продолжения длинных строк
это обычно 3 точки ("... ").
При старте интерпретатор обычно печатает версию :
python
Python 1.5.2b2 (#1, Feb 28 1999, 00:02:06) [GCC 2.8.1] on sunos5
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>>
Длинные строки получаются обычно в сложных логических конструкциях :
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
... print "Be careful not to fall off!"
...
Be careful not to fall off!
2.2.1 Error Handling
При ошибке интерпретатор печатает сообщение и stack trace.
При зависании выйти из программы можно набрав Control-C или DEL
2.2.2 Выполнение Python скриптов
На BSD'-системах питоновские скрипты могут выполняться автоматически ,
для этого они должны начинаться с
В питоновских исходниках можно использовать кодировку , отличную от ASCII .
Для этого нужно набрать :
# -*- coding: encoding -*-
Таким образом можно написать Unicode-строку .
Например , для распечатки символа валюты Евро , может быть использована
кодировка ISO-8859-15 :
# -*- coding: iso-8859-15 -*-
currency = u"€"
print ord(currency)
2.2.4 Интерактивный Startup File
Иногда необходимо , чтобы при запуске питон запускал набор команд .
Для этого можно использовать переменую , которая называется PYTHONSTARTUP
Если при запуске нужно прочитать и выполнить некий start-up file из текущей директории ,
в программе можно прописать типа"if os.path.isfile('.pythonrc.py'):
execfile('.pythonrc.py')". Вариант :
import os
filename = os.environ.get('PYTHONSTARTUP')
if filename and os.path.isfile(filename):
execfile(filename)
3.1.2 Строки
Питон может манипулировать со строками несколькими способами .
Строки могут быть заключены как в одинарные , так и в двойные кавычки :
>>> '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.'
Строку можно продлить с помощью обратного слэша :
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
Или можно несколько строк обьединить тройным квотированием :
""" or '' ' .
print """
Usage: thingy [OPTIONS]
-h Display this usage message
-H hostname Hostname to connect to
"""
вывод будет таким:
Usage: thingy [OPTIONS]
-h Display this usage message
-H hostname Hostname to connect to
Конкатенация строк выполняется с помощью + ,повтор - с помощью * :
>>> word = 'Help' + 'A'
>>> word
'HelpA'
>>> '<' + word*5 + '>'
'<HelpAHelpAHelpAHelpAHelpA>'
2 строки идущие подряд автоматически конкатенируются .
>>> 'str' 'ing' # <- Правильно
'string'
>>> 'str'.strip() + 'ing' # <- Правильно
'string'
>>> 'str'.strip() 'ing' # <- Неправильно
File "<stdin>", line 1, in ?
'str'.strip() 'ing'
^
SyntaxError: invalid syntax
Символы строки имеют индекс начиная с 0 .
>>> word[4]
'A'
>>> word[0:2]
'He'
>>> word[2:4]
'lp'
Примеры выборочной строковой индексации :
>>> word[:2] # первые 2 символа
'He'
>>> word[2:] # все кроме первы 2-х символов
'lpA'
В отличие от C , питоньи строки не могут быть изменены :-)
Следующая операция вызовет ошибку :
>>> 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
Зато создание новых строк может быть легким и приятным :
>>> 'x' + word[1:]
'xelpA'
>>> 'Splat' + word[4]
'SplatA'
Вариант для операций типа
s[:i] + s[i:]
>>> word[:2] + word[2:]
'HelpA'
>>> word[:3] + word[3:]
'HelpA'
Индекс строки может быть отрицательным :
>>> 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'
Понять , как работают slices:индексы можно со следующей диаграммы :
+---+---+---+---+---+
| H | e | l | p | A |
+---+---+---+---+---+
0 1 2 3 4 5
-5 -4 -3 -2 -1
Встроенная функция len() возвращает длину строки:
>>> s = 'supercalifragilisticexpialidocious'
>>> len(s)
34
Полезные ссылки:
- Sequence Types
- Strings, and the Unicode strings described in the next
section, are examples of sequence types, and
support the common operations supported by such types.
- String Methods
- Both strings and Unicode strings support a large number of
methods for basic transformations and searching.
- String Formatting Operations
- The formatting operations invoked when strings and Unicode
strings are the left operand of the
% operator are
described in more detail here.
3.1.4 Lists
В питоне есть несколько составных типов , одним из которых являются список,
который может быть записан как набор значений , раделенных запятыми и заключен
в квадратные скобки .
>>> a = ['spam', 'eggs', 100, 1234]
>>> a
['spam', 'eggs', 100, 1234]
Индекс списка начинается с нуля . Список может быть разбит , сконкатенирован :
>>> 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] + ['Boe!']
['spam', 'eggs', 100, 'spam', 'eggs', 100, 'spam', 'eggs', 100, 'Boe!']
В отличие от строк , элементы списков можно менять :
>>> a
['spam', 'eggs', 100, 1234]
>>> a[2] = a[2] + 23
>>> a
['spam', 'eggs', 123, 1234]
>>> # замена:
... a[0:2] = [1, 12]
>>> a
[1, 12, 123, 1234]
>>> # удаление
... a[0:2] = []
>>> a
[123, 1234]
>>> # вставка
... a[1:1] = ['bletch', 'xyzzy']
>>> a
[123, 'bletch', 'xyzzy', 1234]
>>> a[:0] = a # вставка самоё себя в начало
>>> a
[123, 'bletch', 'xyzzy', 1234, 123, 'bletch', 'xyzzy', 1234]
Встроенная функция len() :
Возможны вложенные списки :
>>> q = [2, 3]
>>> p = [1, q, 4]
>>> len(p)
3
>>> p[1]
[2, 3]
>>> p[1][0]
2
>>> p[1].append('xtra') #
>>> p
[1, [2, 3, 'xtra'], 4]
>>> q
[2, 3, 'xtra']
Обратите внимание на тот факт , что p[1] и q ссылаются на один
и тот же обьект !
3.2 Идём дальше
Запишем серию чисел Fibonacci :
>>> # Fibonacci series:
... # каждый последующий есть сумма 2-х предыдущих
... a, b = 0, 1
>>> while b < 10:
... print b
... a, b = b, a+b
...
1
1
2
3
5
8
Новые фичи :
|