This post is added as a reference for myself.
“a function that produces a sequence of results instead of a single value”
The presentation above is an incredible overview of this amazing feature and I’ve been taking advantage of it whenever I can. Here is one case where I was able to use this today:
#!/usr/bin/env python import os import re SYSFS_TAPE_PATH = "/sys/class/scsi_tape/" def find_drives(): """ Return a list of tape drives """ for drive in os.listdir(SYSFS_TAPE_PATH): if re.match(r'^nst[0-9]+$', drive): yield drive for drive in find_drives(): print drive
Running the script produces all of the drives on the system:
$ ./generator nst0 nst1 nst2 nst3
In the past I would have created a list and returned it after processing all of the drives in the scsi_tape directory. With generators that is no longer necessary and I find the code is much more readable. A huge thanks to David for the great presentation! Hopefully one day I will get to take one of his awesome Python programming classes.