On Fri, 25 Mar 2005 17:02:31 +0100, "Fredrik Lundh" <[EMAIL PROTECTED]> wrote:
>"Keith" wrote: > >> Is there a function for comparing version numbers? >> >> E.g. >> >> 0.1.0 < 0.1.2 >> 1.876b < 1.876c >> 3.2.2 < 3.4 > >the following works for many common cases: > >import re > >def cmpver(a, b): > def fixup(i): > try: > return int(i) > except ValueError: > return i > a = map(fixup, re.findall("\d+|\w+", a)) > b = map(fixup, re.findall("\d+|\w+", b)) > return cmp(a, b) # -1 if a<b, 0 if a=b, 1 if a>b [OT] Visually, I like the nested def fixup, and I realize that for cmpver execution overhead is not likely to be an issue, but in general, what do you think of not being able to write it that way if MAKE_FUNCTION overhead is unacceptable? What if we had something like @sticky('fixup') # evaluate binding only first time def cmpver(a , b): def fixup ... ? Regards, Bengt Richter -- http://mail.python.org/mailman/listinfo/python-list