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

  • Кортеж, содержащий 0 или 1 элемент

  • Замечание для программистов на Perl

  • 12.4. Словарь 90 A Byte of Python (Russian), Версия 2.02(продолжение с предыдущей страницы)Адрес Guido: guido@python.orgКак это работает

  • Ключевые Аргументы и Словари

  • 12.5. Последовательности

  • Вывод: 12.7. Ссылки

  • Пример

  • Вывод: $ python3 str_methods.pyДа, строка начинается на "Swa"Да, она содержит строку "a"Да, она содержит строку "war"Бразилия_*_Россия_*_Индия_*_КитайКак это работает

  • Книга на вашем родном языке 6 2 Переводы 7 1 Доступные переводы переводы 7 3 Предисловие 16


    Скачать 0.72 Mb.
    НазваниеКнига на вашем родном языке 6 2 Переводы 7 1 Доступные переводы переводы 7 3 Предисловие 16
    Дата16.04.2023
    Размер0.72 Mb.
    Формат файлаpdf
    Имя файлаAByteofPythonRussian-2.02.pdf
    ТипКнига
    #1065836
    страница8 из 14
    1   ...   4   5   6   7   8   9   10   11   ...   14
    Как это работает:
    Переменная zoo обозначает кортеж элементов. Как мы видим, функция len позволяет получить длину кортежа. Это также указывает на то, что кортеж является
    последовательностью
    Теперь мы перемещаем этих животных в новый зоопарк, поскольку старый зоопарк закрывается. Поэтому кортеж new_zoo содержит тех животных, ко- торые уже там, наряду с привезёнными из старого зоопарка. Возвращаясь к реальности, обратите внимание на то, что кортеж внутри кортежа не теряет своей индивидуальности.
    12.3. Кортеж
    88

    A Byte of Python (Russian), Версия 2.02
    Доступ к элементам кортежа осуществляется указанием позиции элемента,
    заключённой в квадратные скобки – точно так же, как мы это делали для спис- ков. Это называется оператором индексирования. Доступ к третьему элементу в
    new_zoo мы получаем, указывая new_zoo[2]
    , а доступ к третьему элементу внутри третьего элемента в кортеже new_zoo
    – указывая new_zoo[2][2]
    . Это достаточно просто, как только вы поймёте принцип.
    Скобки
    Хотя скобки и не являются обязательными, я предпочитаю всегда указывать их, чтобы было очевидно, что это кортеж, особенно в двусмысленных случаях. Например,
    print(1,
    2,3)
    и print( (1,2,3) )
    делают разные вещи: первое выражение выводит три числа,
    тогда как второе – кортеж, содержащий эти три числа.
    Кортеж, содержащий 0 или 1 элемент
    Пустой кортеж создаётся при помощи пустой пары скобок – «
    myempty = ()
    ». Однако,
    с кортежем из одного элемента не всё так просто. Его нужно указывать при помощи за- пятой после первого (и единственного) элемента, чтобы Python мог отличить кортеж от скобок, окружающих объект в выражении. Таким образом, чтобы получить кортеж, со- держащий элемент
    2
    , вам потребуется указать «
    singleton = (2,)
    ».
    Замечание для программистов на Perl
    Список внутри списка не теряет своей индивидуальности, т.е. списки не развёртываются,
    как в Perl. Это же относится к кортежу внутри кортежа, или кортежу внутри списка, или списку внутри кортежа и т.д. В Python все они рассматриваются как объекты, хранящиеся внутри другого объекта – только и всего.
    12.4 Словарь
    Словарь – это некий аналог адресной книги, в которой можно найти адрес или контакт- ную информацию о человеке, зная лишь его имя; т.е. некоторые ключи (имена) связаны со значениями (информацией). Заметьте, что ключ должен быть уникальным – вы ведь не сможете получить корректную информацию, если у вас записаны два человека с пол- ностью одинаковыми именами.
    Обратите также внимание на то, что в словарях в качестве ключей могут использоваться только неизменяемые объекты (как строки), а в качестве значений можно использовать как неизменяемые, так и изменяемые объекты. Точнее говоря, в качестве ключей должны использоваться только простые объекты.
    12.4. Словарь
    89

    A Byte of Python (Russian), Версия 2.02
    Пары ключ-значение указываются в словаре следующим образом: «
    d = {key1 :
    value1, key2 : value2 }
    ». Обратите внимание, что ключ и значение разделяются двоеточием, а пары друг от друга отделяются запятыми, а затем всё это заключается в фигурные скобки.
    Помните, что пары ключ-значение никоим образом не упорядочены в словаре. Если вам необходим некоторый порядок, вам придётся отдельно отсортировать словарь перед об- ращением к нему.
    Словари являются экземплярами/объектами класса dict
    Пример: (сохраните как using_dict.py
    )
    # 'ab' - сокращение от 'a'ddress'b'ook
    ab
    =
    {
    'Swaroop'
    :
    'swaroop@swaroopch.com'
    ,
    'Larry'
    :
    'larry@wall.org'
    ,
    'Matsumoto'
    :
    'matz@ruby-lang.org'
    ,
    'Spammer'
    :
    'spammer@hotmail.com'
    }
    print
    (
    "Адрес Swaroop'а:"
    , ab[
    'Swaroop'
    ])
    # Удаление пары ключ-значение
    del
    ab[
    'Spammer'
    ]
    print
    (
    '
    \nВ адресной книге
    {0}
    контакта
    \n'
    format(
    len
    (ab)))
    for
    name, address
    in
    ab items():
    print
    (
    'Контакт
    {0}
    с адресом
    {1}
    '
    format(name, address))
    # Добавление пары ключ-значение
    ab[
    'Guido'
    ]
    =
    'guido@python.org'
    if
    'Guido'
    in
    ab:
    print
    (
    "
    \nАдрес Guido:"
    , ab[
    'Guido'
    ])
    Вывод:
    $ python3 using_dict.py
    Адрес Swaroop'а: swaroop@swaroopch.com
    В адресной книге 3 контакта
    Контакт Swaroop с адресом swaroop@swaroopch.com
    Контакт Matsumoto с адресом matz@ruby-lang.org
    Контакт Larry с адресом larry@wall.org
    (продолжение на следующей странице)
    12.4. Словарь
    90

    A Byte of Python (Russian), Версия 2.02
    (продолжение с предыдущей страницы)
    Адрес Guido: guido@python.org
    Как это работает:
    Мы создаём словарь ab
    2
    при помощи обозначений, описанных ранее. Затем мы обращаемся к парам ключ-значение, указывая ключ в операторе индек- сирования, которым мы пользовались для списков и кортежей. Как видите,
    синтаксис прост.
    Удалять пары ключ-значение можно при помощи нашего старого доброго оператора del
    . Мы просто указываем имя словаря и оператор индексирования для удаляемого ключа, после чего передаём это оператору del
    . Для этой опе- рации нет необходимости знать, какое значение соответствует данному клю- чу.
    Далее мы обращаемся ко всем парам ключ-значение нашего словаря, исполь- зуя метод items
    , который возвращает список кортежей, каждый из которых содержит пару элементов: ключ и значение. Мы получаем эту пару и при- сваиваем её значение переменным name и
    address соответственно в цикле for..in
    , а затем выводим эти значения на экран в блоке for.
    Новые пары ключ-значение добавляются простым обращением к нужному ключу при помощи оператора индексирования и присваиванием ему неко- торого значения, как мы сделали для Guido в примере выше.
    Проверить, существует ли пара ключ-значение, можно при помощи оператора in
    Чтобы просмотреть список всех методов класса dict смотрите help(dict)
    Ключевые Аргументы и Словари
    К слову, если вы использовали ключевые аргументы в ваших функциях, вы уже исполь- зовали словари! Только подумайте: вы указали пару ключ-значение среди параметров функции при её определении, а когда обращаетесь к переменным внутри функции, то это, фактически, обращение по ключу к словарю (который в терминах разработчиков ком- пиляторов называется таблицей имён).
    2
    address book – англ. «адресная книга» (прим. перев.)
    12.4. Словарь
    91

    A Byte of Python (Russian), Версия 2.02 12.5 Последовательности
    Списки, кортежи и строки являются примерами последовательностей. Но что такое по- следовательности и что в них такого особенного?
    Основные возможности – это проверка принадлежности (т.е. выражения «
    in
    » и «
    not in
    ») и оператор индексирования, позволяющий получить напрямую некоторый эле- мент последовательности.
    Все три типа последовательностей, упоминавшиеся выше (списки, кортежи и строки),
    также предоставляют операцию получения вырезки, которая позволяет получить вырез- ку последовательности, т.е. её фрагмент.
    Пример: (сохраните как seq.py
    )
    shoplist
    =
    [
    'яблоки'
    ,
    'манго'
    ,
    'морковь'
    ,
    'бананы'
    ]
    name
    =
    'swaroop'
    # Операция индексирования
    print
    (
    'Элемент 0 -'
    , shoplist[
    0
    ])
    print
    (
    'Элемент 1 -'
    , shoplist[
    1
    ])
    print
    (
    'Элемент 2 -'
    , shoplist[
    2
    ])
    print
    (
    'Элемент 3 -'
    , shoplist[
    3
    ])
    print
    (
    'Элемент -1 -'
    , shoplist[
    -
    1
    ])
    print
    (
    'Элемент -2 -'
    , shoplist[
    -
    2
    ])
    print
    (
    'Символ 0 -'
    , name[
    0
    ])
    # Вырезка из списка
    print
    (
    'Элементы с 1 по 3:'
    , shoplist[
    1
    :
    3
    ])
    print
    (
    'Элементы с 2 до конца:'
    , shoplist[
    2
    :])
    print
    (
    'Элементы с 1 по -1:'
    , shoplist[
    1
    :
    -
    1
    ])
    print
    (
    'Элементы от начала до конца:'
    , shoplist[:])
    # Вырезка из строки
    print
    (
    'Символы с 1 по 3:'
    , name[
    1
    :
    3
    ])
    print
    (
    'Символы с 2 до конца:'
    , name[
    2
    :])
    print
    (
    'Символы с 1 до -1:'
    , name[
    1
    :
    -
    1
    ])
    print
    (
    'Символы от начала до конца:'
    , name[:])
    Вывод:
    $ python3 seq.py
    Элемент 0 - яблоки
    Элемент 1 - манго
    Элемент 2 - морковь
    Элемент 3 - бананы
    Элемент -1 - бананы
    (продолжение на следующей странице)
    12.5. Последовательности
    92

    A Byte of Python (Russian), Версия 2.02
    (продолжение с предыдущей страницы)
    Элемент -2 - морковь
    Символ 0 - s
    Элементы с 1 по 3: ['манго', 'морковь']
    Элементы с 2 до конца: ['морковь', 'бананы']
    Элементы с 1 по -1: ['манго', 'морковь']
    Элементы от начала до конца: ['яблоки', 'манго', 'морковь', 'бананы']
    Символы с 1 по 3: wa
    Символы с 2 до конца: aroop
    Символы с 1 до -1: waroo
    Символы от начала до конца: swaroop
    Как это работает:
    Прежде всего, мы видим, как использовать индексы для получения отдельных элементов последовательности. Это ещё называют приписыванием индекса. Ко- гда мы указываем число в квадратных скобках после последовательности, как показано выше, Python извлекает элемент, соответствующий указанной пози- ции в последовательности. Помните, что Python начинает отсчёт с 0. Поэтому shoplist[0]
    извлекает первый элемент, а shoplist[3]
    – четвёртый элемент последовательности shoplist
    Индекс также может быть отрицательным числом. В этом случае позиция от- считывается от конца последовательности. Поэтому shoplist[-1]
    указывает на последний элемент последовательности shoplist
    , а shoplist[-2]
    – на предпоследний.
    Операция вырезки производится при помощи указания имени последова- тельности, за которым может следовать пара чисел, разделённых двоеточием и заключённых в квадратные скобки. Заметьте, как это похоже на операцию индексирования, которой мы пользовались до сих пор. Помните, что числа в скобках необязательны, тогда как двоеточие – обязательно.
    Первое число (перед двоеточием) в операции вырезки указывает позицию, с которой вырезка должна начинаться, а второе число (после двоеточия) указы- вает, где вырезка должна закончиться. Если первое число не указано, Python начнёт вырезку с начала последовательности. Если пропущено второе число,
    Python закончит вырезку у конца последовательности. Обратите внимание,
    что полученная вырезка будет начинаться с указанной начальной позиции,
    а заканчиваться прямо перед указанной конечной позицией, т.е. начальная позиция будет включена в вырезку, а конечная – нет.
    Таким образом,
    shoplist[1:3]
    возвращает вырезку из последовательности,
    начинающуюся с позиции 1, включает позицию 2, но останавливается на позиции 3, и поэтому возвращает вырезку из двух элементов. Аналогично,
    shoplist[:]
    возвращает копию всей последовательности.
    Вырезка может осуществляться и с отрицательными значениями. Отрица-
    12.5. Последовательности
    93

    A Byte of Python (Russian), Версия 2.02
    тельные числа обозначают позицию с конца последовательности. Например,
    shoplist[:-1]
    вернёт вырезку из последовательности, исключающую по- следний элемент, но содержащую все остальные.
    Кроме того, можно также указать третий аргумент для вырезки, который будет обозначать шаг вырезки (по умолчанию шаг вырезки равен 1):
    >>>
    shoplist
    =
    [
    'яблоки'
    ,
    'манго'
    ,
    'морковь'
    ,
    'бананы'
    ]
    >>>
    shoplist[::
    1
    ]
    ['яблоки', 'манго', 'морковь', 'бананы']
    >>>
    shoplist[::
    2
    ]
    ['яблоки', 'морковь']
    >>>
    shoplist[::
    3
    ]
    ['яблоки', 'бананы']
    >>>
    shoplist[::
    -
    1
    ]
    ['бананы', 'морковь', 'манго', 'яблоки']
    Обратите внимание на то, что когда шаг равен 2, мы получаем элементы, на- ходящиеся на позициях 0, 2, … Когда шаг равен 3, мы получаем элементы с позиций 0, 3, … и т.д.
    Попробуйте разные комбинации параметров вырезки, используя интерактивную оболоч- ку интерпретатора Python, т.е. его командную строку, чтобы сразу видеть результат. По- следовательности замечательны тем, что они дают возможность обращаться к кортежам,
    спискам и строкам одним и тем же способом!
    12.6 Множество
    Множества – это неупорядоченные наборы простых объектов. Они необходимы тогда, ко- гда присутствие объекта в наборе важнее порядка или того, сколько раз данный объект там встречается.
    Используя множества, можно осуществлять проверку принадлежности, определять, яв- ляется ли данное множество подмножеством другого множества, находить пересечения множеств и так далее.
    >>>
    bri
    =
    set
    ([
    'Бразилия'
    ,
    'Россия'
    ,
    'Индия'
    ])
    >>>
    'Индия'
    in
    bri
    True
    >>>
    'США'
    in
    bri
    False
    >>>
    bric
    =
    bri copy()
    >>>
    bric add(
    'Китай'
    )
    >>>
    bric issuperset(bri)
    True
    (продолжение на следующей странице)
    12.6. Множество
    94

    A Byte of Python (Russian), Версия 2.02
    (продолжение с предыдущей страницы)
    >>>
    bri remove(
    'Россия'
    )
    >>>
    bri
    &
    bric
    # OR bri.intersection(bric)
    {'Бразилия', 'Индия'}
    Как это работает:
    Этот пример достаточно нагляден, так как использует основы теории мно- жеств из школьного курса математики.
    12.7 Ссылки
    Когда мы создаём объект и присваиваем его переменной, переменная только ссылается
    на объект, а не представляет собой этот объект! То есть имя переменной указывает на ту часть памяти компьютера, где хранится объект. Это называется привязкой имени к объекту.
    Обычно вам не следует об этом беспокоиться, однако есть некоторый неочевидный эф- фект, о котором нужно помнить:
    Пример: (сохраните как reference.py
    )
    print
    (
    'Простое присваивание'
    )
    shoplist
    =
    [
    'яблоки'
    ,
    'манго'
    ,
    'морковь'
    ,
    'бананы'
    ]
    mylist
    =
    shoplist
    # mylist - лишь ещё одно имя, указывающее на тот же объект!
    del
    shoplist[
    0
    ]
    # Я сделал первую покупку, поэтому удаляю её из списка
    print
    (
    'shoplist:'
    , shoplist)
    print
    (
    'mylist:'
    , mylist)
    # Обратите внимание, что и shoplist, и mylist выводят один и тот же список
    # без пункта "яблоко", подтверждая тем самым, что они указывают на один
    # объект.
    print
    (
    'Копирование при помощи полной вырезки'
    )
    mylist
    =
    shoplist[:]
    # создаём копию путём полной вырезки
    del
    mylist[
    0
    ]
    # удаляем первый элемент
    print
    (
    'shoplist:'
    , shoplist)
    print
    (
    'mylist:'
    , mylist)
    # Обратите внимание, что теперь списки разные
    Вывод:_12.7._Ссылки'>Вывод:
    12.7. Ссылки
    95

    A Byte of Python (Russian), Версия 2.02
    $ python3 reference.py
    Простое присваивание shoplist: ['манго', 'морковь', 'бананы']
    mylist: ['манго', 'морковь', 'бананы']
    Копирование при помощи полной вырезки shoplist: ['манго', 'морковь', 'бананы']
    mylist: ['морковь', 'бананы']
    Как это работает:
    Большая часть объяснения содержится в комментариях.
    Помните, что если вам нужно сделать копию списка или подобной последо- вательности, или другого сложного объекта (не такого простого объекта, как целое число), вам следует воспользоваться операцией вырезки. Если вы про- сто присвоите имя переменной другому имени, оба они будут ссылаться на один и тот же объект, а это может привести к проблемам, если вы не осторож- ны.
    12.8 Ещё о строках
    Мы уже детально обсуждали строки ранее. Что же ещё можно о них узнать? Что ж, вы знали, например, что строки также являются объектами и имеют методы, при помощи которых можно делать практически всё: от проверки части строки до удаления краевых пробелов?
    Все строки, используемые вами в программах, являются объектами класса str
    . Некоторые полезные методы этого класса продемонстрированы на примере ниже. Чтобы посмотреть весь список методов, выполните help(str)
    Пример: (сохраните как str_methods.py
    )
    name
    =
    'Swaroop'
    # Это объект строки
    if
    name startswith(
    'Swa'
    ):
    print
    (
    'Да, строка начинается на "Swa"'
    )
    if
    'a'
    in
    name:
    print
    (
    'Да, она содержит строку "a"'
    )
    if
    name find(
    'war'
    )
    != -
    1
    :
    print
    (
    'Да, она содержит строку "war"'
    )
    delimiter
    =
    '_*_'
    (продолжение на следующей странице)
    12.8. Ещё о строках
    96

    A Byte of Python (Russian), Версия 2.02
    (продолжение с предыдущей страницы)
    mylist
    =
    [
    'Бразилия'
    ,
    'Россия'
    ,
    'Индия'
    ,
    'Китай'
    ]
    print
    (delimiter join(mylist))
    Вывод:
    $ python3 str_methods.py
    Да, строка начинается на "Swa"
    Да, она содержит строку "a"
    Да, она содержит строку "war"
    Бразилия_*_Россия_*_Индия_*_Китай
    Как это работает:
    Здесь мы видим сразу несколько методов строк в действии. Метод startswith служит для того, чтобы определять, начинается ли строка с некоторой заданной подстроки. Опе- ратор in используется для проверки, является ли некоторая строка частью данной строки.
    Метод find используется для определения позиции данной подстроки в строке;
    find воз- вращает -1, если подстрока не обнаружена. В классе str также имеется отличный метод для объединения (
    join
    )
    3
    элементов последовательности с указанной строкой в качестве разделителя между элементами, возвращающий большую строку, сгенерированную та- ким образом.
    12.9 Резюме
    Мы детально рассмотрели различные встроенные структуры данных Python. Эти струк- туры данных будут крайне важны для написания программ существенного размера.
    Теперь, когда мы накопили достаточно базовых знаний о Python, далее посмотрим, как проектировать и писать настоящую программу на Python.
    3
    join – англ. «объединять» (прим.перев.)
    1   ...   4   5   6   7   8   9   10   11   ...   14


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