- Advanced Python
- Section 1. Variables & Memory Management
- Section 2. Integer types
- Section 3. Float
- Section 4. Decimal
- Section 5. Variable scopes
- Section 6. Closures
- Section 7. Decorators
- Section 8. Named Tuples
- Section 9. Sequence Types
- Section 10. Iterators and Iterables
- Section 11. Generators
- Section 12. Context Managers
- Материалы продвинутого уровня по Питону
- Статьи из официальной документации
- Статьи про классы, атрибуты и методы
- Метаклассы
- Статьи на другие темы
- Заключение
Advanced Python
This tutorial series explains the advanced Python concepts and helps you understand how and why things work in Python under the hood.
To learn advanced Python, you need to have basic Python knowledge and some practical experience in Python programming.
Section 1. Variables & Memory Management
- References – learn about references and how reference counting works in Python.
- Garbage collection – understand the garbage collection and how to interact with Python Garbage collector via the gc module.
- Dynamic typing – explain to you how dynamic typing works and understand the differences between static types and dynamic types.
- Mutable & Immutable objects – introduce you to mutable and immutable objects in Python.
- is operator – help you understand object identity and equality, and how to use the is operator to check if two variables reference the same object.
- None – learn about the None object and how to use it properly.
Section 2. Integer types
- Integers – learn about the integer and how Python stores the integers in the memory.
- Floor division operator (//) – introduce you to the floor division operator (//) and how to use it effectively.
- Modulo operator (%) – explain how the module operator (%) works in Python.
- bool – explain how Python boolean works under the hood.
- The and operator – learn how to use the and operator effectively.
- The or operator – show you how to use the or operator.
Section 3. Float
- Float – explain how Python represents floating-point numbers internally and how to test two floats for equality.
- Converting float to int – show you how to convert float to int.
- Rounding – learn how to round a floating-point number to a specified number of digits after the decimal point.
Section 4. Decimal
- Decimal – learn about the decimal module that provides support for fast correctly-rounded decimal floating-point arithmetic.
Section 5. Variable scopes
- Variable scopes – explain to you the variable scopes and help understand the built-in, local, and global variables.
- Nonlocal scopes and nonlocal variables – understand the nonlocal scopes and how to change variables of the nonlocal scopes using the nonlocal keyword.
Section 6. Closures
Section 7. Decorators
- Decorators – explain to you the decorator and show you how to develop a simple decorator in Python.
- Decorators with arguments – show you how to define a decorator that accepts one or more arguments.
- Class Decorators – illustrate how to define a class as a decorator.
Section 8. Named Tuples
Section 9. Sequence Types
- Sequence types – learn about sequences and their basic operations
- Lists vs. Tuples – explain the main differences between the tuple and list.
- Slicing – show you how to use slicing to extract data from or assign data to a sequence.
- Custom Sequence Type – learn about the custom sequence type and show you how to use a custom sequence type to define the Fibonacci sequence.
Section 10. Iterators and Iterables
- Iterators – learn about the iterator protocol and how to define a custom iterator.
- Iterators vs. Iterables – understand iterators and iterables, and the differences between them
- iter() – explain to you how the iter() function works and how to use it effectively.
Section 11. Generators
- Generator functions – introduce you to the generator functions and how to use generators to create iterators.
- Generator expressions – show you an alternative syntax for creating a generator object.
Section 12. Context Managers
Материалы продвинутого уровня по Питону
В мире все примерно распределяется в соответствии с принципом Паретто. Меньшая часть — богатые, большая часть — бедные (читающий, ты входишь в золотой миллиард). Тоже касается и материалов о программировании. Порой очень сложно найти хоть что-нибудь не начального уровня.
После прочтения Dive into Python или подобной ей и ознакомления с документацией возникает вопрос, а что читать дальше? Можно обратиться к списку книг на python.org. Там есть раздел Advanced Books, но в нем всего лишь 6 книг (седьмая не выходила), и только одну я бы назвал по-настоящему стоящей.
К счастью, у Питона есть очень подробная и качественная документация. Но даже в ней многие темы либо только поверхностно затронуты, либо их очень сложно найти (потому что документация большая, и если не знаешь, куда смотреть, не найдешь).
Ниже собраны сложные материлы про Питон, его устройство и возможности. Все на английском (грех, не знать технический английский). Про Dive into Python я слукавил. Большинство приведенных материалов требуют хорошее знание Питона и наличие опыта программирования на нем.
Статьи из официальной документации
- Implementing Descriptors. По-моему, дескрипторы — это лучшая, непревзойденная, возможность Питона, но при этом самая недооцененая. Сейчас они, по большей степени, используются только в фреймворках. Надо будет, как-нибудь, написать, насколько дескрипторы упрощают разработку и улучшают качество кода.
- Customizing attribute access. И первое, про что здесь надо прочитать, это про разницу __getattribute__ и __getattr__ .
- Special method lookup for new-style classes. Важно: доступ к магическим методам происходит в обход __getattribute__ , если вы только не вызываете их напрямую ( len(obj) и obj.__len__() ).
Еще рекомендую прямо взять и сравнить (поставить два окна рядом) иерахию исключений в Питоне 2.4 и иерархию в Питоне 2.6 (по сравнению с 2.5 добавилось только несколько классов).
Статьи про классы, атрибуты и методы
Unifying types and classes in Python 2.2, Guido van Rossum
Статья от создателя языка о том, что такое new-style classes. Думаю, не требуется писать, почему ее надо прочитать (лучше, несколько раз).
The Python 2.3 Method Resolution Order, Michele Simionato
Как происходит вычисление порядка доступа к методам (MRO) и атрибутам при множественном наследовании. У новых классов можно получить через атрибут __mro__ .
Shalabh Chaturvedi:
Очень хорошие и большие книги-статьи + красиво сверстаны.
Python Types and Objects
Как соотносятся type и object .
Python Attributes and Methods
Как происходит доступ к атрибутам в новых классах, отличие функций и методов, описание дескрипторов и MRO.
Be Pythonic
Краткая, не столь важная статья, как писать код в стиле Питона (добавил только для того, чтобы перечислить все статьи автора).
Метаклассы
English Русский [Metaclasses] are deeper magic Метаклассы -- это сложная магия, than 99% of users should ever о которой 99% разработчиков даже worry about. If you wonder не стоит беспокоиться. Если вы whether you need them, you спрашиваете, нужны ли вам don't (the people who actually метаклассы, знайте, они вам не need them know with certainty нужны (люди, которым они that they need them, and don't действительно нужны, абсолютно need an explanation about why) уверены в этом, и им не требуется Tim Peters (c.l.p post 2002-12-22) объяснение почему). (очень плохо, что вы не знаете английский, в этой статье ссылки только на англоязычные материалы)
Проще вставить как моноширинный, чем пытаться изобразить таблицей с ячейками без атрибута width, не говоря уж про стили. Я честно пытался минут 20.
Так вот, это не так. Если вы не знаете метаклассы, вы не знаете Питон. Теперь, после мотивирования, можно и к статьям вернуться.
Customizing class creation
Официальная документация.
Python Metaclasses: Who? Why? When?, Mike Fletcher, PDF
Много практических примеров, как и зачем можно [но часто не нужно, авт.] использовать метаклассы.
Metaclass programming in Python, Часть 2, Часть 3, David Mertz, Michele Simionato
Очень подробные статьи, разбирается все по косточкам. Единственно НО: очень занудно и академично написано. Хотя вполне возможно, что это просто у меня предвзятое отношение к статьям на IBM DeveloperWorks.
Metaclasses in Python 3000, PEP 3115
Метаклассы в третьем Питоне. Основные отличия — возможность передавать kwargs прямо в определении класса class Foo(*bases, **kwargs) и поддержка функции __prepare__ , которая должна вернуть маппинг для атрибутов класса, например упорядоченный словарь.
В целом про метаклассы: знать, знать и еще раз знать. Но! Если вы решили их использовать, подумайте, потом еще раз подумайте и, все-таки, попробуйте обойтись без них ;-D.
Статьи на другие темы
Python 401: Some Advanced Topics, PDF
Лучшее и самое подробное объяснение интерполяции строк ( ‘Hello, %s.’ % username ). Плюс итераторы, генераторы, дескрипторы, метаклассы, почему методы медленне функций (потому что при каждом вызове создается объект) и т.д.
How-To Guide for Descriptors, Raymond Hettinger
Как работают дескрипроты, как их вызывать и использовать.
David Beazley
Пишет очень хорошие, а главное, практические статьи. Только у него можно прочитать, как с помощью генераторов распарсить лог апача или как написать «операционную систему» на корутинах.
Inside the Python GIL
Как работает Global Interpreter Lock и почему использование тредов в Питоне может замедлять программу.
Inside the New GIL (Python 3.2)
Описание и тесты нового GIL, который будет в Питоне 3.2 (и может быть, будет портирован в 2.7).
Generator Tricks for Systems Programmers, Версия 2
Практическое использование генераторов и их преимущества (скорость + низкое потребление памяти).
A Curious Course on Coroutines and Concurrency
Что такое корутины и почему надо четко отличать их от обычных генераторов (у них функции разные: одни выдают данные, другие их перерабатывают). В конце он напишет на них аналог операционной системы.
Мои рекомендации
Посмотрите результат dir(method) и dir(func) . Прочитайте справку по модулям new , itertools , functools . Обязательно, если еще не знаете, познакомьтесь с функциями map , reduce , zip и filter (map может принимать сразу много итераторов).
Прочитайте про Abstract Base Classes и коллекции. И не только в Питоне, но и в Яве. ABC во многом идет по ее следам.
Посетите сайт PyCon, ежегодной конференции разработчиков. Там же доступны и материалы прошлых конференций (хотя часто не доступны). Смотреть надо в Conference/Schedule.
Чуть не забыл, обязательно прочитайте Python Cookbook. Эта практическая книга просто превосходна. Как быстро сортировать, используя метод decorate-sort-redecorate, какой алгоритм сортировки использует Питон (insertion sort для небольшого количества элементов и timsort для большого), как работать с XML, динамически создавать модули и многое другое.
Заключение
Написал, что вспомнил или обнаружил в закладках. Надеюсь, многим поможет. Также не забывайте ipython и его? и . (для тех, кто не знает, это очень мощная интерактивная оболочка для Питона, а вопросы показывают информацию об объектах, например, import sys; sys? ). Да прибудет в вами сила.