Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
iakovlev.org

Python Tutorial

Guido van Rossum Fred L. Drake, Jr., editor

Python Software Foundation Email:

Release 2.4 30 November 2004


2. Интерпретатор


2.1 Вызов интерпретатор

Интерпретатор обычно инсталлируется в /usr/local/bin/python ; набрав /usr/local/bin в Unix-шелле , затем можно набрать :

python
 

Набрав 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'-системах питоновские скрипты могут выполняться автоматически , для этого они должны начинаться с

#! /usr/bin/env python
 

2.2.3 Source Code Encoding

В питоновских исходниках можно использовать кодировку , отличную от 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() :

>>> len(a)
 8
 

Возможны вложенные списки :

>>> 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
 

Новые фичи :

  • Множественное присваивание : a и b одновременно инициализируются .

  • Цикл while выполняется до тех пор , пока верно условие : b < 10) . В Python, равно как и в C, любое ненулевое число = true; 0 = false. Условием может быть строка или список , и все , что ненулевой длины , = true. Операторы сравнения стандартны : < (less than), > (greater than), == (equal to), <= (less than or equal to), >= (greater than or equal to) and != (not equal to).

  • Выражение в питоне должно начинаться с новой строки и с символа tab или с пробела .

  • Оператор print позволяет форматировать вывод :

    >>> i = 256*256
     >>> print 'The value of i is', i
     The value of i is 65536
     

    С помощью запятой можно список распечатать в одну строку :

    >>> 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
     
    Оставьте свой комментарий !

    Ваше имя:
    Комментарий:
    Оба поля являются обязательными

     Автор  Комментарий к данной статье