We are not checking for arbitrary integers, only "valid" record ids
and they cannot be negative.

On Jun 9, 2:43 pm, AchipA <attila.cs...@gmail.com> wrote:
> Regardless of speed, if you *really* want to check for integers,
> you'll need a far more complex regex (how do you handle sign ? int
> size ?). int() does all that for you without too much effort.
>
> But, for the record, to satisfy my own curiosity, too - one quickie
> profiling coming up (python 2.5.2, x86_64 linux):
>
> blinky:~# python -m timeit "s=[str(i) for i in range(10000)]"
> 100 loops, best of 3: 4.64 msec per loop
> blinky:~# python -m timeit "s=[str(i) for i in range(10000)]" "def
> is_integer(i):" "  try:" "    int(i)" "    return True"  "  except:
> return False" "for i in s:"  "  is_integer(i)"
> 100 loops, best of 3: 9.32 msec per loop
> blinky:~# python -m timeit "s=[str(i) for i in range(10000)]" "import
> re" "integer_pat=re.compile('[0-9]+$')" "is_integer=integer_pat.match"
> "for i in s:"  "  is_integer(i)"
> 100 loops, best of 3: 10.5 msec per loop
>
> So, technically it's 4.68 vs 5.86msec which is a ~20% speed increase
> over the simplified regex even with the user function overhead. defs
> might be slow, but regexes are no rockets either (C or not).
>
> On Jun 9, 8:05 pm, Iceberg <iceb...@21cn.com> wrote:
>
> > I don't know but you'd better do some profiling if you really want to
> > find out. IMHO, try...except might be fast, but wrapping it inside a
> > user-defined function could be another story, because defining a
> > function is expensive in python, so we shall call native function
> > (implemented by C) whenever possible.
>
> > On Jun10, 0:48am, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > > good point. Anyway, the function is no longer called as often as
> > > Alexey originally pointed out, so it would make a negligible
> > > difference. I will change it though.
>
> > > Massimo
>
> > > On Jun 9, 11:24 am, AchipA <attila.cs...@gmail.com> wrote:
>
> > > > Any particular reason not doing is_integer via a 'try: int(i) except:
> > > > return False'  statement ? It should be faster than regexes.
>
> > > > On Jun 7, 1:49 pm, Iceberg <iceb...@21cn.com> wrote:
>
> > > > > On Jun7, 6:35pm, Alexey Nezhdanov <snak...@gmail.com> wrote:
>
> > > > > > > 2) is_integer is a fast call, but with 1.1k (!) calls ...
>
> > > > > > Replaced it with my own version:
> > > > > > integer_pat=re.compile('[0-9]+$')
> > > > > > is_integer=lambda x: integer_pat.match(x)
> > > > > > it's about 2.3 times faster. C version would be even better.
>
> > > > > If so, perhaps this is even better:
>
> > > > >   integer_pat=re.compile('[0-9]+$')
> > > > >   is_integer=integer_pat.match
>
> > > > > Because lambda is considered as much slower than built-in functions,
> > > > > AFAIK.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to web2py@googlegroups.com
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to