#!/usr/bin/env python # coding: utf-8 # ### Comprehensions are good, but not memory efficient. They may create a whole new list # In[1]: # Copyright 2014 Brett Slatkin, Pearson Education Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Preamble to mimick book environment import logging from pprint import pprint from sys import stdout as STDOUT # ### Need to hold the length of every line of the file in memory. BAD! # In[2]: # Example 1 import random with open('my_file.txt', 'w') as f: for _ in range(10): f.write('a' * random.randint(0, 100)) f.write('\n') value = [len(x) for x in open('my_file.txt')] print(value) # ### A generator expression () does not make forward progress. GOOD! # In[3]: # Example 2 it = (len(x) for x in open('my_file.txt')) print(it) # In[4]: ### It returns iterator. # In[5]: # Example 3 print(next(it)) print(next(it)) # ### generator expressions can be composed together. Create a new generator using 'it'! WONDERFUL!! # In[6]: # Example 4 roots = ((x, x**0.5) for x in it) print(roots) # In[7]: # Example 5 print(next(roots))