Lexical scope: converting Perl to Python

jenifer adam jenigirly at gmail.com
Sat Jun 13 10:42:38 CEST 2009


On Jun 13, 10:44 am, Mike Kazantsev <mk.frag... at gmail.com> wrote:
> On Fri, 12 Jun 2009 22:02:53 -0700 (PDT)
>
>
>
>
>
> Andrew Savige <ajsav... at yahoo.com.au> wrote:
> > I'd like to convert the following Perl code to Python:
>
> >  use strict;
> >  {
> >    my %private_hash = ( A=>42, B=>69 );
> >    sub public_fn {
> >      my $param = shift;
> >      return $private_hash{$param};
> >    }
> >  }
> >  print public_fn("A");        # good:  prints 42
> >  my $x = $private_hash{"A"};  # error: good, hash not in scope
>
> ...
>
> > What is the Pythonic equivalent of Perl's lexical scope, as
> > illustrated by the code snippet above?
>
> If you're using scope for garbage-collecting purposes, there's "with"
> statement and contextlib:
>
>   from contextlib import contextmanager
>
>   @contextmanager
>   def get_hash():
>     complex_hash = dict(A=42, B-69)
>     try: yield complex_hash
>     except Exception as ex:
>       del complex_hash # complex destructor ;)
>       raise ex
>
>   with get_hash() as hash:
>     # do stuff with hash
>
> Note that this only makes sense if you need to implement some complex
> operation on hash destruction, and do that whatever-happens-inside-with
> to close the object, obviously not the case with simple dict above.
>
> And if you want to obfuscate one part of your code from another, you'll
> probably have better luck with languages like java, since no one seem
> to care about such stuff with python, so it'd be a hack against the
> language, at best.
> Why would you want to hide the code from itself, anyway? It's not like
> you'd be able to accomplish it - code can easily grep it's process body
> in memory and harvest all the "private" values, so I'd suggest getting
> some fresh air when you start to feel like doing that.
>
> --
> Mike Kazantsev // fraggod.net
>
>  signature.asc
> < 1KViewDownload

Check http://www.voipsipsdk.com its a good one.



More information about the Python-list mailing list