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