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

  • Пример: сохраните как lambda.py)points=[ {x:2,y:3}, {x:4,y:1} ]points sort(key=lambda

  • 18.11. Необрабатываемые строки Что дальше

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


    Скачать 0.76 Mb.
    НазваниеКнига на вашем родном языке Переводы 7 1 Доступные переводы переводы 7 3 Предисловие 16 1
    АнкорУкус питона
    Дата09.11.2020
    Размер0.76 Mb.
    Формат файлаpdf
    Имя файлаAByteofPythonRussian-2.02.pdf
    ТипКнига
    #149233
    страница13 из 14
    1   ...   6   7   8   9   10   11   12   13   14
    17.3. Серия Модуль недели

    Дополнительно
    К настоящему моменту мы уже рассмотрели большую часть того, что вам придётся использовать при работе с Python. В этой главе мы охватим некоторые дополнительные аспекты, которые помогут отшлифовать ваши знания Передача кортежей
    Хотелось ли вам когда-нибудь, чтобы функция возвращала не один результата два Это возможно. Всё, что для этого нужно, – использовать кортеж.
    >>>
    def
    get_error_details
    ():
    ...
    return
    (
    2
    ,
    'описание ошибки No2'
    )
    ...
    >>>
    errnum, описание ошибки Обратите внимание, что использование выражения «
    a, b = некоторое выражение>
    »
    интерпретирует результат как кортеж из двух значений.
    Чтобы интерпретировать результат как «
    (a, <всё остальное, нужно просто поставить звёздочку, как это делалось для параметров функций, 3, Это также подразумевает, что поменять местами два значения в Python быстрее всего можно так

    A Byte of Python (Russian), Версия 2.02
    >>>
    a
    =
    5
    ; b
    =
    8
    >>>
    a, b
    =
    b, a
    >>>
    a, b
    (8, 5)
    18.2 Специальные методы
    Есть ряд методов, играющих особую роль для классов. Например,
    __init__
    и
    __del__
    Специальные методы служат для того, чтобы имитировать поведение встроенных типов данных. Например, всё, что потребуется для использования операции индексирования x[индекс]
    применительно к своему классу (в таком виде, как это делалось для списков и кортежей, это реализовать метод. Кстати, именно этот метод Python использует для самого класса Некоторые полезные специальные методы перечислены в таблице ниже. Все другие методы можно посмотреть в документации
    Имя
    Описание
    __init__(self, Этот метод вызывается прямо перед тем, как вновь созданный объект возвращается для использования.
    __del__(self)
    Вызывается перед уничтожением объекта
    __str__(self)
    Вызывается при использовании функции print или str()
    __lt__(self, Вызывается, когда используется оператор меньше (Существуют и аналогичные методы для всех операторов (+, и т.д.)
    __getitem__(self, key) Вызывается при использовании оператора индексирования x[индекс]
    __len__(self)
    Вызывается при обращении к встроенной функции для объекта-последовательности.
    18.3 Блоки водно выражение
    Мы неоднократно говорили, что каждый блок команд отделяется от других своим собственным уровнем отступа. Однако, существует и исключение. Если блок команд содержит только одно выражение, его можно указывать водной строке с условным оператором или, скажем, оператором цикла. Рассмотрим это на примере:
    >>>
    flag
    =
    True
    >>>
    if
    flag:
    print
    (
    'Да'
    )
    Да
    18.2. Специальные методы

    A Byte of Python (Russian), Версия Обратите внимание, что единственный оператор расположен в той же строке, а не отдельным блоком. Этот способ может подкупить тем, что якобы сокращает программу, ноя настоятельно рекомендую избегать его во всех случаях, кроме проверки ошибок. Прежде всего, потому что гораздо легче добавлять команды, когда уже есть необходимый уровень отступа Lambda-формы
    Ключевое слово lambda используется для создания функций и возврата их значения вовремя выполнения программы принимает параметр, за которым следует одно выражение, которое становится телом функции, а значение этого выражения возвращается новой функцией.
    Пример: сохраните как lambda.py
    )
    points
    =
    [ {
    'x'
    :
    2
    ,
    'y'
    :
    3
    }, {
    'x'
    :
    4
    ,
    'y'
    :
    1
    } ]
    points sort(key
    =
    lambda
    i : Вывод python3 lambda.py
    [{'x': 4, 'y': 1}, {'x': 2, 'y': Как это работает:

    Обратите внимание на то, что метод sort класса list может принимать параметр, определяющий способ сортировки списка (обычно мы думаем только о сортировке по возрастанию или по убыванию. В данном случае мы хотим провести сортировку по собственному принципу, для чего нам необходимо написать соответствующую функцию. Но вместо того, чтобы создавать отдельный блок def для описания функции, которая будет использоваться только в этом месте, мы применяем лямбда-выражение.
    18.5 Генераторы списков
    Генераторы списков служат для создания новых списков на основе существующих. Представьте, что имеется список чисел, на основе которого требуется получить новый список,
    состоящий из всех чисел, умноженных на 2, но только при условии, что само число больше. Генераторы списков подходят для таких задач как нельзя лучше. формы

    A Byte of Python (Russian), Версия Пример сохраните как Вывод python3 list_comprehension.py
    [6, Как это работает:

    В этом примере мы создаём новый список, указав операцию, которую необходимо произвести (
    2 * i
    ), когда выполняется некоторое условие (
    if i > Обратите внимание, что исходный список при этом не изменяется.
    Преимущество использования генераторов списков состоит в том, что это заметно сокращает объёмы стандартного кода, необходимого для циклической обработки каждого элемента списка и сохранения его в новом списке Передача кортежей и словарей в функции
    Для получения параметров, переданных функции, в виде кортежа или словаря, существуют специальные приставки «
    *
    » или «
    **
    » соответственно. Это особенно полезно в случаях, когда функция может принимать переменное число параметров.
    >>>
    def
    powersum
    (power,
    *
    args):
    ...
    '''Возвращает сумму аргументов, возведённых в указанную степень, Поскольку перед переменной args указана приставка «
    *
    », все дополнительные аргументы, переданные функции, сохранятся в args в виде кортежа. В случае использования приставки «
    **
    » все дополнительные параметры будут рассматриваться как пары ключ/значение в словаре. Передача кортежей и словарей в функции

    A Byte of Python (Russian), Версия 2.02 18.7 exec и Функция exec служит для выполнения команд Python, содержащихся в строке или файле, в отличие от самого текста программы. Например, вовремя выполнения программы можно сформировать строку, содержащую текст программы на Python, и запустить его при помощи Здравствуй, Мир!")'
    )
    Здравствуй, Мир!
    Аналогично, функция eval позволяет вычислять корректные выражения Python, содержащиеся в строке. Вот простой пример 18.8 Оператор Оператор assert существует для того, чтобы указать, что нечто является истиной. Например, если требуется гарантировать, что в списке будет хотя бы один элемент, ивы- звать ошибку, если это не так, то оператор assert идеально подойдёт для такой задачи.
    Когда заявленное выражение ложно, вызывается ошибка. Метод возвращает последний элемент списка, одновременно удаляя его оттуда len
    (mylist)
    >=
    1
    >>>
    mylist pop()
    'item'
    >>>
    mylist
    []
    >>>
    assert len
    (mylist)
    >=
    1
    Traceback (most recent call last):
    File
    ""
    , line
    1
    , in Тем не менее, оператор assert следует использовать благоразумно. В большинстве случаев гораздо лучше отлавливать исключения и либо решать соответствующую проблему автоматически, либо выдавать пользователю сообщение об ошибке и завершать работу программы. exec и eval
    140

    A Byte of Python (Russian), Версия 2.02 18.9 Функция Функция repr используется для получения канонического строкового представления объекта. Любопытно, что в большинстве случаев eval(repr(object)) == object
    >>>
    i
    =
    []
    >>>
    i По большому счёту, функция repr служит для получения печатаемого представления объекта. Определив метод
    __repr__
    в собственном классе, можно указать, что он будет возвращать по вызову функции repr
    18.10 Управляющие последовательности
    Попробуйте ответить на вопрос Как указать строку, содержащую одинарную кавычку (Например, строку «
    What's your name?
    ». Её ведь нельзя записать просто как «
    'What's your name?'
    », потому что тогда Python не сможет определить, где начало строки, и где конец. В таком случае придётся каким-то образом указать, что данная одинарная кавычка не обозначает конца строки. Это можно сделать при помощи так называемой управляющей последовательности. Укажите одинарную кавычку как через обратную косую черту. Теперь наша строка будет выглядеть так your Другой способ записи такой специфической строки –
    "What's your name?"
    , тес использованием двойных кавычек. Аналогично следует использовать управляющую последовательность для вставки двойной кавычки в строку, ограниченную двойными кавычками. Сама же обратная наклонная черта указывается управляющей последовательностью
    \\
    А как записать двустрочную строку Один из вариантов нам уже знаком – заключить строку в тройные кавычки, как было показано
    ранее
    . Но есть и другой – использовать управляющую последовательность для символа перевода строки. Например Это первая строка\nЭто вторая строка. Полезно знать ещё одну управляющую последовательность табуляцию (
    \t
    ). Управляющих последовательностей существует намного больше, но здесь упомянуты только наиболее важные.
    Следует отметить, что одинарная наклонная черта в конце строки лишь указывает на то,
    что продолжение идёт строкой ниже, ноне вставляет перевода строки. Например. Функция repr
    141

    A Byte of Python (Russian), Версия Это первое предложение.
    \
    Это второе предложение."
    эквивалентно записи "Это первое предложение. Это второе предложение Необрабатываемые строки
    Для записи строки, в которой не будет проводиться никакой специальной обработки, как,
    например, управляющих последовательностей, перед строкой указывается приставка или «
    R
    »
    1
    . Например,
    r"Перевод строки обозначается Замечание для пользователей регулярных выражений
    Для работы с регулярными выражениями всегда используйте необрабатываемые строки.
    В противном случае вас ждёт много возни с обратными косыми чёрточками. Например,
    обратные ссылки можно обозначать как 'или r'\1'
    18.12 Резюме
    Итак, в настоящей главе мы рассмотрели некоторые дополнительные возможности, хотя по-прежнему, не охватили всего. Тем не менее, к настоящему моменту мы уже прошли почти всё, что вам когда-либо понадобится использовать на практике. Этого вполне достаточно для начала работы над любыми программами.
    Далее мы обсудим, как продолжать исследовать Python.
    1
    «r» – от англ.
    «raw» – сырой, необработанный (прим. перев.
    )
    18.11. Необрабатываемые строки
    Что дальше
    Добросовестный читатель, дочитавший книгу до сих пора также много практиковавшийся в написании программ, наверняка уже освоился с Python. И конечно, вы уже попробовали реализовать какие-нибудь собственные идеи на Python, чтобы потренироваться. Нет Тогда стоит начать Нов таком случае возникает вопрос Что же делать дальше?».
    Я предлагаю вам справиться со следующей задачей.
    Задача
    Создайте собственную программу Адресная книга, работающую из командной строки и позволяющую просматривать, добавлять, изменять, удалять или искать контактные данные ваших знакомых. Кроме того, эта информация также должна сохраняться на диске для последующего доступа.
    Это достаточно простая задача, если думать о ней в терминах, которые мы до сих пор проходили. Если же вы всё-таки нуждаетесь в подсказке, как действовать, вот она.
    Подсказка (не читать!)
    Создайте класс для хранения персональных данных. Объекты визитных карточек храните в словаре, в котором имена контактов будут служить ключами. Для длительного хранения этих объектов на жёстком диске воспользуйтесь модулем pickle. Для добавления,
    изменения или удаления контактов применяйте встроенные методы словаря.
    Как только вы справитесь с этим, вы смело можете называться программистом на А теперь немедленно напишите мне письмо. Это необязательный шаг, но весьма рекомендуемый. Также подумайте о покупке бумажной версии книги, чтобы поддержать её дальнейшую разработку.
    Если эта задачка показалась вам слишком лёгкой, попробуйте ещё одну

    A Byte of Python (Russian), Версия 2.02
    Задача
    Реализуйте команду replace
    . Эта команда заменяет одну строку другой в списке переданных ей файлов.
    Команда replace может быть любой желаемой сложности от простой замены строк до поиска по шаблону (регулярному выражению).
    А вот ещё некоторые возможные направления вашего дальнейшего путешествия по миру Упражнения
    На Stack Overflow есть неплохое обсуждение упражнений на Python, помогающих отточить ваше мастерство Примеры программ
    Лучший способ овладеть языком программирования – это писать много программ и читать много программ:

    Проект Хранилище кода Примеры для Python на Книга рецептов Python
    ценнейшая коллекция рецептов и подсказок, как решать те или иные проблемы при помощи Python. Обязательна к прочтению каждым программистом на Модуль недели ещё один замечательный путеводитель по
    стандартной библиотеке Python
    19.3 Вопросы и ответы

    Официальные Можно и нельзя в Официальные ЧаВо Список НеЧасто задаваемых Вопросов от Вопросы и ответы из интервью о Python
    19.1. Упражнения

    A Byte of Python (Russian), Версия Вопросы нас пометкой «python»
    19.4 Советы и рекомендации

    Трюки и уловки Сколачиваем программы при помощи Очаровательный Python
    – замечательная серия статей о Python Дэвида Мерца.
    19.5 Учебники

    Всеобъемлющий список учебников по Python от Awaretek
    19.6 Видео Обсуждение
    Если вы застряли на какой-то проблеме вине знаете, кого спросить, тогда список рассылки python-tutor подойдёт наилучшим образом.
    Тем не менее, сначала проделайте всю домашнюю работу и попытайтесь решить проблему самостоятельно Новости
    Если вас интересуют последние новости мира Python, отслеживайте их на официальной планете Python
    19.4. Советы и рекомендации

    A Byte of Python (Russian), Версия 2.02 19.9 Установка библиотек
    В
    Каталоге пакетов Python существует колоссальное количество открытых библиотек, которые вы можете использовать в своих программах. Для их установки можно воспользоваться Графические программы
    Для создания собственной графической программы на Python понадобится какая-нибудь библиотека ГИП (графического интерфейса пользователя) со своими привязками к. Привязки позволяют писать программу на Python, используя библиотеки, которые сами по себе написаны на C, C++ или других языках.
    Выбор ГИП для Python достаточно обширен Kivy
    http://kivy.org
    • Это привязки Python к инструментарию GTK+, на основе которого построен. Уесть много своих особенностей, но как только вы освоитесь, вы сможете создавать ГИП очень быстро. Что касается дизайнера графического интерфейса, то он просто незаменим. Документация же всё ещё требует некоторых улучшений. GTK+ хорошо работает в GNU/Linux, но его порт на Windows пока не закончен. При помощи GTK+ можно создавать как свободные, таки проприетарные программы. Для начала прочитайте
    Учебник по PyGTK
    • Это привязки Python к инструментарию Qt, на основе которого построена KDE. Qt чрезвычайно прост в использовании, особенно благодаря Qt Designer и изумительной документации Qt. PyQt бесплатно, если используется для создания свободных программ (с лицензией GPL). Для создания закрытых проприетарных программ вам придётся его купить. Начиная с Qt 4.5, разрешается создавать при помощи него не только GPL’ные программы. Для начала прочитайте краткое пособие по PyQt или
    Книгу PyQt
    • Это привязки Python к инструментарию wxWidgets. wxPython не так прост в освоении, но зато он переносим и работает на GNU/Linux, Windows, Mac и даже на встраиваемых платформах. Многие среды разработки для wxPython, такие как (Stani’s
    Python и wxGlade включают дизайнеры графического интерфейса. При помощи можно создавать как свободные, таки проприетарные программы.
    Для начала прочитайте учебник по wxPython
    19.9. Установка библиотек

    A Byte of Python (Russian), Версия 2.02 19.11 Резюме по инструментам ГИП
    Другие варианты можно найти на странице GuiProgramming официального сайта
    Python
    К сожалению, не существует некоего единого стандартного инструмента для создания графических программ на Python. Я бы рекомендовал выбирать один из инструментов,
    описанных выше, наиболее подходящий для конкретной ситуации. Во-первых, определитесь, согласны ли выплатить за использование этого инструмента. Во-вторых, определитесь, на каких платформах должна работать ваша программа только на Windows, на и GNU/Linux или на всех сразу. И в-третьих, если вы выбрали платформу тов какой среде выработаете вили Для более подробного анализа см. страницу Статей о Python, Том 3, Выпуск 1 19.12 Различные реализации
    Язык программирования обычно состоит из двух частей собственно языка и программного обеспечения. Язык – это то, как мы что-либо пишем, а программное обеспечение это то, что запускает наши программы.
    До сих пор для выполнения наших программ мы использовали CPython. Он называется, потому что написан на языке C и является Классическим интерпретатором
    Python
    1
    Но существует и другое программное обеспечение, способное выполнять программы на
    Python:

    Jython
    Реализация Python, работающая на платформе Java. Это означает, что можно использовать библиотеки и классы Java в программе на Python и наоборот.

    IronPython
    Реализация Python, работающая на платформе .NET, что означает возможность использования библиотеки классов .NET в программах на Python и наоборот.

    PyPy
    Реализация Python, написанная на Python! Это исследовательский проект, существующий для ускорения и облегчения разработки интерпретатора, поскольку сам интерпретатор написан на динамическом языке (в отличие от статических языков,
    как C, Java ив вышеупомянутых реализациях Python
    1
    Classical Python interpreter (прим.перев.)
    19.11. Резюме по инструментам ГИП
    147

    A Byte of Python (Russian), Версия Реализация Python, специализирующаяся на высокой производительности много- поточных программ.
    Существуют и другие реализации, такие как написанная на Common Lisp и порт IronPython на JavaScript, что даёт возможность писать браузерные приложения) на Python вместо Каждая из перечисленных реализаций имеет свою область применения Функциональное программирование (для хорошо подготовленных читателей)
    Для написания больших программ определённо необходимо изучить функциональный подход к программированию, в отличие от объектно-ориентированного подхода, который мы проходили в
    разделе «Объектно-ориентированное программирование»
    :

    Практические советы по функциональному программированию, A.M. Глава Функциональное программирование книги «Dive Into Презентация Функциональное программирование в Python»
    19.14 Резюме
    Вот мы и подошли к концу нашей книги, но как говорится, это только начало конца Теперь вы заядлый программист на Python, и несомненно, готовы решать множество задач при помощи Python. Теперь вы можете начать автоматизировать на своём компьютере всё подряд, можете писать собственные игры и многое-многое другое. Так что вперёд!
    1   ...   6   7   8   9   10   11   12   13   14


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