Future division patch available (PEP 238)

Ian Parker parker at gol.com
Tue Aug 14 10:04:57 EDT 2001


In article <mailman.997716022.20626.python-list at python.org>, Skip
Montanaro <skip at pobox.com> writes
>
>    Ian> Clearly there'll be an effective tool to identify likely areas of
>    Ian> concern, but I hope it won't generate too many false-positives (if
>    Ian> that's the correct way round) and zero of whatever the opposite is.
>
>I posted this once.  Maybe once again will be sufficient... ;-)
>
>    import tokenize
>    import sys
>
>    class TokenSorter:
>        def __init__(self, f):
>            self.tokens = {}
>            self.filename = f
>            self.line = ""
>            self.linenumber = 0
>            self.lastprinted = 0
>
>        def tokeneater(self, typ, val, (sr, sc), (er, ec), line):
>            if self.line != line:
>                self.linenumber += 1
>                self.line = line
>            if (tokenize.tok_name[typ] == "OP" and
>                val == "/" and
>                self.lastprinted != self.linenumber):
>                print "%s(%d): %s" % (self.filename, self.linenumber,
>                                       line.rstrip())
>                self.lastprinted = self.linenumber
>
>    def main():
>        for fn in sys.argv[1:]:
>            try:
>                f = open(fn)
>            except IOError:
>                pass
>            else:
>                ts = TokenSorter(fn)
>                try:
>                    tokenize.tokenize(f.readline, ts.tokeneater)
>                except tokenize.TokenError:
>                    pass
>
>    if __name__ == "__main__":
>        main()
>
>Run it like
>
>    python finddiv.py *.py
>
>Output looks like
>
>    searches.py(23):     print "passed: %d, failed: %d, pass ratio: %.3f" % (p, 
>f, float(p)/(p+f))
>    searches.py(27):         print "%.3f queries per second" % ((p+f)/t)
>    velocity.py(1): x = 1/2
>    velocity.py(4):     return x/t
>
>so you can easily step through the results with Emacs's next-error command.
>

Thanks Skip- what an excellent piece of code. I'd imagine it'd need to
be put in the FAQ and still posted several more times.  

With script plus a little surrounding verbiage, my possibly affected 13
of 19 files scanned came up as:

"19 .py files scanned, 4 affected with 9 instances of the division
operator."

Now that is much more reasonable, but it is still almost 25% of the
modules, and I still, if I understand correctly, need to decide which
ones should be integer division.  

For a large project, that might amount to a significant amount of work:
checking, fixing, testing, regression testing, UAT, change control and
releasing.  

Of course, I was brought up on the idea of integer division giving an
integer result, so perhaps I use it rather freely in my code.  Looking
at some other packages, I see less than 10% of files containing the
operator, but even that still implies substantial work for someone.

Regards

Ian
-- 
Ian Parker



More information about the Python-list mailing list