Generators
Generator expressions are actually a sort of comprehension too; they compress the more advanced (this time it really is more advanced!) generator syntax into one line. The greater generator syntax looks even less object-oriented than anything we've seen, but we'll discover that once again, it is a simple syntax shortcut to create a kind of object.
Let's take the log file example a little further. If we want to delete the WARNING
column from our output file (since it's redundant: this file contains only warnings), we have several options at various levels of readability. We can do it with a generator expression:
import sys # generator expression inname, outname = sys.argv[1:3] with open(inname) as infile: with open(outname, "w") as outfile: warnings = ( l.replace("\tWARNING", "") for l in infile if "WARNING" in l ) for l in warnings: outfile.write(l)
That's perfectly readable, though I wouldn't want to make the expression much...