What's wrong with this code?

Mark Lawrence breamoreboy at yahoo.co.uk
Tue Jul 24 08:23:37 CEST 2012


On 24/07/2012 02:19, Andrew Cooper wrote:
> On 23/07/2012 15:50, Stone Li wrote:
>> I'm totally confused by this code:
>>
>> Code:
>>
>>      a = None
>>      b = None
>>      c = None
>>      d = None
>>      x = [[a,b],
>>           [c,d]]
>>      e,f = x[1]
>>      print e,f
>>      c = 1
>>      d = 2
>>      print e,f
>>      e = 1
>>      f = 2
>>      print c,d
>>
>> Output:
>>
>>      None None
>>      None None
>>      1 2
>>
>>
>>
>> I'm expecting the code as:
>>
>>      None None
>>      1 2
>>      1 2
>>
>>
>>
>> What's wrong?
>> And this question made my GUI program totally out of control.
>> Thanks
>
> c = 1 and d = 2 are overwriting the variable c (= None) and d (= None)
> with new variables 1 and 2.  As x already captured c and d while they
> were none, the variables e and f do not change (not would the, even if
> you subsequently changed x)
>
> Python is a statically scoped language, whereas the functionality you
> are expecting would be an example of dynamically scoped.
>
> Care to reveal your programming background?
>
> ~Andrew
>

<duck and cover>

strictly speaking Python doesn't have variables, it has names.  This 
will possibly start a flame war which, by the standards of this ng/ml, 
will be an intense conflagration, hence the duck and cover.

</duck and cover>

-- 
Cheers.

Mark Lawrence.




More information about the Python-list mailing list