[BangPypers] BangPypers Digest, Vol 6, Issue 8
Anand Balachandran Pillai
abpillai at gmail.com
Mon Feb 18 13:37:31 CET 2008
Here is a way to do this when x is global. I don't recommend it, because
it modifies the global dictionary. Still it gives an effect closes to what
you want perhaps.
>>>incr = lambda x: globals().__setitem__('x',x+1)
>>>def f(): incr(x); return x
>>>x=10
>>>f()
11
>>>f()
12
>>>x
12
--Anand
On Feb 18, 2008 5:57 PM, Siddharta <siddharta.lists at gmail.com> wrote:
> Pythonic wrote:
> > * 2. Best solution (Pythonic)*
> >
> >
> >>>> import itertools
> >>>> c = itertools.count(9)
> >>>> c.next()
> >>>>
> > 9
> >
> >>>> c.next()
> >>>>
> > 10
> >
>
> +1 Pythonic: itertools is the way to go
>
> But if you really want to implement it yourself, you need to do
> something like this -
>
> >>> class ns: pass
> ...
> >>> def make_incr(start):
> ... v = ns()
> ... v.count = start
> ... def incr():
> ... v.count += 1
> ... return v.count
> ... return incr
> ...
> >>> i = make_incr(5)
> >>> i()
> 6
> >>> i()
> 7
>
> It's more complex than if you did it in a functional language because of
> limitations on lambda and accessing variables in nested scopes.
>
> --
> Siddharta Govindaraj
>
> _______________________________________________
> BangPypers mailing list
> BangPypers at python.org
> http://mail.python.org/mailman/listinfo/bangpypers
>
--
-Anand
More information about the BangPypers
mailing list