Is there "let binding" in Python?

Rob Hunter rhunter007 at yahoo.com
Tue Sep 16 16:31:39 EDT 2003


> Compare:
> 
> >>> def foo():
>    ...    print x
>    ...    # x = 42  # commented out
>    ...    print x
>    ...
> >>> x = 7
> >>> foo()
>    7
>    7
> >>> x = 10
> >>> foo()
>    10
>    10
> 
> Versus:
> 
> >>> def foo():
>    ...    print x
>    ...    x = 42
>    ...    print x
>    ...
> >>> x = 7
> >>> foo()
>    Traceback (most recent call last):
>      File "<stdin>", line 1, in ?
>      File "<stdin>", line 2, in foo
>    UnboundLocalError: local variable 'x'
> referenced before assignment
> 
> 
> Your
> 
>    (define (foo)
>      (print x)
>      (let ((x 42))
>        (print x)))
> 
> interpretation can't explain that result -- if
> the LET comes *after*
> the first print, the first print would print
> the value in the original
> (global) binding, and you'd see
> 
> >>> foo()
>    7
>    42
> 
> rather than an error.
> 
> 


I'm quite confused now. :)  Actually, I
understand (I think) the examples you gave me,
but I'm left with a bad taste in my mouth: you
know, that "assignment is really nasty" taste.

Rob

__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com





More information about the Python-list mailing list