Octavian Rasnita wrote:
From: "Steven D'Aprano" <steve+comp.lang.pyt...@pearwood.info>
...
Can you please tell me how to write the following program in Python?
my $n = 1;
{
my $n = 2;
print "$n\n";
}
print "$n\n";
If this program if ran in Perl, it prints:
2
1
Lots of ways. Here's one:
n = 1
class Scope:
n = 2
print n
print n
Here's another:
n = 1
print (lambda n=2: n)()
print n
Here's a third:
n = 1
def scope():
n = 2
print n
scope()
print n
Here's a fourth:
import sys
n = 1
(sys.stdout.write("%d\n" % n) for n in (2,)).next()
print n
In Python 3, this can be written more simply:
n = 1
[print(n) for n in (2,)]
print n
I have tried to write it, but I don't know how I can create that block
because it tells that there is an unexpected indent.
Functions, closures, classes and modules are scopes in Python. If you
want a new scope, create one of those.
--
Steven
Hi Steven,
Thank you for your message. It is very helpful for me.
I don't fully understand the syntax of all these variants yet, but I can see
that there are more scopes in Python than I thought, and this is very good.
Octavian
Local scopes like described above by Steven are not constructs that are
used that often, not to solve any scoping issue (except for the first
example maybe). It's more a demonstration that you can do it with python.
The reason is that Python developpers will not put themself in the
situation where they need to use a variable 'orange' line 32 and use the
same variable 'orange' line 33 to refer to something else.
JM
--
http://mail.python.org/mailman/listinfo/python-list