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

  • Целые типы Описание

  • Типы с плаваю- щей точкой Описание

  • 10.1. Специальные методы

  • Команда Описание

  • Этап 3: Python создает новую переменную

  • Как устроен Python. Как устроен Python. Харрисон. Харрисон Мэтт


    Скачать 5.41 Mb.
    НазваниеХаррисон Мэтт
    АнкорКак устроен Python
    Дата05.02.2022
    Размер5.41 Mb.
    Формат файлаpdf
    Имя файлаКак устроен Python. Харрисон.pdf
    ТипДокументы
    #352210
    страница7 из 21
    1   2   3   4   5   6   7   8   9   10   ...   21
    9.2. Синтаксис форматных строк
    В форматных строках существует специальный синтаксис для полей-
    заполнителей. Если форматной строке передается объект, для поиска атрибутов может использоваться синтаксис
    .имя
    _
    атрибута
    . Также под- держивается возможность извлечения индексируемых элементов с ис- пользованием записи
    [индекс]
    . В документации Python они называются

    9.2. Синтаксис форматных строк
    75
    именами полей. Имена полей могут быть пустыми, содержать имя аргу- мента с ключевым словом, номер позиционного аргумента или индекс в списке или словаре (в квадратных скобках):
    >>> 'Name: {}'.format('Paul')
    'Name: Paul'
    >>> 'Name: {name}'.format(name='John')
    'Name: John'
    >>> 'Name: {[name]}'.format({'name':'George'})
    'Name: George'
    В фигурные скобки (
    {
    и
    }
    ) также может быть заключено целое число.
    Оно определяет позицию аргумента, переданного
    .format
    (нумерация начинается с нуля). В следующем примере используются номера по- зиционных аргументов. Первый аргумент,
    .format
    ,
    'Paul'
    , находится в позиции 0; второй,
    'George'
    , находится в позиции 1; наконец,
    'John'
    находится в позиции 2:
    >>> 'Last: {2} First: {0}'.format('Paul', 'George',
    ... 'John')
    'Last: John First: Paul'
    Существует целый язык форматирования строк. Поставив двоеточие после имени поля, вы сможете передать дополнительную форматную информацию. Формат описан ниже. Все, что заключено в квадратные скобки, не является обязательным.
    :[[fill]align][sign][#][0][width][grouping_option][.precision][type]
    В следующей таблице перечислены поля и их значения.
    Поле
    Описание
    fill
    Символ, используемый для заполнения из align
    (пробел по умолча- нию)
    align
    Тип выравнивания вывода:
    <
    (по левому краю),
    >
    (по правому краю),
    ^
    (по центру) или
    =
    (вставить дополнение после знака)
    sign
    Для чисел:
    +
    (выводить знак как для положительных, так и для отрицательных чисел), (по умолчанию, выводить знак только для отрицательных чисел) или пробел (начальные пробелы для положи- тельных чисел, знак для отрицательных чисел)

    76
    Глава 9. Строки
    Поле
    Описание
    #
    Префикс для целых чисел:
    0b
    (двоичные),
    0o
    (восьмеричные) или
    0x
    (шестнадцатеричные)
    0
    Дополняющие нули width
    Минимальная ширина поля grouping_
    option
    Разделители в числах:
    ,
    (тысячи разделяются запятыми),
    _
    (тысячи разделяются подчеркиваниями)
    .precision
    Для чисел с плавающей точкой (количество знаков в дробной части), для нечисловых данных (максимальная длина)
    type
    Числовой тип или s (строковый формат по умолчанию); см. таблицы форматирования для целых чисел и чисел с плавающей точкой
    В следующих таблицах перечислены различные средства форматирова- ния целых чисел и чисел с плавающей точкой.
    Целые типы
    Описание
    b
    Двоичный c
    Символьный — преобразуется в символ Юникода d
    Десятичный (по умолчанию)
    n
    Десятичный с разделителями для локального контекста o
    Восьмеричный x
    Шестнадцатеричный (нижний регистр)
    X
    Шестнадцатеричный (верхний регистр)
    Типы с плаваю-
    щей точкой
    Описание
    e/E
    Экспоненциальная запись (буква «e» в нижнем/верхнем реги- стре)
    f
    Фиксированная точка g/G
    Универсальная запись. Фиксированная или экспоненциальная запись в зависимости от числа (по умолчанию g)
    n g с разделителями для локального контекста
    %
    Проценты (с умножением на 100)

    9.3. Примеры форматирования
    77
    9.3. Примеры форматирования
    Ниже приведены некоторые примеры использования
    .format
    . Чтобы отформатировать строку в центре поля из 12 символов, окруженную символами
    *
    , используйте приведенный ниже код. Здесь
    *
    — символ-за- полнитель,
    ^
    — поле выравнивания, а 12 — поле ширины:
    >>> "Name: {:*^12}".format("Ringo")
    'Name: ***Ringo****'
    Затем отформатируем число в процентах с шириной 10, одним знаком в дробной части и знаком перед дополнением ширины. Здесь
    =
    — поле выравнивания,
    +
    гарантирует, что в отформатированном значении всег- да выводится знак (как для отрицательных, так и для положительных чисел),
    10.1
    — поля ширины и точности, а
    %
    — тип для преобразования числа в проценты:
    >>> "Percent: {:=+10.1%}".format(-44/100)
    'Percent: - 44.0%'
    Далее следуют примеры двоичного и шестнадцатеричного преобразования.
    Полю типа целого числа присваиваются значения b
    и x
    соответственно:
    >>> "Binary: {:b}".format(12)
    'Binary: 1100'
    >>> "Hex: {:x}".format(12)
    'Hex: c'
    ПРИМЕЧАНИЕ
    Метод
    .format для строк предоставляет альтернативу для оператора
    %
    , сходную с функцией
    C
    printf
    . Оператор
    %
    также доступен, и некоторые пользователи предпочитают именно его, поскольку в простых случаях запись получается короче, а также из-за его сходства с C. Заполнители
    %s
    ,
    %d и
    %x заменяются своими строковыми, целыми и шестнадцатеричными значениями соответственно. Несколько примеров:
    >>> "Num: %d Hex: %x" % (12, 13)
    'Num: 12 Hex: d'
    >>> "%s %s" % ('hello', 'world')
    'hello world'

    78
    Глава 9. Строки
    СОВЕТ
    Отличный источник информации о форматировании — встроенная справоч- ная документация, доступная в REPL. Введите команду
    >>> help()
    Команда включает режим справочной информации и выводит приглашение help>
    . Введите команду help> FORMATTING
    Просмотрите вывод — вы найдете в нем много примеров. Если просто нажать
    Enter в приглашении help>
    , вы вернетесь к обычному приглашению.
    Также немало полезной информации можно найти на сайте https://pyformat.
    info/
    . Здесь представлено много примеров форматирования как с использо- ванием
    .format
    , так и с более старым оператором
    %
    Информация о форматировании строк также содержится в разделе
    STRINGS
    справочной информации.
    9.4. F-строки
    В Python 3.6 появилась новая разновидность строк — так называемые
    f-строки. Если поставить перед строкой префикс f
    , в заполнители можно будет включить код. Простой пример:
    >>> name = 'matt'
    >>> f'My name is {name}'
    'My name is matt'
    Python просматривает заполнитель и вычисляет содержащийся там код.
    В заполнитель можно включить вызовы функций, вызовы методов или любой другой произвольный код:
    >>> f'My name is {name.capitalize()}'
    'My name is Matt'
    Также можно передать форматные строки после двоеточия (
    :
    ):
    >>> f'Square root of two: {2**.5:5.3f}'
    'Square root of two: 1.414'

    9.6. Упражнения
    79
    9.5. Итоги
    В этой главе мы представили строки. Строки могут определяться с раз- ными ограничителями. В отличие от других языков, в которых строки, заключенные в двойные кавычки "
    и одинарные кавычки '
    , могут работать по-разному, в Python их поведение не различается. Впрочем, строки в трой- ных кавычках могут состоять из нескольких физических строк (абзацев).
    Мы также рассмотрели метод
    .format и разобрали несколько примеров форматирования строк. В завершение главы была представлена одна из новых возможностей Python 3.6 — f-строки.
    9.6. Упражнения
    1. Создайте переменную name
    , указывающую на ваше имя. Создайте другую переменную — age
    — с целым числом, соответствующим вашему возрасту. Выведите отформатированную строку с обоими значениями. Например, для имени
    Fred и возраста
    23
    должна быть выведена строка:
    Fred is 23 2. Создайте переменную paragraph
    , которая содержит следующий текст:
    "Python is a great language!", said Fred. "I don't ever remember having this much fun before."
    3. Посетите сайт https://unicode.org и найдите в греческой таблице сим- волов букву «омега». Создайте строку, которая содержит символ
    «омега», используя как кодовый пункт в Юникоде (форма
    \u
    ), так и имя символа в Юникоде (форма
    \N
    ). Кодовый пункт — шестнад- цатеричное число в таблице, имя выводится жирным шрифтом по- сле кодового пункта. Например, букве «тэта» соответствует кодо- вый пункт 03f4 и имя
    GREEK
    CAPITAL
    THETA
    SYMBOL
    4. Создайте переменную item
    , которая указывает на строку "car"
    Создайте переменную cost
    , которая указывает на число 13499.99.
    Выведите строку, в которой значение item выравнивается по лево- му краю поля из 10 символов, а cost
    — по правому краю поля из
    10 символов с 2 цифрами в дробной части и разделением тысяч за- пятыми. Результат должен выглядеть так (без кавычек):
    'car 13,499.99'

    10
    dir, help и pdb
    Наше знакомство со строками было в лучшем случае поверхностным, но сейчас нужно ненадолго прерваться для обсуждения двух важных функций и одной библиотеки, включенных в поставку Python. Первая функция — dir
    — показывает, каким мощным и полезным инструментом является REPL. Функция dir возвращает атрибуты объекта. Если у вас открыт интерпретатор Python и вы хотите узнать атрибуты строки, эта функция выдает следующий результат:
    >>> dir('Matt')
    ['__add__', '__class__', '__contains__',
    '__delattr__', '__dir__', '__doc__', '__eq__',
    '__format__', '__ge__', '__getattribute__',
    '__getitem__', '__getnewargs__', '__gt__',
    '__hash__', '__init__', '__iter__', '__le__',
    '__len__', '__lt__', '__mod__', '__mul__', '__ne__',
    '__new__', '__reduce__', '__reduce_ex__', '__repr__',
    '__rmod__', '__rmul__', '__setattr__', '__sizeof__',
    '__str__', '__subclasshook__', 'capitalize',
    'casefold', 'center', 'count', 'encode', 'endswith',
    'expandtabs', 'find', 'format', 'format_map',
    'index', 'isalnum', 'isalpha', 'isdecimal',
    'isdigit', 'isidentifier', 'islower', 'isnumeric',
    'isprintable', 'isspace', 'istitle', 'isupper',
    'join', 'ljust', 'lower', 'lstrip', 'maketrans',
    'partition', 'replace', 'rfind', 'rindex', 'rjust',
    'rpartition', 'rsplit', 'rstrip', 'split',
    'splitlines', 'startswith', 'strip', 'swapcase',
    'title', 'translate', 'upper', 'zfill']

    10.1. Специальные методы
    81
    dir выводит все атрибуты переданного объекта. Так как функции dir была передана строка 'Matt'
    , функция выводит атрибуты строки. Эта удобная возможность языка Python демонстрирует его философию по принципу
    «батарейки прилагаются»: Python предоставляет простой механизм для получения атрибутов любого объекта. В других языках для получения доступа к такой функциональности могут потребоваться специальные сайты, документация или IDE, но в Python благодаря наличию REPL эту информацию можно получить быстро и легко.
    Список атрибутов упорядочен по алфавиту; на первую пару атрибутов, начинающихся с
    __
    , обычно можно не обращать внимания. Позднее вам встретятся такие атрибуты, как capitalize
    (запись строки с прописной буквы), format
    (форматирование строк, продемонстрированное выше) или lower
    (преобразование строки к нижнему регистру). Эти атрибуты являются методами — функциями, связанными с объектами. Чтобы
    вызвать функцию, поставьте точку после объекта, укажите имя метода и поставьте круглые скобки.
    Три примера вызова методов:
    >>> print('matt'.capitalize())
    Matt
    >>> print('Hi {}'.format('there'))
    Hi there
    >>> print('YIKES'.lower())
    yikes
    10.1. Специальные методы
    Возможно, вас интересуют атрибуты, начинающиеся с
    __
    . Как было сказано выше, эти атрибуты соответствуют методам; люди называют их специаль-
    ными, волшебными или дандер-методами (dunder methods). Специальные методы определяют, что происходит во внутренней реализации при выпол- нении операций с объектами. Например, при применении оператора
    +
    или
    %
    к строке будет вызван метод
    .__add__
    или
    .__mod__
    соответственно. Не- опытные программисты Python обычно забывают о специальных методах.
    Но когда вы начнете реализовывать собственные классы и захотите, чтобы они реагировали на такие операции, как
    +
    или
    %
    , вы можете определить их.

    82
    Глава 10. dir, help и pdb
    СОВЕТ
    В документации help()
    имеется тема
    SPECIALMETHODS
    с описаниями этих методов.
    Также описания доступны на сайте Python. Откройте раздел Documentation,
    Language Reference, Data Model — они находятся здесь.
    10.2. help
    Help
    — другая встроенная функция, используемая в сочетании с REPL.
    В книге ранее уже упоминался вызов help()
    без аргументов для вызова справочной документации.
    Функция help также выводит документацию для метода, модуля, класса или функции, переданной в аргументе. Например, если вас интересует, что делает атрибут upper у строк, информация может быть получена следующим вызовом:
    >>> help('some string'.upper)
    Help on built-in function upper:
    upper(...) method of builtins.str instance
    S.upper() -> str
    Return a copy of S converted to uppercase.
    Функция help в сочетании с REPL позволяет читать документацию, не открывая браузера, и даже без доступа к интернету. Даже если вы по- пали на необитаемый остров, все равно сможете изучать Python — для этого понадобится лишь компьютер с установленной версией Python и источник питания.
    10.3. pdb
    В Python также включен отладчик для пошагового выполнения кода.
    Он находится в модуле с именем pdb
    . Эта библиотека построена по об- разцу библиотеки gdb языка C. Чтобы выйти в отладчик в любой точке программы Python, вставьте в нее следующий код:
    import pdb; pdb.set_trace()

    10.3. pdb
    83
    На самом деле здесь две команды, но я обычно размещаю их в одной строке, разделив точкой с запятой (
    ;
    ) — так после завершения отладки обе команды можно будет удалить одним нажатием клавиши в редакто- ре. Пожалуй, это единственная ситуация, в которой я использую точку с запятой в коде Python (две команды в одной строке).
    При выполнении в этой строке открывается приглашение
    (pdb)
    , напо- минающее приглашение REPL. В нем также можно выполнять код, про- сматривать объекты и переменные. Кроме того, вы сможете установить точки прерывания для последующего анализа.
    Ниже приведена таблица со списком полезных команд pdb
    :
    Команда
    Описание
    h,
    help
    Вывести список доступных команд n,
    next
    Выполнить следующую строку c,
    cont,
    continue
    Продолжать выполнение до следующей точки прерывания w,
    where,
    bt
    Вывести трассировку стека с информацией о текущей по- зиции выполнения u,
    up
    Подняться на уровень вверх в стеке d,
    down
    Опуститься на уровень вниз в стеке l,
    list
    Вывести исходный код текущей строки
    ПРИМЕЧАНИЕ
    В книге «Programming Pearls» Джон Бентли (Jon Bentley) пишет:
    «Когда мне приходится отлаживать маленький алгоритм где-то в недрах большой программы, я иногда использую средства отладки… хотя команды отладочного вывода обычно быстрее реализуются и работают эффективнее хитроумных отладчиков».
    Я слышал, как Гвидо ван Россум, создатель Python, высказывает то же мнение: он предпочитает отладочный вывод. Принцип отладочного вывода прост: вы вставляете функции print
    , которые поясняют, что происходит в программе.
    Часто этого оказывается достаточно для выявления проблемы. Не забудьте удалить команды отладки или преобразовать их в команды записи в журнал перед выпуском кода.
    Если потребуется более серьезный анализ, вы всегда можете воспользоваться модулем pdb

    84
    Глава 10. dir, help и pdb
    10.4. Итоги
    Python предоставляет много вспомогательных инструментов, упрощаю- щих жизнь разработчика. Если вы научились работать с REPL, то сможе- те пользоваться ими. Функция dir выводит информацию о том, какими атрибутами обладает объект. Функция help поможет проанализировать эти атрибуты для документации.
    В этой главе также был представлен модуль pdb
    . Этот модуль позволяет выполнять код в пошаговом режиме, что может быть полезно при отладке.
    10.5. Упражнения
    1. Откройте REPL и создайте переменную name со своим именем. Вы- ведите атрибуты строки. Выведите справочную документацию для методов
    .find и
    .title
    2. Откройте REPL и создайте переменную age со своим возрастом.
    Выведите атрибуты целого числа. Выведите справочную докумен- тацию для метода
    .numerator

    11
    Строки и методы
    В главе 10 вы узнали о встроенной функции dir и некоторых методах, которые можно вызвать для строковых объектов. Так как строки явля- ются неизменяемыми, эти методы не изменяют строку, а возвращают новую строку или новый результат. Операции со строками позволяют создать новую версию, преобразованную к верхнему регистру, вернуть отформатированную строку, создать строку в нижнем регистре и т. д. Для выполнения этих операций разработчик вызывает методы.
    Методы представляют собойфункции, вызываемые для экземпляра типа. Что это означает? Чтобы вызвать метод для строкового объекта, поставьте точку (
    ) и укажите имя объекта прямо за именем переменной, хранящей данные (или самими данными). За именем объекта должны следовать круглые скобки со списком аргументов.
    ПРИМЕЧАНИЕ
    В этой книге я ставлю точку перед именами методов. Это делается для того, чтобы напомнить вам о том, что перед методом должен быть указан объ- ект. Скажем, вместо метода capitalize в тексте будет упоминаться метод
    .capitalize
    . Вызов его для объекта text выглядит так:
    text.capitalize()
    В этом отношении методы отличаются от функций (таких, как help
    ), которые вызываются самостоятельно (без объекта или точки):
    help()

    86
    Глава 11. Строки и методы name = 'matt'
    'matt'
    Id:4f3b
    Type:String name
    Этап 1: Python создает строку
    correct = name.capitalize()
    'matt'
    Id:4f3b
    Type:String name
    Этап 2: Python создает новую строку,
    начинающуюся с прописной буквы
    'Matt'
    Id:4f3f
    Type:String correct = name.capitalize()
    'matt'
    Id:4f3b
    Type:String name
    Этап 3: Python создает новую переменную
    'Matt'
    Id:4f3f
    Type:String correct
    Неизменяемые строки
    Команда
    Что делает компьютер
    Переменные Объекты
    Переменные Объекты
    Переменные Объекты
    1   2   3   4   5   6   7   8   9   10   ...   21


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