August 2015

  • 5.6. Приемы использования цикла

    Когда цикл проходит по словарям, ключ и связанное значение могут быть извлечены одновременно с помощью метода items().

    >>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
    >>> for k, v in knights.items():
    ...     print(k, v)
    ...
    gallahad the pure
    robin the brave

    Когда цикл проходит через последовательность, позиционный индекс и связанное значение могут быть извлечены одновременно с помощью функции enumerate().

    >>> for i, v in enumerate(['tic', 'tac', 'toe']):
    ...     print(i, v)
    ...
    0 tic
    1 tac
    2 toe

  • 5.5. Словари

    Другой полезный тип данных, встроенный в Python, - это словарь (см. Mapping Types — dict (docs.python.org/3/library/stdtypes.html#typesmapping)). Словари иногда встречаются в других языках как "ассоциативные записи" или "ассоциативные массивы". В отличие от последовательностей, которые индексируются диапазоном чисел, словари индексируются по ключам, которые могут быть любым неизменяемым типом; строки и числа всегда могут быть ключами.

  • 5.4. Множества

    Python также включает тип данных для множеств (sets). Множество - это неупорядоченная коллекция, не содержащая повторов элементов. Основное применение включает проверку наличия члена и устранение дублирующихся записей. Объекты множеств также поддерживают математические операции, такие как объединение, пересечение, разность и симметричная разность.

  • 5.3. Кортежи и последовательности

    Мы видели, что списки и строки имеют много общих свойств, такие как индексирование и операция взятия среза. Они являются двумя примерами типа данных последовательностей (см. Sequence Types — list, tuple, range (docs.python.org/3/library/stdtypes.html#typesseq)). Поскольку Python - развивающийся язык, другие типы данных последовательностей могут быть добавлены. Существует также другой стандартный тип данных последовательностей: tuple (кортеж).

    Кортеж состоит из ряда значений, разделенных запятыми, например:

    >>> t = 12345, 54321, 'hello!'
    >>> t[0]
    12345
    >>> t

  • 5.2. Оператор del

    Существует способ удалить элемент из списка, передав его индекс вместо его значения: через оператор del. Это отличается от метода pop(), который возвращает значение. Также оператор del может быть использован для удаления среза из списка или очистки всего списка (что мы делали раньше присвоением пустого списка срезу). Например:

    >>> a = [-1, 1, 66.25, 333, 333, 1234.5]
    >>> del a[0]
    >>> a
    [1, 66.25, 333, 333, 1234.5]
    >>> del a[2:4]
    >>> a
    [1, 66.25, 1234.5]
    >>> del a[:]
    >>> a
    []

    del также может быть использован для полного удаления переменных:

    >>> del a

  • 5. Структуры данных. Списки

    Эта глава более подробно описывает некоторые моменты, с которыми вы уже знакомы, и также добавляет некоторые новые факты.

    5.1. Подробнее о списках

    Списковый тип данных имеет несколько больше методов. Здесь все методы списковых объектов:

    list.append(x)
    Добавляет элемент в конец списка. Эквивалентно a[len(a):] = [x].

    list.extend(L)
    Расширяет список добавлением всех элементов переданного списка. Эквивалентно a[len(a):] = L.

    list.insert(i, x)

  • Программа "Депозиты"

    Данная программа хранит информацию по открытым депозитам в разных банках в списке. Каждый элемент этого списка (вложенный список) - это информация по одному вкладу. Элемент включает название банка (по ключу из словаря, содержащего названия), дату открытия и закрытия вклада, сумму вклада и процентную ставку. Таким образом, список вкладов организован по типу таблицы базы данных.

    Даты хранятся в специальном формате (класс datetime.date модуля datetime). С объектами этого класса можно выполнять "арифметические" операции. Это используется при нахождении количества дней вклада.

  • 4.8. Интермеццо: стиль кодирования

    Теперь, когда вы собираетесь писать более длинный, более сложный код на Python, хорошее время, чтобы поговорить о стиле кодирования. В большинстве языков можно писать (или более правильно, форматировать) в различных стилях; некоторые из них более читабельные, чем другие. Создание кода более читаемого для других - всегда хорошая идея, и принятый хороший стиль кодирования чрезвычайно помогает этому.

  • 4.7. Подробнее об определении функций

    Также возможно определять функции с переменным числом аргументов. Есть три формы, которые могут быть комбинированы.

    4.7.1. Значения аргументов по умолчанию

    Наиболее полезная форма - это указать значение по умолчанию для одного или более аргументов. Это создает функцию, которая может быть вызвана с меньшими аргументами, чем это определено по умолчанию. Например:

    def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
        while True:
            ok = input(prompt)
            if ok in ('y', 'ye', 'yes'):
                return True

  • 4.6. Определение функций

    Мы можем создать функцию, которая выводит ряд Фибоначчи до произвольной границы:

    >>> def fib(n):    # выводит ряд Фибоначчи до n
    ...     """Печатает ряд Фибоначчи вплоть до n."""
    ...     a, b = 0, 1
    ...     while a < n:
    ...         print(a, end=' ')
    ...         a, b = b, a+b
    ...     print()
    ...
    >>> # Теперь вызовем функцию, которую мы только что определили:
    ... fib(2000)
    0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597

  • 4.5. Операторы pass

    Оператор pass ничего не делает. Он может быть использован, когда синтаксически требуется какое-либо выражение, но программа не требует действия. Например:

    >>> while True:
    ...     pass  # Занят ожиданием прерывания с клавиатуры (Ctrl+C)
    ...

    Обычно это используется при создании очень маленьких классов:

    >>> class MyEmptyClass:
    ...     pass
    ...

  • 4.4. Операторы break, continue и условие else после цикла

    Оператор break, как и в C, прерывает выполнение цикла for или while (только самого внутреннего, где он находится).

    Операторы цикла могут иметь оговорку else; она выполняется, когда цикл завершается из-за исчерпания списка (с for) или когда условие становится ложным (с while), но не в том случае, когда цикл прерван оператором break. Это подтверждается следующим циклом, который ищет простые числа:

    >>> for n in range(2, 10):
    ...     for x in range(2, n):
    ...         if n % x == 0:
    ...             print(n, 'equals', x, '*', n//x)
    ...             break
    ...     else:

  • 4.3. Функция range()

    Если вам надо перебрать последовательность чисел, пригодится встроенная функция range(). Она генерирует арифметические прогрессии:

    >>> for i in range(5):
    ...     print(i)
    ...
    0
    1
    2
    3
    4

    Заданная конечная точка никогда не входит в генерируемую последовательность; range(10) генерирует 10 значений, индексируемые как обычная последовательность длинной 10. Есть возможность установить другое число в качестве начала диапазона или указать другое приращение (даже отрицательное; иногда приращение называют "шагом"):

    range(5, 10)
       от 5 к 9
     
    range(0, 10, 3)

  • 4. Дополнительные инструменты управления потоком

    Кроме оператора while, который только что был представлен, Python знает обычные операторы управления потоком, известные из других языков, с некоторыми особенностями.

    4.1. Операторы if

    Возможно наиболее хорошо известным типом оператора является if. Например:

    >>> x = int(input("Пожалуйста, введите число: "))
    Пожалуйста, введите число: 42
    >>> if x < 0:
    ...     x = 0
    ...     print('Отрицательное изменяется на 0')
    ... elif x == 0:
    ...     print('Ноль')
    ... elif x == 1:
    ...     print('Один')
    ... else:
    ...     print('Больше')
    ...
    Больше

  • 3.2. Первые шаги к программированию

    Конечно мы можем использовать Python для более сложных задач, чем складывать вместе два и два. Например, мы можем написать начальную часть последовательности ряда Фибоначчи вот так:

    >>> # ряд Фибоначчи:
    ... # сумма двух элементов определяет следующий
    ... a, b = 0, 1
    >>> while b < 10:
    ...     print(b)
    ...     a, b = b, a+b
    ...
    1
    1
    2
    3
    5
    8

    Этот пример знакомит с несколькими новыми свойствами.

  • 3.1. Использование Python как калькулятор

    Попробуем несколько простых команд Python. Запустите интерпретатор и дождитесь первичного приглашения >>>. (Это не должно занять много времени.)

    3.1.1. Числа

    Интерпретатор действует как простой калькулятор: вы можете ввести в него выражение и он напишет результат. Синтаксис выражения простой: операторы +, -, * и / работают также как в большинстве других языках (например, Pascal или C); круглые скобки могут быть использованы для группировки. Например:

    >>> 2 + 2
    4
    >>> 50 - 5*6
    20
    >>> (50 - 5*6) / 4
    5.0
    >>> 8 / 5  # деление всегда возвращает число с плавающей точкой

  • 3. Неформальное введение в Python

    В следующих примерах ввод и вывод различаются присутствием или отсутствием приглашений (>>> и ...): чтобы повторить пример, вы должны ввести все после приглашения, когда оно появляется; строки, которые не начинаются с приглашения, являются выводом интерпретатора. Заметьте, что вторичное приглашение на отдельной строке в примере означает, что вы должны ввести пустую строку; это используется для окончания многострочной команды.

  • 2. Использование интерпретатора Python

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

    Интерпретатор Python обычно устанавливается по адресу /usr/local/bin/python3.4 на тех машинах, где это возможно; размещение в /usr/local/bin делает возможным поиску пути вашей командной оболочки Unix запустить его, набрав команду в оболочке:

    python3.4

    (На Unix интерпретатор Python 3.x не устанавливается по умолчанию с исполняемым именем python, это дает возможность не создавать конфликт с одновременно установленным исполняемым файлом Python 2.x.)