Creating a local variable scope.
Carl Banks
pavlovevidence at gmail.com
Fri Sep 11 17:32:03 EDT 2009
On Sep 11, 10:36 am, Johan Grönqvist <johan.gronqv... at gmail.com>
wrote:
> In the other languages I have used I can either use braces (C and
> descendants) or use let-bindings (SML, Haskell etc.) to form local scopes.
I wouldn't mind a let statement but I don't think the language really
suffers for the lack of it. I expect that "leaky scopes" are a really
minor source of bugs in practice**, especially with well-organized
code that results in small functions. The main loss is the
organization opportunity.
Having said that, I'll tell you a pretty spiffy way to do it, even
though it can't be regarded as anything other than a cute hack. I
don't recommend using it in practice.
First define a decorator:
def let(f): return f()
Then, apply this decorator to a nameless function to get a convenient
nested scope:
@let
def _():
a = 1
b = 2
print a,b
But there's more: you can define let bindings in the function
arguments:
@let
def _(a = 1, b = 2):
print a,b
And, as with LISP, the "let" "statement" can return a result which you
can bind to a local variable:
@let
def result(a = 1, b = 2):
return a + b
print result
Don't do this in real code, though. Just live with the limitation, or
define a nested function and call it explicitly without cute decorator
hacks.
Carl Banks
(**) There is one notable common bug that leaky scopes do cause, when
creating closures in a loop. However, that is an advanced usage.
More information about the Python-list
mailing list