parameters: (self, n = -1)
return_statement: return r
docstring: Read at most size bytes from the file
          (less if the read hits EOF before obtaining size bytes).
  
          If the size argument is negative or omitted, read all data until EOF
          is reached. The bytes are returned as a string object. An empty
          string is returned when EOF is encountered immediately.
docstring_summary: Read at most size bytes from the file
          (less if the read hits EOF before obtaining size bytes).
docstring_tokens: Read at most size bytes from the file ( less if the read hits EOF before obtaining size bytes ) .
function: def read(self, n = -1):
          """Read at most size bytes from the file
          (less if the read hits EOF before obtaining size bytes).
  
          If the size argument is negative or omitted, read all data until EOF
          is reached. The bytes are returned as a string object. An empty
          string is returned when EOF is encountered immediately.
          """
          _complain_ifclosed(self.closed)
          if self.buflist:
              self.buf += ''.join(self.buflist)
              self.buflist = []
          if n is None or n < 0:
              newpos = self.len
          else:
              newpos = min(self.pos+n, self.len)
          r = self.buf[self.pos:newpos]
          self.pos = newpos
          return r
function_tokens: def read ( self , n = - 1 ) : _complain_ifclosed ( self . closed ) if self . buflist : self . buf += '' . join ( self . buflist ) self . buflist = [ ] if n is None or n < 0 : newpos = self . len else : newpos = min ( self . pos + n , self . len ) r = self . buf [ self . pos : newpos ] self . pos = newpos return r