python.supply's repositories
guide-to-publishing-packages
This article is a step-by-step guide to assembling and publishing a small, open-source Python package; topics covered include directory structure, basic unit tests, basic continuous integration setup, and publication to a repository.
analyzing-and-transforming-abstract-syntax
Python's built-in libraries include powerful tools for retrieving and operating over abstract syntax trees. This article provides an overview of how to use these features to analyze and transform Python code programmatically.
advantages-of-type-annotations
Native syntactic support for type annotations was introduced in Python 3. This article provides an overview of this feature, reviews how it can be used to document information about expressions and functions in a structured way, and illustrates some of the advantages of leveraging it for applicable use cases.
map-reduce-and-multiprocessing
Multiprocessing can be an effective way to speed up a time-consuming workflow via parallelization. This article illustrates how multiprocessing can be utilized in a concise way when implementing MapReduce-like workflows.
code-serialization-and-transport
Python's built-in libraries include flexible tools for serialization and deserialization of data structures, including abstract representations of source code. This article provides an overview of how these features can enable workflows that involve transportation of code between different components.
comprehensions-and-combinations
Python comprehensions are a powerful language feature that can greatly improve the productivity of a programmer and the readability of code. This article explores how comprehensions can be used to build concise solutions for problems that require generating various kinds of combinations of all the elements from a finite (or infinite) set.
higher-order-functions-and-decorators
This article covers some background on higher-order functions in Python, presents an overview of how Python decorators are defined and used, and illustrates their utility via a few use cases.
iterators-generators-and-uncertainty
Iterators and generators are powerful abstractions within Python that have a variety of uses. This article reviews how they are defined, how they are related, and how they can help programmers work in an elegant and flexible way with data structures and data streams of an unknown or infinite size.
python-supply.github.io
Landing/redirect page for python.supply, where you can use Python as a platform to learn foundational concepts and practical techniques in computer science, programming, and software engineering.
static-checking-via-metaclasses
Python metaclasses are how classes are created, and by defining your own metaclasses you can guide and constrain code contributors in a complex codebase. This article reviews how metaclasses can be employed to implement static checking of user-defined derived classes.
strings-regular-expressions-and-text-data-analysis
While built-in string methods and regular expressions have limitations, they can be leveraged in creative ways to implement scalable workflows that process and analyze text data. This article explores these tools and introduces a few useful peripheral techniques within the context of a use case involving a large text data corpus.
working-with-foreign-functions
Python offers a rich set of APIs that make it possible to build wrappers for foreign functions written in another language (such as C/C++) and compiled into shared libraries. This article introduces some basic techniques that will allow you to start using shared libraries in your projects.
applications-of-immutability
Both built-in and user-defined data structures in Python can be either mutable or immutable. This article explains why Python makes this distinction for built-in data structures and reviews some use cases within which you may want to define an immutable data structure of your own.
embedded-languages-via-overloading
Python's extensive support for operator overloading can help you greatly reduce the conceptual complexity of your library or framework, allowing programmers who must use it to leverage the extensive knowledge and skills they already possess.