Too Self Centered

Manuel M. Garcia mgarcia at cole-switches.com
Tue Jan 7 20:55:10 EST 2003


Python is very "self" centered! :-)

Your code is correct, and typical of Python.  Python programmers type
"self" a lot.  It is commonly complained about, but after programming
in Python for a while, now I prefer it.

You are not required to read "Style Guide for Python Code; PEP8", but
it is highly recommended:

http://www.python.org/peps/pep-0008.html

You can get rid of some "self"s by using
"x += 1" instead of "x = x + 1"
You use "+=" inconsistently.

Indent more than 1 space, Python uses indentation exclusively to
specify code blocks, so it helps to be able to see indents clearer.
Most people use 4 spaces.  Any coder's text editor will make this easy
for you.

Your program will blow up reading a large file because of your
recursive use of "subsequentRead(self)" and "subsequentLines(self)".
The form of recursion you are using is called "tail-recursion".
Python does not optimize tail-recursion.  Outside of the LISP world,
tail-recursion is not used (and rarely optimized).  A "while" loop
would be better.

Instead of "maketrans" and "translate", just use "replace".

I have no idea what your code is supposed to do, I will guess you wish
to count how many lines in a file, and then turn the newlines into
spaces to turn the multiline file into one long string.

This would be more typical:

# ###################################################### #

f = open('GNU-wordlist.txt').read()

number_lines = 0
if f:
    number_lines = f.count('\n') + 1

f = f.replace('\n',' ')

print """number_lines: %i
length of string f: %i
first 100 characters of f: %s""" % (number_lines, len(f), f[:100])

# ###################################################### #

but really, a file is usually turned into a list of lines, and all
processing done with that list:

# ###################################################### #

import random

s = open('GNU-wordlist.txt').read()

len_s = len(s)

list0 = s.split('\n')

del s

print """length of file: %i
number_lines: %i
20 random words: %s""" % (
    len_s,
    len(list0),
    ' '.join( [ random.choice(list0) for _ in range(20) ] )
    )

# ###################################################### #

Manuel





More information about the Python-list mailing list