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

  • 2to3 -f xrange -w example.py

  • Одновременная поддержка Python 2 и Python 3

  • Участие в проекте

  • Алфавитный указатель Символы и цифры

  • справочник по Python. мм isbn 9785932861578 9 785932 861578


    Скачать 4.21 Mb.
    Названиемм isbn 9785932861578 9 785932 861578
    Анкорсправочник по Python
    Дата08.05.2022
    Размер4.21 Mb.
    Формат файлаpdf
    Имя файлаBizli_Python-Podrobnyy-spravochnik.440222.pdf
    ТипСправочник
    #518195
    страница73 из 82
    1   ...   69   70   71   72   73   74   75   76   ...   82

    2to3 -l
    Available transformations for the -f/--fix option:
    (Доступные исправления для параметра -f/--fix)
    apply basestring buffer

    Перенос программного кода и утилита 2to3
    791
    callable
    ...
    ...
    xrange xreadlines zip
    Используя имена из этого списка, можно посмотреть, какие фактические изменения внесет выбранное исправление, просто выполнив команду 2to3
    -f
    исправление имя_файла
    . Если необходимо применить сразу несколько ис- правлений, их можно указать в виде последовательности из нескольких параметров -f, по одному для каждого исправления. Если вам потребуется внести фактические исправления в исходный файл, добавьте ключ -w: 2to3
    -f
    исправление -w имя_файла
    . Например:
    % 2to3 -f xrange -w example.py
    --- example.py (original)
    +++ example.py (refactored)
    @@ -1,7 +1,7 @@
    # example.py import ConfigParser
    -for i in xrange(10):
    +for i in range(10):
    print i, 2*i
    ёёё
    def spam(d):
    RefactoringTool: Files that were modified:
    RefactoringTool: example.py
    Если заглянуть в файл example.py после выполнения этой операции, можно обнаружить, что вызов функции xrange() был замещен вызовом функции range()
    и больше никаких других изменений внесено не было. Резервная копия оригинального файла example.py сохраняется под именем example.
    py.bak
    Противоположностью ключу -f является ключ -x. Если выполнить коман- ду 2to3 -x исправление имя_файла, она проверит необходимость выполнения всех исправлений, кроме тех, что указаны в параметре -x.
    Несмотря на то что утилита 2to3 может вносить исправления непосред- ственно в исходные файлы, тем не менее на практике этого лучше избегать.
    Имейте в виду, что интерпретация программного кода не может выпол- няться абсолютно точно, и поэтому утилита 2to3 не всегда «права в своем выборе». При переносе программного кода всегда лучше подходить к этой проблеме методично и последовательно, а не полагаться на авось и на то, что все «заработает» чудесным образом.
    Утилита 2to3 обладает парой дополнительных параметров, которые могут пригодиться. Ключ -v включает режим подробного вывода, когда выводит- ся дополнительная информация, которая может пригодиться при отлад- ке. Ключ -p сообщает утилите 2to3, что вы уже используете инструкцию print как функцию и что ее исправлять нет необходимости (включается ин- струкцией from __future__ import print_statement).

    792
    Приложение A. Python 3
    Практическая стратегия переноса
    Н
    иже представлено описание практической стратегии переноса программ- ного кода с версии Python 2 на версию Python 3. Напомню еще раз, что всег-
    Python 2 на версию Python 3. Напомню еще раз, что всег-
    2 на версию Python 3. Напомню еще раз, что всег-
    Python 3. Напомню еще раз, что всег-
    Напомню еще раз, что всег- да лучше подходить к этой проблеме методично и не стремиться решить ее одним махом.
    1. Убедитесь, что программа имеет достаточное количество модульных тестов и что все тесты безошибочно выполняются под управлением Py-
    Py- thon 2.
    2. Перенесите программу и комплект тестов на версию Python 2.6 и убеди-
    Python 2.6 и убеди-
    2.6 и убеди- тесь, что все тесты выполняются безошибочно.
    3. Добавьте параметр -3 в вызов интерпретатора Python 2.6. Изучите все предупреждения и измените программу так, чтобы она выполнялась и проходила все тесты без вывода предупреждений. Если все было сде- лано правильно, есть вероятность, что программа по-прежнему сможет работать под управлением Python 2.5 и, может быть, под управлением еще более ранних версий. На данном этапе вы просто убрали из про- граммы всякий «хлам».
    4. Создайте резервную копию программы (это должно быть сделано без лишних напоминаний).
    5. Перенесите комплект модульных тестов на Python 3 и убедитесь, что среда тестирования работоспособна сама по себе. Отдельные модульные тесты будут терпеть неудачу (потому что перенос программы еще не был выполнен). Однако корректно написанные тесты должны быть способ- ны обнаруживать отказы, не завершаясь аварийно из-за внутренних проблем самой системы тестирования.
    6. С помощью утилиты 2to3 перенесите саму программу на Python 3. За-
    Python 3. За-
    3. За- пустите тестирование получившегося программного кода и исправьте все обнаруженные проблемы. Существуют различные стратегии выпол- нения этого этапа. Если вы считаете себя любимцем фортуны, можете позволить утилите 2to3 исправить все, что она посчитает нужным, и по- смотреть, что из этого получится. Если вы более осторожны, исправьте с помощью утилиты 2to3 наиболее очевидные проблемы (инструкции print и except, функцию xrange(), имена библиотечных модулей и так далее), а затем постепенно разберитесь с оставшимися проблемами.
    По окончании этого процесса ваша программа должна проходить все тесты и действовать точно так же, как и прежде.
    Теоретически возможно структурировать программный код так, что он бу- дет работать как под управлением Python 2.6, так и под управлением Py-
    Python 2.6, так и под управлением Py-
    2.6, так и под управлением Py-
    Py- thon 3, без какого-либо вмешательства со стороны пользователя. Однако для этого придется очень тщательно следовать современным соглашениям по оформлению программного кода на языке Python; по крайней мере, вам совершенно точно придется добиться того, чтобы в процессе работы под управлением Python 2.6 не выводилось никаких предупреждений. Если для автоматического переноса программного кода требуется специфиче- ское использование утилиты 2to3 (например, запуск с определенным на-

    Перенос программного кода и утилита 2to3
    793
    бором исправлений), вероятно, лучше будет написать сценарий на языке командной оболочки, который автоматически будет выполнять необходи- мые операции и избавит пользователей от необходимости самостоятельно пользоваться утилитой 2to3.
    Одновременная поддержка Python 2 и Python 3
    Последний вопрос, касающийся переноса программного кода на Py-
    Py- thon 3, – возможно ли иметь единый программный код, который без допол- нительных модификаций будет выполняться под управлением Python 2 и Python 3? В некоторых случаях такое вполне возможно, однако при этом возникает опасность, что программный код превратится в жуткую меша- нину. Например, вам придется ликвидировать все инструкции print и убе- диться, что ни одна из инструкций except не извлекает значения исклю- чений (а вся необходимая информация извлекается с помощью функции sys.exc_info()
    ). Некоторые особенности языка Python вообще невозможно заставить одновременно работать под управлением разных версий интер- претатора. Например, из-за различий в синтаксисе нет никакой возмож- ности реализовать такой способ использования метаклассов, который был бы совместим с версиями Python 2 и Python 3.
    Таким образом, если в вашем распоряжении имеется программный код, который должен работать под управлением Python 2 и Python 3, в пер-
    Python 2 и Python 3, в пер-
    2 и Python 3, в пер-
    Python 3, в пер-
    3, в пер- вую очередь из него необходимо устранить использование любых нереко- мендуемых возможностей, убедиться, что он работает под управлением
    Python 2.6, обеспечить максимально полный охват модульными тестами и попытаться подобрать такое подмножество параметров утилиты 2to3, чтобы обеспечить возможность автоматического преобразования.
    Примером варианта создания программной базы, единой для разных вер- сий Python, может послужить комплект модульных тестов. Очень полезно иметь набор тестов, которые без дополнительных модификаций действуют в Python 2.6 и Python 3, – для проверки корректности поведения приложе-
    Python 2.6 и Python 3, – для проверки корректности поведения приложе-
    2.6 и Python 3, – для проверки корректности поведения приложе-
    Python 3, – для проверки корректности поведения приложе-
    3, – для проверки корректности поведения приложе- ния после его преобразования с помощью утилиты 2to3.
    Участие в проекте
    Как проект с открытым исходным кодом, Python продолжает развиваться благодаря содействию его пользователей. Для дальнейшего развития Py-
    Py- thon 3 разработчикам особенно важно получать отчеты об ошибках, о про-
    3 разработчикам особенно важно получать отчеты об ошибках, о про- блемах с производительностью и о других недостатках. Отправить отчет об ошибке можно на странице http://bugs.python.org. Не стесняйтесь – ваши отзывы помогут сделать Python еще лучше.

    Алфавитный указатель
    Символы и цифры
    '''
    (тройные апострофы), 30, 51
    """ (тройные кавычки), 30, 51
    ' (апостроф), 30, 51
    " (кавычки), 30, 51
    - (дефис), использование вместо имени файла, 227
    - (дефис), оператор разности множеств,
    36
    - унарный минус, оператор, 96
    - оператор вычитания, 96
    () (скобки) в кортежах, 33, 54
    () оператор вызова функции, 110
    _ (подчеркивание) в идентификаторах,
    50
    _ (подчеркивание), переменная, 24
    в интерактивном режиме, 230
    _ _(два символа подчеркивания) в иден- тификаторах, 50
    . (точка), оператор доступа к атрибутам класса, 159
    . (точка), оператор доступа к атрибутам,
    58, 77, 110
    ... (многоточие), 55, 84
    ... приглашение к вводу, 230
    ; (точка с запятой), как разделитель ин- струкций, 26, 49
    : (двоеточие), в спецификаторах форма- та, 106
    @ декораторы, 55, 139
    #! в сценариях командной оболочки в UNIX, 231
    переопределение при установке паке- тов, 202
    # символ начала комментария, 25, 49
    \\ символ продолжения строки, 48
    \\ экранированные последовательности в строковых литералах, 51, 52
    % оператор форматирования строк, 27,
    103
    % оператор деления по модулю, 96
    // оператор деления с усечением, 96
    * шаблонный символ в инструкции from module import,
    191
    импортирование определений из мо- дуля, 47
    передача функциям последователь- ностей аргументов, 131
    передача функциям словарей имено- ванных аргументов, 132
    переменное число аргументов функ- ций, 131
    * оператор умножения, 96
    * оператор копирования последователь- ностей, 99
    ** переменное количество именованных аргументов, в объявлении, 132
    ** оператор возведения в степень, 96
    **= оператор, 109
    *= оператор, 109
    >>> приглашение к вводу, 23, 229
    >> модификатор перенаправления вы- вода в файл, 212
    & битовая операция И, 97
    & оператор пересечения множеств, 36,
    109
    &= оператор, 110
    | битовая операция ИЛИ, 97

    битовая операция НЕ, 97
    > (больше чем), оператор отношения,
    29, 98
    < (меньше чем), оператор отношения,
    29, 98
    < выравнивание по левому краю, в специ фикаторах формата, 106
    > выравнивание по правому краю, в спецификаторах формата, 106
    >>, оператор перенаправления в файл в инструкции print, 29
    << оператор сдвига влево, 97
    >> оператор сдвига вправо, 97
    <<= оператор, 110
    >>= оператор, 110
    -= оператор, 109

    Алфавитный указатель
    795
    //= оператор, 109
    /= оператор, 109
    %= оператор, 109
    += оператор, 109
    |= оператор, 110
    >= оператор больше или равно, 98
    <= оператор меньше или равно, 98
    != оператор не равно, 98
    == оператор равенства, 98, 113
    | оператор объединения множеств, 36,
    109
    / оператор деления, 96
    + оператор конкатенации, 99
    списков, 32
    строк, 31
    + унарный плюс, оператор, 96
    + оператор сложения, 96
    ^ битовая операция исключающее ИЛИ,
    97
    ^ оператор симметричной разности мно- жеств, 36, 109
    ^ выравнивание по центру, в специфика- торах формата, 106
    ^= оператор, 110
    {} символы подстановки в строках фор- мата, 106
    {} словари, 36, 54
    литералы множеств, 772
    [] списки, 32, 54
    [] оператор индексирования, 65, 99
    в отображениях, 72
    и специальные методы, 90
    при работе с последовательностями,
    100
    [:] оператор среза, 31, 32, 65, 99
    [::] расширенный оператор среза, 65, 99
    при работе с последовательностями,
    101
    [!] команда отладчика, модуль pdb, 243 0b, литералы двоичных чисел, 50 0o, литералы восьмеричных чисел, 50 0x, литералы шестнадцатеричных чи- сел, 50 2to3, утилита, 788
    ограничения, 790
    -3, параметр командной строки, 226, 788
    A
    'a', режим, в функции open(), 207
    a2b_base64(), функция, модуль binascii,
    680
    a2b_hex(), функция, модуль binascii,
    680
    a2b_hqx(), функция, модуль binascii,
    680
    a2b_uu(), функция, модуль binascii, 680
    ABCMeta, метакласс, 182, 326
    abc, модуль, 182, 326
    abort(), метод объектов класса FTP, 620
    abort(), функция, модуль os, 489
    abspath(), функция, модуль os.path, 496
    __abstractmethods__, атрибут объекта types , 79
    @abstractmethod, декоратор, 182, 326
    @abstractproperty, декоратор, 182, 326
    __abs__(), метод, 93
    abs(), функция, 97, 259
    модуль operator, 346
    accept2dyear, переменная, модуль time,
    507
    accept(), метод объектов класса dispatcher, 569
    объектов сокетов, 596
    accept(), метод объектов класса Listener,
    542
    access(), функция, модуль os, 484
    acosh(), функция, модуль math, 319
    acos(), функция, модуль math, 319
    acquire(), метод объектов класса Condition, 552
    объектов класса Lock, 548
    объектов класса RLock, 549
    объектов класса Semaphore, 549
    activate(), метод объектов SocketServer,
    615
    active_children(), функция, модуль multiprocessing, 543
    active_count(), функция, модуль threading, 555
    __add__(), метод, 92, 179
    add(), метод множеств, 36, 74
    объектов класса TarFile, 403
    add(), функция, модуль operator, 346
    add_data(), метод объектов класса
    Request, 642
    addfile(), метод, объектов класса
    TarFile, 403
    addFilter(), метод объектов класса Handler, 456
    объектов класса Logger, 450
    addHandler(), метод объектов класса
    Logger, 453
    add_header(), метод объектов класса Message, 690
    объектов класса Request, 643

    796
    Алфавитный указатель addLevelName(), функция, модуль logging, 460
    add_option(), метод, модуль optparse,
    206
    add_option(), метод объектов класса
    PtionParser, 470
    add_password(), метод объектов
    AuthHandler, 645
    address_family, атрибут объектов
    SocketServer, 615
    addressof(cobj), функция, модуль ctypes,
    765
    address, атрибут объектов класса BaseManager, 539
    объектов класса Listener , 542
    add_section(), метод объектов класса
    ConfigParser, 417
    add_type(), функция, модуль mimetypes,
    704
    add_unredirected_header(), метод объек- тов класса Request, 643
    adler32(), функция, модуль zlib, 413
    AF_*, константы, модуль socket, 586
    aifc, модуль, 729
    AJAX, технология, пример, 661
    alarm(), функция, модуль signal, 500
    alias, команда отладчика, модуль pdb,
    243
    alignment(), функция, модуль ctypes,
    765
    __all__, переменная в пакетах, 198
    и инструкции импортирования, 192
    all(), функция, 66, 99, 259
    allow_reuse_address, атрибут объектов
    SocketServer, 615
    altsep, переменная, модуль os, 484
    altzone, переменная, модуль time, 507
    __and__(), метод, 92
    and, логический оператор, 113
    and_(), функция, модуль operator, 346
    __annotations__, атрибут функций, anydbm, модуль, 392
    any(), функция, 66, 99, 259
    api_version, переменная, модуль sys,
    293
    %APPDATA%, переменная окружения в Windows, 232
    append(), метод объекта типа deque, 333
    объектов класса Element, 715
    объектов типа array, 329
    списков, 32, 66
    appendChild(), метод объектов класса
    Node, 709
    appendleft(), метод, объекта типа deque,
    333
    apply_async(), метод объектов класса
    Pool, 530
    apply(), метод объектов класса Pool, 530
    args, атрибут исключений, 125
    объекта Exception, 274
    args, атрибут, объектов типа partial, 340
    a(rgs) , команда отладчика, модуль pdb,
    243
    argtypes, атрибут объектов функций в модуле ctypes, 760
    argv, переменная, модуль sys, 33, 205,
    228, 293
    ArithmeticError, исключение, 123, 273
    Array(), метод объектов класса Manager,
    536
    array, модуль, 328
    array(), функция модуль array, 329
    модуль multiprocessing, 533
    arraysize, атрибут объектов типа Cursor,
    378
    as, квалификатор в инструкции from-import, 191
    в инструкции import, 46, 190
    в инструкции except, 45
    as, модификатор в инструкции except, 121
    в инструкции with, 127
    ASCII, кодировка и совместимость с UTF-8, 221
    описание, 220
    ascii(), функция, 259
    и Python 3, 260
    ascii_letters, переменная, модуль string,
    362
    ascii_lowercase, переменная, модуль string, 362
    ascii_uppercase, переменная, модуль string, 362
    asctime(), функция, модуль time, 508
    asin(), функция, модуль math, 319
    asinh(), функция, модуль math, 319
    as_integer_ratio(), метод чисел с плаваю- щей точкой, 64
    assert, инструкция, 128, 275
    удаление с помощью ключа -O, 195
    assert_(), метод объекта TestCase, 241
    assertAlmostEqual(), метод

    Алфавитный указатель
    797
    объекта TestCase, 241
    assertEqual(), метод объекта TestCase, 241
    AssertionError, исключение, 123, 128,
    275
    assertNotAlmostEqual(), метод объекта TestCase, 241
    assertNotEqual(), метод объекта TestCase, 241
    assertRaises(), метод объекта TestCase, 241
    as_string(), метод объектов класса
    Message, 690
    astimezone(), метод объектов класса datetime, 426
    async_chat, класс, модуль asyncchat, 565
    asynchat, модуль, 564
    использование, 582
    asyncore, модуль, 519, 564, 568
    использование, 582
    AsyncResult, класс, модуль multiprocessing, 531
    atan2(), функция, модуль math, 319
    atanh(), функция, модуль math, 319
    atan(), функция, модуль math, 319
    atexit, метод, 234
    atexit, модуль, 280
    attach(), метод объектов класса Message,
    690
    attrgetter(), функция, модуль operator,
    348
    attrib, атрибут объектов класса Element,
    715
    AttributeError, исключение, 123, 275
    и связывание атрибутов, 177
    attributes, атрибут объектов класса
    Node, 708
    audioop, модуль, 729
    authkey, атрибут объектов класса
    Process, 521
    awk, команда UNIX, сходство с генера- торами списков, 152
    B
    -b, параметр командной строки, 226
    b, префикс в строковых литералах, 54
    b2a_base64(), функция, модуль binascii,
    680
    b2a_hex(), функция, модуль binascii,
    680
    b2a_hqx(), функция, модуль binascii,
    681
    b2a_uu(), функция, модуль binascii, 680
    b16decode(), функция, модуль base64,
    679
    b16encode(), функция, модуль base64,
    679
    b32decode(), функция, модуль base64,
    679
    b32encode(), функция, модуль base64,
    679
    b64decode(), функция, модуль base64,
    678
    b64encode(), функция, модуль base64,
    678
    'backslashreplace', политика обработки ошибок при кодировании строк Юни- кода, 217
    BadStatusLine, исключение, модуль http.client, 628
    base64, модуль, 677
    base64, формат, описание, 677
    BaseCGIHandler(), функция, модуль wsgiref.handlers, 674
    BaseException, исключение, 123, 273
    BaseHTTPRequestHandler, класс, мо- дуль http.server, 632
    BaseHTTPServer, модуль, 630
    BaseManager, класс, модуль multiprocessing, 538
    BaseManager(), функция, модуль multiprocessing, 538
    basename(), функция, модуль os.path,
    496, 499
    BaseProxy, класс, модуль multiprocessing, 541
    BaseRequestHandler, класс, модуль
    SocketServer, 611
    __bases__, атрибут классов, 176
    объекта types, 79 basestring, переменная, 260
    basicConfig(), функция, модуль logging,
    446
    BasicContext, переменная, модуль decimal, 315
    .bat, файлы, в Windows, 231
    bdb, модуль, 725
    Beautiful Soup, пакет, 699
    betavariate(), функция, модуль random,
    324
    bin(), функция, 112, 260
    Binary(), функция интерфейс доступа к базам данных,
    381
    модуль xmlrpc.client, 654

    1   ...   69   70   71   72   73   74   75   76   ...   82


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