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