PyCon 2016 in Portland, Or
hills next to breadcrumb illustration

Sunday 1:20 p.m.–4:40 p.m.

Python Epiphanies

Stuart Williams

Audience level:
Python Core (language, stdlib, etc.)


This tutorial is for developers who've been using Python for a while and would consider themselves at an intermediate level, but are looking for a deeper understanding of the language. It focuses on how Python differs from other languages in subtle but important ways that are often confusing, and it demystifies a number of language features that are sometimes misunderstood.


In many ways Python is very similar to other programming languages. However, in a few subtle ways it is quite different, and many software developers new to Python, after their initial successes, hit a plateau and have difficulty getting past it. Others don't hit or perceive a plateau, but still find some of Python's features a little mysterious or confusing. This tutorial will help deconstruct some common incorrect assumptions about Python. If in your use of Python you sometimes feel like an outsider, like you're missing the inside jokes, like you have most of the puzzle pieces but they don't quite fit together yet, or like there are parts of Python you don't understand, this may be a good tutorial for you. After completing this tutorial you'll have a deeper understanding of many Python features. Here are some of the topics we'll cover: - How objects are created and names are assigned to them - Ways to modify a namespace: assignment, import, function definition and call, and class definition, decorators, etc. Much of the tutorial is structured around namespaces and ways to change them to help you understand most of the differences between variables in other languages and Python, including - why Python has neither pass-by-value nor pass-by-reference function call semantics, - and why parameters passed to a function can sometimes be changed by it and sometimes cannot. - Iterables, iterators, and the iterator protocol, including how to make class instances iterable - How to use generators to make your code easier to read and understand - Hacking classes after their definition, and creating classes without a class statement, as an exercise to better understand how they work - Bound versus unbound methods, how they're implemented, and interesting things you can do with bound methods - How and why you might want to create or use a partial function - Example use-cases of functions as first-class objects - Unpacking and packing arguments with * and ** on function call and definition

Student Handout

No handouts have been provided yet for this tutorial