Python critique

Jean-Michel Pichavant jeanmichel at sequans.com
Mon Dec 13 05:40:20 EST 2010


Octavian Rasnita wrote:
> From: "Steven D'Aprano" <steve+comp.lang.python at 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



More information about the Python-list mailing list