Главная страница
Навигация по странице:

  • Форматирование строк с помощью метода format

  • 13.1. Форматирование строк с помощью метода format 46 Самоучитель Python, Выпуск 0.2 Тип Значение

  • 13.1. Форматирование строк с помощью метода format 47

  • Функции и методы списков Создать создали, теперь нужно со списком что-то делать. Для списков доступны основные встроенные функции, а также методы списков.Таблица “методы списков”

  • 14.2. Функции и методы списков 49 Самоучитель Python, Выпуск 0.2

  • 14.3. Таблица “методы списков” 50 Глава15Индексы и срезыСегодня мы поговорим об операциях взятия индекса и среза.Взятие элемента по индексу

  • 15.2. Срезы 52 Самоучитель Python, Выпуск 0.2 [1, 0, 0, 0, 7]>>>del a[:-3]>>>a[0, 0, 7]15.2. Срезы 53

  • Зачем нужны кортежи, если есть списки

  • 16.2. Как работать с кортежами 55 Самоучитель Python, Выпуск 0.2 Операции с кортежами

  • 16.3. Операции с кортежами 56 Глава17Словари (dict) и работа с ними. Методы словарейСегодня я расскажу о таком типе данных, как словари

  • Самоучитель PythonВыпуск 2Дмитрий Мусинмая 07, 2017


    Скачать 0.74 Mb.
    НазваниеСамоучитель PythonВыпуск 2Дмитрий Мусинмая 07, 2017
    Дата20.01.2019
    Размер0.74 Mb.
    Формат файлаpdf
    Имя файлаPython3.pdf
    ТипПрограмма
    #64480
    страница4 из 12
    1   2   3   4   5   6   7   8   9   ...   12
    S.format(*args, **kwargs)
    Форматирование строки
    12.3. Таблица “Функции и методы строк”
    44

    Глава
    13
    Форматирование строк. Метод format
    Иногда (а точнее, довольно часто) возникают ситуации, когда нужно сделать строку, под- ставив в неё некоторые данные, полученные в процессе выполнения программы (поль- зовательский ввод, данные из файлов и т. д.). Подстановку данных можно сделать с по- мощью форматирования строк. Форматирование можно сделать с помощью оператора
    %, либо с помощью метода format.
    Форматирование строк с помощью метода format
    Если для подстановки требуется только один аргумент, то значение - сам аргумент:
    >>>
    'Hello,
    {}
    !'
    format(
    'Vasya'
    )
    'Hello, Vasya!'
    А если несколько, то значениями будут являться все аргументы со строками подстановки
    (обычных или именованных):
    >>>
    '
    {0}
    ,
    {1}
    ,
    {2}
    '
    format(
    'a'
    ,
    'b'
    ,
    'c'
    )
    'a, b, c'
    >>>
    '
    {}
    ,
    {}
    ,
    {}
    '
    format(
    'a'
    ,
    'b'
    ,
    'c'
    )
    'a, b, c'
    >>>
    '
    {2}
    ,
    {1}
    ,
    {0}
    '
    format(
    'a'
    ,
    'b'
    ,
    'c'
    )
    'c, b, a'
    >>>
    '
    {2}
    ,
    {1}
    ,
    {0}
    '
    format(
    *
    'abc'
    )
    'c, b, a'
    >>>
    '
    {0} {1} {0}
    '
    format(
    'abra'
    ,
    'cad'
    )
    'abracadabra'
    >>>
    'Coordinates:
    {latitude}
    ,
    {longitude}
    '
    format(latitude
    =
    '37.24N'
    , longitude
    =
    '-
    ˓→
    115.81W'
    )
    45

    Самоучитель Python, Выпуск 0.2
    'Coordinates: 37.24N, -115.81W'
    >>>
    coord
    =
    {
    'latitude'
    :
    '37.24N'
    ,
    'longitude'
    :
    '-115.81W'
    }
    >>>
    'Coordinates:
    {latitude}
    ,
    {longitude}
    '
    format(
    **
    coord)
    'Coordinates: 37.24N, -115.81W'
    Однако метод format умеет большее. Вот его синтаксис:
    поле замены
    ::
    =
    "{"
    [имя поля] [
    "!"
    преобразование] [
    ":"
    спецификация]
    "}"
    имя поля
    ::
    =
    arg_name (
    "."
    имя атрибута
    |
    "["
    индекс "]"
    )
    *
    преобразование
    ::
    =
    "r"
    (внутреннее представление)
    |
    "s"
    (человеческое
    ˓→
    представление)
    спецификация
    ::
    =
    см ниже
    Например:
    >>>
    "Units destroyed:
    {players[0]}
    "
    format(players
    =
    [
    1
    ,
    2
    ,
    3
    ])
    'Units destroyed: 1'
    >>>
    "Units destroyed:
    {players[0]!r}
    "
    format(players
    =
    [
    '1'
    ,
    '2'
    ,
    '3'
    ])
    "Units destroyed: '1'"
    Теперь спецификация формата:
    спецификация ::
    =
    [[fill]align][sign][
    #][0][width][,][.precision][type]
    заполнитель
    ::
    =
    символ кроме '{'
    или '}'
    выравнивание ::
    =
    "<"
    |
    ">"
    |
    "="
    |
    "^"
    знак
    ::
    =
    "+"
    |
    "-"
    |
    " "
    ширина
    ::
    =
    integer точность
    ::
    =
    integer тип
    ::
    =
    "b"
    |
    "c"
    |
    "d"
    |
    "e"
    |
    "E"
    |
    "f"
    |
    "F"
    |
    "g"
    |
    "G"
    |
    "n"
    |
    "o"
    |
    "s"
    |
    "x"
    |
    "X"
    |
    "%"
    Выравнивание производится при помощи символа-заполнителя. Доступны следующие варианты выравнивания:
    Флаг Значение
    ‘<’
    Символы-заполнители будут справа (выравнивание объекта по левому краю)
    (по умолчанию).
    ‘>’
    выравнивание объекта по правому краю.
    ‘=’
    Заполнитель будет после знака, но перед цифрами. Работает только с числовыми типами.
    ‘^’
    Выравнивание по центру.
    Опция “знак” используется только для чисел и может принимать следующие значения:
    Флаг
    Значение
    ‘+’
    Знак должен быть использован для всех чисел.
    ‘-‘
    ‘-‘ для отрицательных, ничего для положительных.
    ‘Пробел’
    ‘-‘ для отрицательных, пробел для положительных.
    Поле “тип” может принимать следующие значения:
    13.1. Форматирование строк с помощью метода format
    46

    Самоучитель Python, Выпуск 0.2
    Тип
    Значение
    ‘d’,
    ‘i’, ‘u’
    Десятичное число.
    ‘o’
    Число в восьмеричной системе счисления.
    ‘x’
    Число в шестнадцатеричной системе счисления (буквы в нижнем регистре).
    ‘X’
    Число в шестнадцатеричной системе счисления (буквы в верхнем регистре).
    ‘e’
    Число с плавающей точкой с экспонентой (экспонента в нижнем регистре).
    ‘E’
    Число с плавающей точкой с экспонентой (экспонента в верхнем регистре).
    ‘f ’, ‘F’
    Число с плавающей точкой (обычный формат).
    ‘g’
    Число с плавающей точкой. с экспонентой (экспонента в нижнем регистре),
    если она меньше, чем -4 или точности, иначе обычный формат.
    ‘G’
    Число с плавающей точкой. с экспонентой (экспонента в верхнем регистре),
    если она меньше, чем -4 или точности, иначе обычный формат.
    ‘c’
    Символ (строка из одного символа или число - код символа).
    ‘s’
    Строка.
    ‘%’
    Число умножается на 100, отображается число с плавающей точкой, а за ним знак %.
    И напоследок, несколько примеров:
    >>>
    coord
    =
    (
    3
    ,
    5
    )
    >>>
    'X:
    {0[0]}
    ;
    Y:
    {0[1]}
    '
    format(coord)
    'X: 3;
    Y: 5'
    >>>
    "repr() shows quotes:
    {!r}
    ; str() doesn't:
    {!s}
    "
    format(
    'test1'
    ,
    'test2'
    )
    "repr() shows quotes: 'test1'; str() doesn't: test2"
    >>>
    '
    {:<30}
    '
    format(
    'left aligned'
    )
    'left aligned
    '
    >>>
    '
    {:>30}
    '
    format(
    'right aligned'
    )
    '
    right aligned'
    >>>
    '
    {:^30}
    '
    format(
    'centered'
    )
    '
    centered
    '
    >>>
    '
    {:*^30}
    '
    format(
    'centered'
    )
    # use '*' as a fill char
    '***********centered***********'
    >>>
    '
    {:+f}
    ;
    {:+f}
    '
    format(
    3.14
    ,
    -
    3.14
    )
    # show it always
    '+3.140000; -3.140000'
    >>>
    '
    {: f}
    ;
    {: f}
    '
    format(
    3.14
    ,
    -
    3.14
    )
    # show a space for positive numbers
    ' 3.140000; -3.140000'
    >>>
    '
    {:-f}
    ;
    {:-f}
    '
    format(
    3.14
    ,
    -
    3.14
    )
    # show only the minus -- same as '{:f};
    ˓→
    {:f}'
    '3.140000; -3.140000'
    >>>
    # format also supports binary numbers
    >>>
    "int:
    {0:d}
    ;
    hex:
    {0:x}
    ;
    oct:
    {0:o}
    ;
    bin:
    {0:b}
    "
    format(
    42
    )
    'int: 42;
    hex: 2a;
    oct: 52;
    bin: 101010'
    >>>
    # with 0x, 0o, or 0b as prefix:
    >>>
    "int:
    {0:d}
    ;
    hex:
    {0:#x}
    ;
    oct:
    {0:#o}
    ;
    bin:
    {0:#b}
    "
    format(
    42
    )
    'int: 42;
    hex: 0x2a;
    oct: 0o52;
    bin: 0b101010'
    >>>
    points
    =
    19.5
    >>>
    total
    =
    22
    >>>
    'Correct answers:
    {:.2%}
    '
    format(points
    /
    total)
    'Correct answers: 88.64%'
    13.1. Форматирование строк с помощью метода format
    47

    Глава
    14
    Списки (list). Функции и методы списков
    Сегодня я расскажу о таком типе данных, как списки, операциях над ними и методах, о генераторах списков и о применении списков.
    Что такое списки?
    Списки в Python - упорядоченные изменяемые коллекции объектов произвольных типов
    (почти как массив, но типы могут отличаться).
    Чтобы использовать списки, их нужно создать. Создать список можно несколькими спо- собами. Например, можно обработать любой итерируемый объект (например,
    строку
    )
    встроенной функцией list:
    >>>
    list
    (
    'список'
    )
    ['с', 'п', 'и', 'с', 'о', 'к']
    Список можно создать и при помощи литерала:
    >>>
    s
    =
    []
    # Пустой список
    >>>
    l
    =
    [
    's'
    ,
    'p'
    , [
    'isok'
    ],
    2
    ]
    >>>
    s
    []
    >>>
    l
    ['s', 'p', ['isok'], 2]
    Как видно из примера, список может содержать любое количество любых объектов (в том числе и вложенные списки), или не содержать ничего.
    И еще один способ создать список - это генераторы списков. Генератор списков - способ
    48

    Самоучитель Python, Выпуск 0.2
    построить новый список, применяя выражение к каждому элементу последовательно- сти. Генераторы списков очень похожи на цикл for
    >>>
    c
    =
    [c
    *
    3
    for c
    in
    'list'
    ]
    >>>
    c
    ['lll', 'iii', 'sss', 'ttt']
    Возможна и более сложная конструкция генератора списков:
    >>>
    c
    =
    [c
    *
    3
    for c
    in
    'list'
    if c
    !=
    'i'
    ]
    >>>
    c
    ['lll', 'sss', 'ttt']
    >>>
    c
    =
    [c
    +
    d for c
    in
    'list'
    if c
    !=
    'i'
    for d
    in
    'spam'
    if d
    !=
    'a'
    ]
    >>>
    c
    ['ls', 'lp', 'lm', 'ss', 'sp', 'sm', 'ts', 'tp', 'tm']
    Но в сложных случаях лучше пользоваться обычным циклом for для генерации списков.
    Функции и методы списков
    Создать создали, теперь нужно со списком что-то делать. Для списков доступны основные встроенные функции
    , а также методы списков.
    Таблица “методы списков”
    Метод
    Что делает
    list.append(x)
    Добавляет элемент в конец списка
    list.extend(L)
    Расширяет список list, добавляя в конец все элементы списка L
    list.insert(i, x)
    Вставляет на i-ый элемент значение x
    list.remove(x)
    Удаляет первый элемент в списке, имеющий значение x. ValueError,
    если такого элемента не существует
    list.pop([i])
    Удаляет i-ый элемент и возвращает его. Если индекс не указан,
    удаляется последний элемент
    list.index(x,
    [start [, end]])
    Возвращает положение первого элемента со значением x (при этом поиск ведется от start до end)
    list.count(x)
    Возвращает количество элементов со значением x
    list.sort([key=функция])
    Сортирует список на основе функции
    list.reverse()
    Разворачивает список
    list.copy()
    Поверхностная копия списка
    list.clear()
    Очищает список
    Нужно отметить, что методы списков, в отличие от строковых методов
    , изменяют сам список, а потому результат выполнения не нужно записывать в эту переменную.
    >>>
    l
    =
    [
    1
    ,
    2
    ,
    3
    ,
    5
    ,
    7
    ]
    >>>
    l sort()
    14.2. Функции и методы списков
    49

    Самоучитель Python, Выпуск 0.2
    >>>
    l
    [1, 2, 3, 5, 7]
    >>>
    l
    =
    l sort()
    >>>
    print
    (l)
    None
    И, напоследок, примеры работы со списками:
    >>>
    a
    =
    [
    66.25
    ,
    333
    ,
    333
    ,
    1
    ,
    1234.5
    ]
    >>>
    print
    (a count(
    333
    ), a count(
    66.25
    ), a count(
    'x'
    ))
    2 1 0
    >>>
    a insert(
    2
    ,
    -
    1
    )
    >>>
    a append(
    333
    )
    >>>
    a
    [66.25, 333, -1, 333, 1, 1234.5, 333]
    >>>
    a index(
    333
    )
    1
    >>>
    a remove(
    333
    )
    >>>
    a
    [66.25, -1, 333, 1, 1234.5, 333]
    >>>
    a reverse()
    >>>
    a
    [333, 1234.5, 1, 333, -1, 66.25]
    >>>
    a sort()
    >>>
    a
    [-1, 1, 66.25, 333, 333, 1234.5]
    Изредка, для увеличения производительности, списки заменяют гораздо менее гибкими массивами
    (хотя в таких случаях обычно используют сторонние библиотеки, например
    NumPy
    ).
    14.3. Таблица “методы списков”
    50

    Глава
    15
    Индексы и срезы
    Сегодня мы поговорим об операциях взятия индекса и среза.
    Взятие элемента по индексу
    Как и в других языках программирования, взятие по индексу:
    >>>
    a
    =
    [
    1
    ,
    3
    ,
    8
    ,
    7
    ]
    >>>
    a[
    0
    ]
    1
    >>>
    a[
    3
    ]
    7
    >>>
    a[
    4
    ]
    Traceback (most recent call last):
    File
    ""
    , line
    1
    , in
    IndexError
    : list index out of range
    Как и во многих других языках, нумерация элементов начинается с нуля. При попытке доступа к несуществующему индексу возникает исключение IndexError.
    В данном примере переменная a являлась списком
    , однако взять элемент по индексу можно и у других типов: строк, кортежей.
    В Python также поддерживаются отрицательные индексы, при этом нумерация идёт с конца, например:
    >>>
    a
    =
    [
    1
    ,
    3
    ,
    8
    ,
    7
    ]
    >>>
    a[
    -
    1
    ]
    7
    >>>
    a[
    -
    4
    ]
    51

    Самоучитель Python, Выпуск 0.2
    1
    >>>
    a[
    -
    5
    ]
    Traceback (most recent call last):
    File
    ""
    , line
    1
    , in
    IndexError
    : list index out of range
    Срезы
    В Python, кроме индексов, существуют ещё и срезы.
    item[START:STOP:STEP] - берёт срез от номера START, до STOP (не включая его), с шагом STEP.
    По умолчанию START = 0, STOP = длине объекта, STEP = 1. Соответственно, какие-нибудь (а возможно, и все) параметры могут быть опущены.
    >>>
    a
    =
    [
    1
    ,
    3
    ,
    8
    ,
    7
    ]
    >>>
    a[:]
    [1, 3, 8, 7]
    >>>
    a[
    1
    :]
    [3, 8, 7]
    >>>
    a[:
    3
    ]
    [1, 3, 8]
    >>>
    a[::
    2
    ]
    [1, 8]
    Также все эти параметры могут быть и отрицательными:
    >>>
    a
    =
    [
    1
    ,
    3
    ,
    8
    ,
    7
    ]
    >>>
    a[::
    -
    1
    ]
    [7, 8, 3, 1]
    >>>
    a[:
    -
    2
    ]
    [1, 3]
    >>>
    a[
    -
    2
    ::
    -
    1
    ]
    [8, 3, 1]
    >>>
    a[
    1
    :
    4
    :
    -
    1
    ]
    []
    В последнем примере получился пустой список, так как START < STOP, а STEP отрицатель- ный. То же самое произойдёт, если диапазон значений окажется за пределами объекта:
    >>>
    a
    =
    [
    1
    ,
    3
    ,
    8
    ,
    7
    ]
    >>>
    a[
    10
    :
    20
    ]
    []
    Также с помощью срезов можно не только извлекать элементы, но и добавлять и удалять элементы (разумеется, только для изменяемых последовательностей).
    >>>
    a
    =
    [
    1
    ,
    3
    ,
    8
    ,
    7
    ]
    >>>
    a[
    1
    :
    3
    ]
    =
    [
    0
    ,
    0
    ,
    0
    ]
    >>>
    a
    15.2. Срезы
    52

    Самоучитель Python, Выпуск 0.2
    [1, 0, 0, 0, 7]
    >>>
    del a[:
    -
    3
    ]
    >>>
    a
    [0, 0, 7]
    15.2. Срезы
    53

    Глава
    16
    Кортежи (tuple)
    Сегодня я расскажу о таком типе данных, как кортежи (tuple) и о том, где они применя- ются.
    Кортеж, по сути - неизменяемый список
    Зачем нужны кортежи, если есть списки?
    • Защита от дурака. То есть кортеж защищен от изменений, как намеренных (что пло- хо), так и случайных (что хорошо).
    • Меньший размер. Дабы не быть голословным:
    >>>
    a
    =
    (
    1
    ,
    2
    ,
    3
    ,
    4
    ,
    5
    ,
    6
    )
    >>>
    b
    =
    [
    1
    ,
    2
    ,
    3
    ,
    4
    ,
    5
    ,
    6
    ]
    >>>
    a
    __sizeof__()
    36
    >>>
    b
    __sizeof__()
    44
    • Возможность использовать кортежи в качестве ключей словаря
    :
    >>> d = {(1, 1, 1) : 1}
    >>> d
    {(1, 1, 1): 1}
    >>> d = {[1, 1, 1] : 1}
    Traceback (most recent call last):
    File "", line 1, in d = {[1, 1, 1] : 1}
    TypeError: unhashable type: 'list'
    54

    Самоучитель Python, Выпуск 0.2
    Как работать с кортежами?
    С преимуществами кортежей разобрались, теперь встает вопрос - а как с ними работать.
    Примерно так же, как и со списками.
    Создаем пустой кортеж:
    >>>
    a
    =
    tuple
    ()
    # С помощью встроенной функции tuple()
    >>>
    a
    ()
    >>>
    a
    =
    ()
    # С помощью литерала кортежа
    >>>
    a
    ()
    >>>
    Создаем кортеж из одного элемента:
    >>>
    a
    =
    (
    's'
    )
    >>>
    a
    's'
    Стоп. Получилась строка. Но как же так? Мы же кортеж хотели! Как же нам кортеж полу- чить?
    >>>
    a
    =
    (
    's'
    , )
    >>>
    a
    ('s',)
    Ура! Заработало! Все дело - в запятой. Сами по себе скобки ничего не значат, точнее, зна- чат то, что внутри них находится одна инструкция, которая может быть отделена пробе- лами, переносом строк и прочим мусором. Кстати, кортеж можно создать и так:
    >>>
    a
    =
    's'
    ,
    >>>
    a
    ('s',)
    Но все же не увлекайтесь, и ставьте скобки, тем более, что бывают случаи, когда скобки необходимы.
    Ну и создать кортеж из итерируемого объекта можно с помощью все той же пресловутой функции tuple()
    >>>
    a
    =
    tuple
    (
    'hello, world!'
    )
    >>>
    a
    ('h', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!')
    16.2. Как работать с кортежами?
    55

    Самоучитель Python, Выпуск 0.2
    Операции с кортежами
    Все операции над списками
    , не изменяющие список (сложение, умножение на число, ме- тоды index() и count() и некоторые другие операции). Можно также по-разному менять элементы местами и так далее.
    Например, гордость программистов на python - поменять местами значения двух пере- менных:
    a, b
    =
    b, a
    16.3. Операции с кортежами
    56

    Глава
    17
    Словари (dict) и работа с ними. Методы словарей
    Сегодня я расскажу о таком типе данных, как словари, о работе со словарями, операциях над ними, методах, о генераторах словарей.
    Словари в Python - неупорядоченные коллекции произвольных объектов с доступом по ключу. Их иногда ещё называют ассоциативными массивами или хеш-таблицами.
    Чтобы работать со словарём, его нужно создать. Создать его можно несколькими спосо- бами. Во-первых, с помощью литерала:
    >>>
    d
    =
    {}
    >>>
    d
    {}
    >>>
    d
    =
    {
    'dict'
    :
    1
    ,
    'dictionary'
    :
    2
    }
    >>>
    d
    {'dict': 1, 'dictionary': 2}
    Во-вторых, с помощью функции dict:
    >>>
    d
    =
    dict
    (short
    =
    'dict'
    , long
    =
    'dictionary'
    )
    >>>
    d
    {'short': 'dict', 'long': 'dictionary'}
    >>>
    d
    =
    dict
    ([(
    1
    ,
    1
    ), (
    2
    ,
    4
    )])
    >>>
    d
    {1: 1, 2: 4}
    В-третьих, с помощью метода fromkeys:
    >>>
    d
    =
    dict fromkeys([
    'a'
    ,
    'b'
    ])
    >>>
    d
    {'a': None, 'b': None}
    >>>
    d
    =
    dict fromkeys([
    'a'
    ,
    'b'
    ],
    100
    )
    57

    Самоучитель Python, Выпуск 0.2
    >>>
    d
    {'a': 100, 'b': 100}
    В-четвертых, с помощью генераторов словарей, которые очень похожи на генераторы списков
    >>>
    d
    =
    {a: a
    **
    2
    for a
    in range
    (
    7
    )}
    >>>
    d
    {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36}
    Теперь попробуем добавить записей в словарь и извлечь значения ключей:
    >>>
    d
    =
    {
    1
    :
    2
    ,
    2
    :
    4
    ,
    3
    :
    9
    }
    >>>
    d[
    1
    ]
    2
    >>>
    d[
    4
    ]
    =
    4
    **
    2
    >>>
    d
    {1: 2, 2: 4, 3: 9, 4: 16}
    >>>
    d[
    '1'
    ]
    Traceback (most recent call last):
    File "", line 1, in d['1']
    KeyError
    : '1'
    Как видно из примера, присвоение по новому ключу расширяет словарь, присвоение по существующему ключу перезаписывает его, а попытка извлечения несуществующе- го ключа порождает исключение. Для избежания исключения есть специальный метод
    (см. ниже), или можно перехватывать исключение
    Что же можно еще делать со словарями? Да то же самое, что и с другими объектами:
    встроенные функции
    ,
    ключевые слова
    (например,
    циклы for и while
    ), а также специаль- ные методы словарей.
    1   2   3   4   5   6   7   8   9   ...   12


    написать администратору сайта