I am trying to create a generator function to return the content of a .csv file row by row and while the generator function does seem to be iterable with me being able to loop over it with a for loop, when I print the object type of the generator function, instead of returning class ‘generator’, it returns class ‘function’. The generator function also has a memory size consistent with it being a generator function.
The function code:
import sys, time start_time = time.time() def file_row_generator(): for row in open('file.csv'): yield row print(file_row_generator) print(type(file_row_generator)) print(sys.getsizeof(file_row_generator)) l = [] for row in file_row_generator(): l.append(row) print(time.time() - start_time)
This returns the output:
<function file_row_generator at 0x00F3BC40>
<class ‘function’>
68
0.05980682373046875
Advertisement
Answer
file_row_generator
is a function that returns a generator. Try print(file_row_generator())
.
>>> def foo(): ... for i in range(3): ... yield i ... >>> print(foo) <function foo at 0x7fd3cedaa310> >>> print(foo()) <generator object foo at 0x7fd3ced88660>