Hacker News new | past | comments | ask | show | jobs | submit login

You can do it by closing over a variable as well. Python closes over things just fine, it just has problems rebinding variables in outer scopes that aren't the global one. Here, I just make the variable a container, so I can alter a value inside it, instead of rebinding it ( only python2 has this problem, python3 has a "nonlocal" keyword to work around this in the language )

    >>> def counter():
    ...   x = [ 1 ]
    ...   def count():
    ...     y = x[ 0 ]
    ...     x[ 0 ] += 1
    ...     return y
    ...   return count
    ... 
    >>> count = counter()
    >>> count()
    1
    >>> count()
    2
    >>> count()
    3
    >>> count()
    4
    >>> 
    >>> otherCount = counter()
    >>> otherCount()
    1
    >>> otherCount()
    2
    >>> count()
    5
    >>> count()
    6
    >>> otherCount()
    3
    >>>



Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: