Python critique
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Fri Dec 10 18:15:07 EST 2010
On Sat, 11 Dec 2010 00:46:41 +0200, Octavian Rasnita wrote:
> How narrow are the scopes in Python?
> Is each block (each level of indentation) a scope?
Thankfully, no.
> If it is, then I
> think it is very enough because the other cases can be detected easier
> or it might not appear at all in a well-written program.
I don't understand what this means.
> If it is not, then yes, it is a problem.
Why is it a problem?
> 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
More information about the Python-list
mailing list