Що нового в python 3, 3, python 3 для початківців і чайників

Основна інформація

Нові можливості синтаксису:

  • Нове вираз yield from для реалізації генераторів.
  • Синтаксис u "unicode" знову дозволений для об'єктів типу str.

Нові вбудовані модулі:

Нові вбудовані поліпшення:

  • Перероблена ієрархія I / O винятків
  • Переписана машина імпорту на основі importlib
  • Більш компактні рядки unicode
  • Більш компактні словники
  • Рандомизация хеш-суми включена за замовчуванням

PEP 405: Віртуальне середовище

Віртуальні середовища допоможуть створити окремі установки Python, розділяючи загально базові установки для зручності обслуговування. Віртуальні середовища мають свій власний набір приватних пакетів (тобто локально встановлені бібліотеки), і необов'язково відокремлені від загальносистемних пакетів.

Цей PEP додає модуль venv для програмного доступу, і скрипт pyvenv для доступу до командного рядка і адміністрування. Інтерпретатора Python стає відомо про pvenv.cfg файлі, існування якого сигналізує базу дерев каталогів віртуального середовища.

PEP 420: Простір назв пакунків

Вбудована підтримка пакетів, які не вимагають файли __init__.py

PEP 393: гнучке уявлення рядків

Рядки змінені для підтримки декількох внутрішніх уявлень, в залежності від символу з найбільшим порядковим Unicode (1, 2 або 4 байти). Це дозволяє ефективно представляти рядка в більшості випадків, але дає доступ до повного UCS-4 на всіх системах. Для сумісності з існуючим API, кілька подань можуть існувати паралельно, з плином часу, ця сумісність повинна бути припинена.

На стороні C API, PEP 393 є повністю назад сумісним. API повинні залишатися доступними принаймні п'ять років. Програми, що використовують API не будуть у повній мірі користуватися скороченням пам'яті, або - ще гірше - може використовувати трохи більше пам'яті, так як Python, можливо, доведеться підтримувати дві версії кожного рядка (в застарілому форматі і в новому ефективного зберіганні).

функціональність

Зміни, внесені PEP 393:

  • Python тепер завжди підтримує повний набір кодів Unicode, в тому числі не-BMP символи (тобто від U + 0000 до U + 10FFFF). Різниця між вузькою та широкою рядком більше не існує, і Python тепер поводиться як при широкій збірці, навіть під Windows.
  • Зі смертю вузької версії, проблеми, характерні для вузької версії також були виправлені, наприклад:
    • len () тепер завжди повертає 1 для не-BMP символів, тому len ( '\ U0010FFFF') == 1;
    • сурогатні пари не рекомбінують в рядкові літерали, так '\ uDBFF \ uDFFF'! = '\ U0010FFFF';
    • індекс або зріз НЕ-BMP символів повертає очікуване значення, тому '\ U0010FFFF' [0] тепер повертає '\ U0010FFFF'. а не '\ uDBFF';
    • Всі інші функції в стандартній бібліотеці тепер коректно обробляти не-BMP коди.
  • Значення sys.maxunicode тепер завжди 1114111 (0x10FFFF в шістнадцятковій). PyUnicode_GetMax () як і раніше повертає або 0xFFFF або 0x10FFFF для забезпечення сумісності, і його не слід використовувати з новим API Unicode.
  • ./ Configure прапор --with-wide-unicode був видалений.

Продуктивність і використання ресурсів

Зберігання Unicode рядків тепер залежить від максимального коду в кодовому рядку:

  • ASCII і Latin1 рядки (U + 0000- U +00 FF) використовують 1 байт;
  • BMP рядки (U + 0000- U + FFFF) використовують 2 байта;
  • Ні-BMP рядки (U + 10000- U +10 FFFF) використовують 4 байта.

Результатом є те, що для більшості додатків, використання пам'яті має значно зменшитися - особливо в порівнянні з колишнім Unicode, так як у багатьох випадках, рядки будуть чистим ASCII навіть в міжнародному контексті (бо багато рядків зберігають дані не-людською мовою, такі як XML-фрагменти, HTTP заголовки, JSON-кодовані даних і т.д.). Ми також сподіваємося, що вона, з тих же причин, підвищить ефективність кеш-пам'яті процесора для нетривіальних додатків. Використання пам'яті Python 3.3 в два-три рази менше, ніж Python 3.2, і трохи менше, ніж Python 2.7, на тесті Django.

PEP 3151: Переробка ОС і IO ієрархії виключень

Ієрархія винятків спрощена і більш детальна.

Вам не доведеться більше турбуватися про вибір відповідного типу виключення між OSError, IOError, EnvironmentError, WindowsError, mmap.error, socket.error або select.error. Всі ці типи винятків тепер тільки один: OSError. Інші імена зберігаються в якості псевдонімів для забезпечення сумісності.

Крім того, тепер легше зловити певну умову помилки. Замість перевірки атрибут ERRNO для конкретної постійної з ERRNO модуля, ви можете обробляти конкретний підклас OSError. Доступні підкласи:

  • BlockingIOError
  • ChildProcessError
  • ConnectionError
  • FileExistsError
  • FileNotFoundError
  • InterruptedError
  • IsADirectoryError
  • NotADirectoryError
  • PermissionError
  • ProcessLookupError
  • TimeoutError

І ConnectionError також має підкласи:

  • BrokenPipeError
  • ConnectionAbortedError
  • ConnectionRefusedError
  • ConnectionResetError

Наприклад, наступний код, написаний для Python 3.2:

Тепер може бути написаний без імпорту ERRNO і без ручної перевірки атрибутів виключення:

PEP 380: Синтаксис для делегування Subgenerator

PEP 380 додає вираз yield from. що дозволяє генератору делегувати частину своїх операцій на інший генератор. Це дозволяє частини коду, що містить 'yield', щоб бути винесена і поміщена в інший генератор. Крім того, subgenerator дозволили повернутися зі значенням, а значення стає доступним для делегування генератора.

Хоча призначений в першу чергу для використання в делегуванні subgenerator, yield from фактично дозволяє делегувати довільні subiterators.

Для простих ітераторів yield from iterable це просто скорочена форма для for item in iterable: yield item

Однак, на відміну від звичайного циклу, yield from дозволяє і повернути остаточне значення у зовнішній генератор:

Основний принцип зміни - дозволити розділити генератор на кілька субгенераторов так само легко, як одна велика функція може бути розбита на кілька підфункцій.

PEP 409: Придушення контексту виключення

PEP 409 вводить новий синтаксис, який дозволяє відключити контекст винятків. Це дозволяє отримувати чисте повідомлення про помилки в додатках, конвертувати в різні типи винятків:

Без вираження from None буде порушено стандартне виняток:

Однак оригінальне виключення все одно залишається доступним, для спрощення налагодження:

Повні імена для класів і функцій

Функції та об'єкти класу в python 3.3 мають новий атрибут __qualname__ (представляє «шлях» від модуля верхнього рівня). Для глобальних функцій і класів це те ж, що і __name__. Для інших функцій і класів, він забезпечує кращу інформацію про те, де вони були фактично визначені, і як вони можуть бути доступні з глобальної області.

Приклад з (непов'язаним) методом:

Приклад з вкладеними класами:

Приклад з вкладеною функцією:

Строкове представлення цих об'єктів також змінено, для відображення більшої інформації:

PEP 412: Ключ-Шерінг словники

Словники в python 3.3 тепер мають можливість спільно використовувати частину пам'яті, що зберігає ключі і їх хеши, що підвищує продуктивність більшості не вбудованих типів.

Схожі статті