Steve Willoughby wrote: > On 01-Nov-11 08:34, Mayo Adams wrote: >> When writing a simple for loop like so: >> >> for x in f >> >> where f is the name of a file object, how does Python "know" to interpret >> the variable x as a line of text, rather than,say, an individual >> character in the file? Does it automatically >> treat text files as sequences of lines? > > Every object defines what its behavior will be when asked to do > something. In this case, file objects know that they are capable of > iterating over a list of their contents by being used in a "for x in f" > loop construct. The file object knows to respond to that by yielding up > a line from the file for every iteration. > > You could, theoretically, write a variation of the file object class > which iterated over characters, or logical blocks (records of some sort) > within files, and so forth. Here's a simple example of a class derived from file that iterates over characters (bytes) instead of lines.
Standard file: >>> for line in open("tmp.txt"): ... print repr(line) ... 'this\n' 'is but an\n' 'example\n' Modified file class: >>> class MyFile(file): ... def next(self): ... c = self.read(1) ... if not c: ... raise StopIteration ... return c ... >>> for c in MyFile("tmp.txt"): ... print repr(c) ... 't' 'h' 'i' 's' '\n' 'i' 's' ' ' 'b' 'u' 't' ' ' 'a' 'n' '\n' 'e' 'x' 'a' 'm' 'p' 'l' 'e' '\n' _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor