Comprehensible Comprehensions
Speaker | Trey Hunner |
---|---|
Time | 2017-08-05 10:45 |
Conference | PyCon Au 2017 |
Comprehensible Comprehensions
Assumptions:
- Know how for loops work.
- You are not a fan of list comprehensions.
iterable:
- anything you can iterate over.
generator:
- lazy iterable.
List comprehensions
- Turn one list into another list.
- Making new list into old list more common in Python.
- Often copy old list to new list to avoid mutating old list.
- Contains some information as for loop.
- Are more specific about intent of code then for loop.
Complaint
-
Makes readable for loops unreadable.
- Comprehensions often written on one line. Very condensed. No white space.
-
Operation, Loop, Condition. Don’t have to be on one line:
.. code-block:: python
squared_odds = [ n ** 2 for n in numbers if n %2 == 1 ]
- Should always start by writing comprehension on multiple lines.
Generator expressions
-
If you are only going to loop over result once, you should use a generator expression instead of a list comprehension.
.. code-block:: python
squared_numbers = (n ** 2 for n in numbers)
- Generators are lazy, only generate on demand.
- Generators are one time only. Can only loop over once. Single use.
When not to use comprehensions
- Only for turning one list into another list.
- Do not have side effects, e.g. print, in comprehension.
- When dict/list constructors can be used instead.
- When not changing or filtering anything.