Chris Angelico at 2015/12/26 UTC+8 11:44:21AM wrote:
> Pike is semantically very similar to Python, but it uses C-like
> variable scoping. Here's an equivalent, which might help with
> comprehension:
>
> function outerf()
> {
> int counter = 55;
> void innerf()
> {
> write("%d\n", counter);
> int counter;
> counter += 1;
> }
> return innerf;
> }
Hi! ChrisA, this is the first time I hear the name "Pike" programming
language:-)
> Based on that, I think you can see that having a variable declaration
> in the function turns things into nonsense. What you're actually
> wanting here is to NOT have the "int counter;" line, such that the
> name 'counter' refers to the outerf one.
>
> In Python, assignment inside a function creates a local variable,
> unless you declare otherwise. To make your example work, all you need
> is one statement:
>
> nonlocal counter
>
> That'll cause the name 'counter' inside innerf to refer to the same
> thing as it does in outerf.
Thank you for the explanation. It reminds me to dig out something which seems I
had been read before. It's about nested scope in the book "Learning Python" by
Mark Lutz.
"An assignment (X = value) creates or changes the name X in the current local
scope, by default. If X is declared global within the function, the assignment
creates or changes the name X in the enclosing module's scope instead. If, on
the other hand, X is declared nonlocal within the function in 3.X (only), the
assignment changes the name X in the closest enclosing function's local scope."
I shouldn't forget this:-(
> Hope that helps!
You have a correct answer. Thanks again.
--Jach
--
https://mail.python.org/mailman/listinfo/python-list