Полные имена для классов и функций
Функции и объекты класса в python 3.3 имеют новый атрибут __qualname__ (представляет «путь» от модуля верхнего уровня). Для глобальных функций и классов это то же, что и __name__ . Для других функций и классов, он обеспечивает лучшую информацию о том, где они были фактически определены, и как они могут быть доступны из глобальной области.
Пример с (несвязанным) методом:
>>> class C:... def meth(self):... pass>>> C.meth.__name__'meth'>>> C.meth.__qualname__'C.meth'Пример с вложенными классами:
>>> class C:... class D:... def meth(self):... pass...>>> C.D.__name__'D'>>> C.D.__qualname__'C.D'>>> C.D.meth.__name__'meth'>>> C.D.meth.__qualname__'C.D.meth'Пример с вложенной функцией:
>>> def outer():... def inner():... pass... return inner...>>> outer().__name__'inner'>>> outer().__qualname__'outer..inner'Строковое представление этих объектов также изменено, для отображения большей информации:
PEP 412: Ключ-шеринг словари
Словари в python 3.3 теперь имеют возможность совместно использовать часть памяти, хранящую ключи и их хеши, что повышает производительность большинства не встроенных типов.
Вышел Python 3.4.0
Новые особенности:
· В поставку добавлен инсталлятор для пакетного менеджера pip.
· Новые файловые дескрипторы теперь по умолчанию не наследуются дочерними подпроцессами.
· Опция командной строки для изолированного режима (-I).
· Улучшения в обработке нетекстовых кодеков.
· Стандартизирован тип "ModuleSpec" для предоставления метаданных системы импорта модулей на стадии до непосредственной загрузки модуля.
· marshal стал более компактным и эффективным.
Новые модули:
· asyncio: новый предварительный API для асинхронного ввода-вывода.
· ensurepip: загрузка инсталлятора pip.
· enum: реализация классов IntEnum и Enum для работы со списками перечислимых констант.
· pathlib: объектно-ориентированный интерфейс для доступа к файловой системе.
· selectors: высокоуровневое и эффективное мультиплексирование ввода-вывода, надстройка над модулем select.
· statistics: модуль для математической статистики.
· tracemalloc: трассировка распределения памяти.
Значительно улучшенные модули:
· В functools добавлены generic-функции одиночной диспетчеризации (Single-dispatch generic functions).
· Новый протокол pickle 4.
· multiprocessing имеет опцию для избежания использования os.fork в Unix.
· email имеет новый подмодуль contentmanager, и новый подкласс класса Message (EmailMessage), что упрощает обработку MIME.
· inspect и pydoc способны к корректной интроспекции более широкого круга вызываемых объектов, что улучшает вывод функции help().
· ipaddress объявлен стабильным.
Улучшения безопасности:
· Более безопасный алгоритм хэширования.
· Новая функция hashlib.pbkdf2_hmac() (хэширование по алгоритму PBKDF2).
· В модуль ssl добавлена поддержка SNI (Server Name Indication, позволяет обеспечить доступ через шифрованное соединение к виртуальным хостам на одном IP) на стороне сервера, а также поддержка TLSv1.1 и TLSv1.2.
Улучшения CPython:
· Безопасная финализация объектов.
· Новый C API для создания собственных методов распределения памяти.
Подробнее: https://docs.python.org/3/whatsnew/3.4.html.
Pythondigest.ru - самые свежие новости из мира Python
Многие уже видели этот ресурс, а кто не видел - рассказываю, так как ресурс действительно стоящий.
pythondigest.ru - агрегатор новостей о Python, где каждый может добавить свою (или увиденную на просторе интернета) новость из мира Python.
Новости можно фильтровать по языку (русский или английский), а также по разделам:
· Интересные проекты, инструменты, библиотеки
· Книги и документация
· Конференции, события, встречи разработчиков
· Новости
· Релизы
· Статьи и интервью
· Видео
Например, все русские новости.
Также каждую неделю составляется выпуск новостей. Например, самый первый выпуск.
Также можно подписаться на новости от pythondigest по RSS или через twitter.
Модуль fractions
Модуль fractions предоставляет поддержку рациональных чисел.
class fractions.Fraction(numerator=0, denominator=1)
class fractions.Fraction(other_fraction)
class fractions.Fraction(float)
class fractions.Fraction(decimal)
class fractions.Fraction(string)
Класс, представляющий собой рациональные числа. Экземпляр класса можно создать из пары чисел (числитель, знаменатель), из другого рационального числа, числа с плавающей точкой, числа типа decimal.Decimal, и из строки, представляющей собой число.
>>> from fractions import Fraction>>> Fraction(1, 3)Fraction(1, 3)>>> Fraction(2, 6)Fraction(1, 3)>>> Fraction(100)Fraction(100, 1)>>> Fraction()Fraction(0, 1)>>> Fraction('3/7')Fraction(3, 7)>>> Fraction(' 3/7 ')Fraction(3, 7)>>> Fraction('3.1415')Fraction(6283, 2000)>>> Fraction(3.1415)Fraction(7074029114692207, 2251799813685248)Необходимо заметить, что, поскольку числа с плавающей точкой не совсем точны, получающееся рациональное число может отличаться от того, что мы хотим получить. Можете поделить столбиком 7074029114692207 на 2251799813685248 и убедиться :)
Рациональные числа можно, как int и float, складывать, умножать, делить...
>>> from fractions import Fraction>>> a = Fraction(1, 7)>>> b = Fraction(1, 3)>>> a + bFraction(10, 21)>>> a - bFraction(-4, 21)>>> a * bFraction(1, 21)>>> a / bFraction(3, 7)>>> a % bFraction(1, 7)>>> b % aFraction(1, 21)>>> a ** b0.5227579585747102>>> abs(a - b)Fraction(4, 21)Fraction.limit_denominator(max_denominator=1000000) - ближайшее рациональное число со знаменателем не больше данного.
>>> from fractions import Fraction>>> a = Fraction(3.1415)>>> aFraction(7074029114692207, 2251799813685248)>>> a.limit_denominator()Fraction(6283, 2000)Также, помимо класса рациональных чисел, модуль fractions предоставляет функцию для нахождения наибольшего общего делителя.
fractions.gcd(a, b) - наибольший общий делитель чисел a и b.
>>> from fractions import gcd>>> gcd(1, 5)1>>> gcd(1000, 3)1>>> gcd(4, 6)2>>> gcd(0, 2)2>>> gcd(0, 0)0Модуль cmath
Модуль cmath – предоставляет функции для работы с комплексными числами.
cmath.phase(x) - возвращает фазу комплексного числа (её ещё называют аргументом). Эквивалентно math.atan2(x.imag, x.real). Результат лежит в промежутке [-π, π].
Получить модуль комплексного числа можно с помощью встроенной функции abs().
cmath.polar(x) - преобразование к полярным координатам. Возвращает пару (r, phi).
cmath.rect(r, phi) - преобразование из полярных координат.
cmath.exp(x) - ex.
cmath.log(x[, base]) - логарифм x по основанию base. Если base не указан, возвращается натуральный логарифм.
cmath.log10(x) - десятичный логарифм.
cmath.sqrt(x) - квадратный корень из x.
cmath.acos(x) - арккосинус x.
cmath.asin(x) - арксинус x.
cmath.atan(x) - арктангенс x.
cmath.cos(x) - косинус x.
cmath.sin(x) - синус x.
cmath.tan(x) - тангенс x.
cmath.acosh(x) - гиперболический арккосинус x.
cmath.asinh(x) - гиперболический арксинус x.
cmath.atanh(x) - гиперболический арктангенс x.
cmath.cosh(x) - гиперболический косинус x.
cmath.sinh(x) - гиперболический синус x.
cmath.tanh(x) - гиперболический тангенс x.
cmath.isfinite(x) - True, если действительная и мнимая части конечны.
cmath.isinf(x) - True, если либо действительная, либо мнимая часть бесконечна.
cmath.isnan(x) - True, если либо действительная, либо мнимая часть NaN.
cmath.pi - π.
cmath.e - e.
Модуль glob
Модуль glob находит все пути, совпадающие с заданным шаблоном в соответствии с правилами, используемыми оболочкой Unix. Обрабатываются символы "*" (произвольное количество символов), "?" (один символ), и диапазоны символов с помощью []. Для использования тильды "~" и переменных окружения необходимо использовать os.path.expanduser() и os.path.expandvars().
Для поиска спецсимволов, заключайте их в квадратные скобки. Например, [?] соответствует символу "?".
glob.glob(pathname) возвращение список (возможно, пустой) путей, соответствующих шаблону pathname. Путь может быть как абсолютным (например, /usr/src/Python-1.5/Makefile) или относительный (как ../../Tools/*/*.gif).
glob.iglob(pathname) - возвращает итератор, дающий те же значения, что и glob.glob.
glob.escape(pathname) - экранирует все специальные символы для glob ("?", "*" и "["). Специальные символы в имени диска не экранируются (так как они там не учитываются), то есть в Windows escape("//?/c:/Quo vadis?.txt") возвращает "//?/c:/Quo vadis[?].txt". (новое в python 3.4).
Рассмотрим, например, каталог, содержащий только следующие файлы: 1.gif, 2.txt и card.gif. glob.glob() вернёт следующие результаты. Обратите внимание, что любые ведущие компоненты пути сохраняются.
>>> import glob>>> glob.glob('./[0-9].*')['./1.gif', './2.txt']>>> glob.glob('*.gif')['1.gif', 'card.gif']>>> glob.glob('?.gif')['1.gif']Если каталог содержит файлы, начинающиеся с ".", они не будут включаться по умолчанию. Рассмотрим, например, каталог, содержащий card.gif и .card.gif:
>>> import glob>>> glob.glob('*.gif')['card.gif']>>> glob.glob('.c*')['.card.gif']