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

  • 21.1. Bytearray 72

  • Эквивалент null в Python: None

  • Проверка на None Есть (формально) два способа проверить, на равенство None.Один из способов - с помощью ключевого словаis .Второй - с помощью ==

  • 22.2. Проверка на None 74 Самоучитель Python, Выпуск 0.2

  • 22.2. Проверка на None 75

  • 23.1. Чтение из файла 77 Самоучитель Python, Выпуск 0.2

  • 23.2. Запись в файл 78

  • Содержание • Внешний вид кода 81 Самоучитель Python, Выпуск 0.2 – Отступы – Табуляция или пробелы

  • 25.1. Содержание 82 Самоучитель Python, Выпуск 0.2 Внешний вид кода Отступы

  • 25.2. Внешний вид кода 83 Самоучитель Python, Выпуск 0.2

  • Максимальная длина строки

  • 25.2. Внешний вид кода 84 Самоучитель Python, Выпуск 0.2

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


    Скачать 0.74 Mb.
    НазваниеСамоучитель PythonВыпуск 2Дмитрий Мусинмая 07, 2017
    Дата20.01.2019
    Размер0.74 Mb.
    Формат файлаpdf
    Имя файлаPython3.pdf
    ТипПрограмма
    #64480
    страница6 из 12
    1   2   3   4   5   6   7   8   9   ...   12
    Bytearray
    Bytearray в python - массив байт. От типа bytes отличается только тем, что является изме- няемым. Про него, в общем-то, больше рассказать нечего.
    >>>
    b
    =
    bytearray
    (
    b'hello world!'
    )
    >>>
    b bytearray(b'hello world!')
    >>>
    b[
    0
    ]
    104
    >>>
    b[
    0
    ]
    =
    b'h'
    Traceback (most recent call last):
    File "", line 1, in b[0] = b'h'
    TypeError
    : an integer is required
    >>>
    b[
    0
    ]
    =
    105
    >>>
    b bytearray(b'iello world!')
    >>>
    for i
    in range
    (
    len
    (b)):
    b[i]
    +=
    i
    >>>
    b bytearray(b'ifnos%}vzun,')
    21.1. Bytearray
    72

    Глава
    22
    None (null), или немного о типе NoneType
    Ключевое слово null обычно используется во многих языках программирования, таких как Java, C++, C# и JavaScript. Это значение, которое присваивается переменной.
    Концепция ключевого слова null в том, что она дает переменной нейтральное или “нуле- вое” поведение.
    А что же в Python?
    Эквивалент null в Python: None
    Он был разработан таким образом, по двум причинам:
    Многие утверждают, что слово null несколько эзотерично. Это не наиболее дружелюбное слово для новичков. Кроме того, None относится именно к требуемой функциональности
    - это ничего, и не имеет поведения.
    Присвоить переменной значение None очень просто:
    my_none_variable
    =
    None
    Существует много случаев, когда следует использовать None.
    Часто вы хотите выполнить действие, которое может работать либо завершиться неудач- но. Используя None, вы можете проверить успех действия. Вот пример:
    # Мы хотели бы подключиться к базе данных. Мы не знаем, верны ли логин и пароль
    # Если соединение с базой будет неуспешно, то
    # Он бросит исключение. Обратите внимание, что MyDatabase и DatabaseException
    # НЕ являются реальными классами, мы просто используем их в качестве примеров.
    73

    Самоучитель Python, Выпуск 0.2
    try
    :
    database
    =
    MyDatabase(db_host, db_user, db_password, db_database)
    database_connection
    =
    database connect()
    except
    DatabaseException:
    pass if database_connection is None
    :
    print
    (
    'The database could not connect'
    )
    else
    :
    print
    (
    'The database could connect'
    )
    Python является объектно-ориентированным, и поэтому None - тоже объект, и имеет свой тип.
    >>>
    type
    (
    None
    )

    Проверка на None
    Есть (формально) два способа проверить, на равенство None.
    Один из способов - с помощью ключевого слова
    is.
    Второй - с помощью == (но никогда не пользуйтесь вторым способом, и я попробую объ- яснить, почему).
    Посмотрим на примеры:
    null_variable
    =
    None not_null_variable
    =
    'Hello There!'
    # The is keyword if null_variable is None
    :
    print
    (
    'null_variable is None'
    )
    else
    :
    print
    (
    'null_variable is not None'
    )
    if not_null_variable is None
    :
    print
    (
    'not_null_variable is None'
    )
    else
    :
    print
    (
    'not_null_variable is not None'
    )
    # The == operator if null_variable
    ==
    None
    :
    print
    (
    'null_variable is None'
    )
    else
    :
    print
    (
    'null_variable is not None'
    )
    22.2. Проверка на None
    74

    Самоучитель Python, Выпуск 0.2
    if not_null_variable
    ==
    None
    :
    print
    (
    'not_null_variable is None'
    )
    else
    :
    print
    (
    'not_null_variable is not None'
    )
    Данный код выведет:
    null_variable is None not_null_variable is not None null_variable is None not_null_variable is not None
    Отлично, так они делают одно и то же! Однако, не совсем. Для встроенных типов - да. Но с пользовательскими классами вы должны быть осторожны. Python предоставляет воз- можность переопределения операторов сравнения в пользовательских классах. Таким образом, вы можете сравнить классы, например, MyObject == MyOtherObject.
    class
    MyClass
    :
    def
    __eq__
    (
    self
    , my_object):
    # Просто вернем True return True my_class
    =
    MyClass()
    if my_class is None
    :
    print
    (
    'my_class is None, using the is keyword'
    )
    else
    :
    print
    (
    'my_class is not None, using the is keyword'
    )
    if my_class
    ==
    None
    :
    print
    (
    'my_class is None, using the == syntax'
    )
    else
    :
    print
    (
    'my_class is not None, using the == syntax'
    )
    И получаем немного неожиданный результат:
    my_class is not None
    , using the is keyword my_class is None
    , using the
    ==
    syntax
    Интересно, не правда ли? Вот поэтому нужно проверять на None с помощью ключевого слова is.
    А ещё (для некоторых классов) вызов метода __eq__ может занимать много времени, и is будет просто-напросто быстрее.
    22.2. Проверка на None
    75

    Глава
    23
    Файлы. Работа с файлами.
    В данной статье мы рассмотрим встроенные средства python для работы с файлами: от- крытие / закрытие, чтение и запись.
    Итак, начнем. Прежде, чем работать с файлом, его надо открыть. С этим замечательно справится встроенная функция open:
    f
    =
    open
    (
    'text.txt'
    ,
    'r'
    )
    У функции open много параметров, они указаны в статье “
    Встроенные функции
    ”, нам по- ка важны 3 аргумента: первый, это имя файла. Путь к файлу может быть относительным или абсолютным. Второй аргумент, это режим, в котором мы будем открывать файл.
    Ре- жим
    Обозначение
    ‘r’
    открытие на чтение (является значением по умолчанию).
    ‘w’
    открытие на запись, содержимое файла удаляется, если файла не существует,
    создается новый.
    ‘x’
    открытие на запись, если файла не существует, иначе исключение.
    ‘a’
    открытие на дозапись, информация добавляется в конец файла.
    ‘b’
    открытие в двоичном режиме.
    ‘t’
    открытие в текстовом режиме (является значением по умолчанию).
    ‘+’
    открытие на чтение и запись
    Режимы могут быть объединены, то есть, к примеру, ‘rb’ - чтение в двоичном режиме. По умолчанию режим равен ‘rt’.
    И последний аргумент, encoding, нужен только в текстовом режиме чтения файла. Этот аргумент задает кодировку.
    76

    Самоучитель Python, Выпуск 0.2
    Чтение из файла
    Открыли мы файл, а теперь мы хотим прочитать из него информацию. Для этого есть несколько способов, но большого интереса заслуживают лишь два из них.
    Первый - метод read, читающий весь файл целиком, если был вызван без аргументов, и n символов, если был вызван с аргументом (целым числом n).
    >>>
    f
    =
    open
    (
    'text.txt'
    )
    >>>
    f read(
    1
    )
    'H'
    >>>
    f read()
    'ello world!\nThe end.\n\n'
    Ещё один способ сделать это - прочитать файл построчно, воспользовавшись циклом for
    :
    >>>
    f
    =
    open
    (
    'text.txt'
    )
    >>>
    for line in f:
    line
    'Hello world!\n'
    '\n'
    'The end.\n'
    '\n'
    Запись в файл
    Теперь рассмотрим запись в файл. Попробуем записать в файл вот такой вот список:
    >>>
    l
    =
    [
    str
    (i)
    +
    str
    (i
    -
    1
    )
    for i
    in range
    (
    20
    )]
    >>>
    l
    ['0-1', '10', '21', '32', '43', '54', '65', '76', '87', '98', '109', '1110', '1211
    ˓→
    ', '1312', '1413', '1514', '1615', '1716', '1817', '1918']
    Откроем файл на запись:
    >>>
    f
    =
    open
    (
    'text.txt'
    ,
    'w'
    )
    Запись в файл осуществляется с помощью метода write:
    >>>
    for index in l:
    f write(index
    +
    '\n'
    )
    4 3
    3 3
    3
    23.1. Чтение из файла
    77

    Самоучитель Python, Выпуск 0.2
    Для тех, кто не понял, что это за цифры, поясню: метод write возвращает число записан- ных символов.
    После окончания работы с файлом его обязательно нужно закрыть с помощью метода close:
    >>>
    f close()
    Теперь попробуем воссоздать этот список из получившегося файла. Откроем файл на чте- ние (надеюсь, вы поняли, как это сделать?), и прочитаем строки.
    >>>
    f
    =
    open
    (
    'text.txt'
    ,
    'r'
    )
    >>>
    l
    =
    [line strip()
    for line in f]
    >>>
    l
    ['0-1', '10', '21', '32', '43', '54', '65', '76', '87', '98', '109', '1110', '1211
    ˓→
    ', '1312', '1413', '1514', '1615', '1716', '1817', '1918']
    >>>
    f close()
    Мы получили тот же список, что и был. В более сложных случаях (словарях, вложенных кортежей и т. д.) алгоритм записи придумать сложнее. Но это и не нужно. В python уже давно придумали средства, такие как pickle или json
    , позволяющие сохранять в файле сложные структуры.
    23.2. Запись в файл
    78

    Глава
    24
    With ... as - менеджеры контекста
    Конструкция with ... as используется для оборачивания выполнения блока инструкций менеджером контекста. Иногда это более удобная конструкция, чем try...except...finally
    Синтаксис конструкции with ... as:
    "with"
    expression [
    "as"
    target] (
    ","
    expression [
    "as"
    target])
    *
    ":"
    suite
    Теперь по порядку о том, что происходит при выполнении данного блока:
    1. Выполняется выражение в конструкции with ... as.
    2. Загружается специальный метод __exit__ для дальнейшего использования.
    3. Выполняется метод __enter__. Если конструкция with включает в себя слово as, то воз- вращаемое методом __enter__ значение записывается в переменную.
    4. Выполняется suite.
    5. Вызывается метод __exit__, причём неважно, выполнилось ли suite или произошло исключение. В этот метод передаются параметры исключения, если оно произошло,
    или во всех аргументах значение None, если исключения не было.
    Если в конструкции with - as было несколько выражений, то это эквивалентно несколь- ким вложенным конструкциям:
    with
    A()
    as a, B()
    as b:
    suite эквивалентно
    79

    Самоучитель Python, Выпуск 0.2
    with
    A()
    as a:
    with
    B()
    as b:
    suite
    Для чего применяется конструкция with ... as? Для гарантии того, что критические функ- ции выполнятся в любом случае. Самый распространённый пример использования этой конструкции - открытие файлов. Я уже рассказывал об открытии файлов с помощью функции open
    , однако конструкция with ... as, как правило, является более удобной и га- рантирует закрытие файла в любом случае.
    Например:
    with open
    (
    'newfile.txt'
    ,
    'w'
    , encoding
    =
    'utf-8'
    )
    as g:
    d
    =
    int
    (
    input
    ())
    print
    (
    '1 /
    {}
    =
    {}
    '
    format(d,
    1
    /
    d), file
    =
    g)
    И вы можете быть уверены, что файл будет закрыт вне зависимости от того, что введёт пользователь.
    80

    Глава
    25
    PEP 8 - руководство по написанию кода на Python
    Этот документ описывает соглашение о том, как писать код для языка python, включая стандартную библиотеку, входящую в состав python.
    PEP 8 создан на основе рекомендаций Гуидо ван Россума с добавлениями от Барри. Если где-то возникал конфликт, мы выбирали стиль Гуидо. И, конечно, этот PEP может быть неполным (фактически, он, наверное, никогда не будет закончен).
    Ключевая идея Гуидо такова: код читается намного больше раз, чем пишется. Собственно,
    рекомендации о стиле написания кода направлены на то, чтобы улучшить читаемость кода и сделать его согласованным между большим числом проектов. В идеале, весь код будет написан в едином стиле, и любой сможет легко его прочесть.
    Это руководство о согласованности и единстве. Согласованность с этим руководством очень важна. Согласованность внутри одного проекта еще важнее. А согласованность внутри модуля или функции — самое важное. Но важно помнить, что иногда это руко- водство неприменимо, и понимать, когда можно отойти от рекомендаций. Когда вы со- мневаетесь, просто посмотрите на другие примеры и решите, какой выглядит лучше.
    Две причины для того, чтобы нарушить данные правила:
    1. Когда применение правила сделает код менее читаемым даже для того, кто привык читать код, который следует правилам.
    2. Чтобы писать в едином стиле с кодом, который уже есть в проекте и который нару- шает правила (возможно, в силу исторических причин) — впрочем, это возможность переписать чужой код.
    Содержание

    Внешний вид кода
    81

    Самоучитель Python, Выпуск 0.2

    Отступы

    Табуляция или пробелы?

    Максимальная длина строки

    Пустые строки

    Кодировка исходного файла

    Импорты

    Пробелы в выражениях и инструкциях

    Избегайте использования пробелов в следующих ситуациях:

    Другие рекомендации

    Комментарии

    Блоки комментариев

    “Встрочные” комментарии

    Строки документации

    Контроль версий

    Соглашения по именованию

    Главный принцип

    Описание: Стили имен

    Предписания: соглашения по именованию
    *
    Имена, которых следует избегать
    *
    Имена модулей и пакетов
    *
    Имена классов
    *
    Имена исключений
    *
    Имена глобальных переменных
    *
    Имена функций
    *
    Аргументы функций и методов
    *
    Имена методов и переменных экземпляров классов
    *
    Константы
    *
    Проектирование наследования

    Общие рекомендации
    25.1. Содержание
    82

    Самоучитель Python, Выпуск 0.2
    Внешний вид кода
    Отступы
    Используйте 4 пробела на каждый уровень отступа.
    Продолжительные строки должны выравнивать обернутые элементы либо вертикаль- но, используя неявную линию в скобках (круглых, квадратных или фигурных), либо с использованием висячего отступа. При использовании висячего отступа следует приме- нять следующие соображения: на первой линии не должно быть аргументов, а остальные строки должны четко восприниматься как продолжение линии.
    Правильно:
    # Выровнено по открывающему разделителю foo
    =
    long_function_name(var_one, var_two,
    var_three, var_four)
    # Больше отступов включено для отличения его от остальных def long_function_name
    (
    var_one, var_two, var_three,
    var_four):
    print
    (var_one)
    Неправильно:
    # Аргументы на первой линии запрещены, если не используется вертикальное
    ˓→
    выравнивание foo
    =
    long_function_name(var_one, var_two,
    var_three, var_four)
    # Больше отступов требуется, для отличения его от остальных def long_function_name
    (
    var_one, var_two, var_three,
    var_four):
    print
    (var_one)
    Опционально:
    # Нет необходимости в большем количестве отступов.
    foo
    =
    long_function_name(
    var_one, var_two,
    var_three, var_four)
    Закрывающие круглые/квадратные/фигурные скобки в многострочных конструкциях могут находиться под первым непробельным символом последней строки списка, напри- мер:
    my_list
    =
    [
    1
    ,
    2
    ,
    3
    ,
    4
    ,
    5
    ,
    6
    ,
    25.2. Внешний вид кода
    83

    Самоучитель Python, Выпуск 0.2
    ]
    result
    =
    some_function_that_takes_arguments(
    'a'
    ,
    'b'
    ,
    'c'
    ,
    'd'
    ,
    'e'
    ,
    'f'
    ,
    )
    либо быть под первым символом строки, начинающей многострочную конструкцию:
    my_list
    =
    [
    1
    ,
    2
    ,
    3
    ,
    4
    ,
    5
    ,
    6
    ,
    ]
    result
    =
    some_function_that_takes_arguments(
    'a'
    ,
    'b'
    ,
    'c'
    ,
    'd'
    ,
    'e'
    ,
    'f'
    ,
    )
    Табуляция или пробелы?
    Пробелы - самый предпочтительный метод отступов.
    Табуляция должна использоваться только для поддержки кода, написанного с отступами с помощью табуляции.
    Python 3 запрещает смешивание табуляции и пробелов в отступах.
    Python 2 пытается преобразовать табуляцию в пробелы.
    Когда вы вызываете интерпретатор Python 2 в командной строке с параметром -t, он вы- дает предупреждения (warnings) при использовании смешанного стиля в отступах, а за- пустив интерпретатор с параметром -tt, вы получите в этих местах ошибки (errors). Эти параметры очень рекомендуются!
    Максимальная длина строки
    Ограничьте длину строки максимум 79 символами.
    Для более длинных блоков текста с меньшими структурными ограничениями (строки документации или комментарии), длину строки следует ограничить 72 символами.
    Ограничение необходимой ширины окна редактора позволяет иметь несколько откры- тых файлов бок о бок, и хорошо работает при использовании инструментов анализа кода,
    которые предоставляют две версии в соседних столбцах.
    Некоторые команды предпочитают большую длину строки. Для кода, поддерживающего- ся исключительно или преимущественно этой группой, в которой могут прийти к согла- сию по этому вопросу, нормально увеличение длины строки с 80 до 100 символов (факти- чески увеличивая максимальную длину до 99 символов), при условии, что комментарии и строки документации все еще будут 72 символа.
    25.2. Внешний вид кода
    84

    Самоучитель Python, Выпуск 0.2
    Стандартная библиотека Python консервативна и требует ограничения длины строки в
    79 символов (а строк документации/комментариев в 72).
    Предпочтительный способ переноса длинных строк является использование подразу- меваемых продолжений строк Python внутри круглых, квадратных и фигурных скобок.
    Длинные строки могут быть разбиты на несколько строк, обернутые в скобки. Это пред- почтительнее использования обратной косой черты для продолжения строки.
    Обратная косая черта все еще может быть использована время от времени. Например,
    длинная конструкция with не может использовать неявные продолжения, так что обрат- ная косая черта является приемлемой:
    with open
    (
    '/path/to/some/file/you/want/to/read'
    )
    as file_1, \
    open
    (
    '/path/to/some/file/being/written'
    ,
    'w'
    )
    as file_2:
    file_2
    write(file_1
    read())
    Ещё один случай - assert.
    Сделайте правильные отступы для перенесённой строки. Предпочтительнее вставить пе- ренос строки после логического оператора, но не перед ним. Например:
    class
    Rectangle
    (Blob):
    def
    __init__
    (
    self
    , width, height,
    color
    =
    'black'
    , emphasis
    =
    None
    , highlight
    =
    0
    ):
    if
    (width
    ==
    0
    and height
    ==
    0
    and color
    ==
    'red'
    and emphasis
    ==
    'strong'
    or highlight
    >
    100
    ):
    raise ValueError
    (
    "sorry, you lose"
    )
    if width
    ==
    0
    and height
    ==
    0
    and
    (color
    ==
    'red'
    or emphasis is None
    ):
    raise ValueError
    (
    "I don't think so -- values are
    %s
    ,
    %s
    "
    %
    (width, height))
    Blob
    __init__
    (
    self
    , width, height,
    color, emphasis, highlight)
    1   2   3   4   5   6   7   8   9   ...   12


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