Easy questions from a python beginner

MRAB python at mrabarnett.plus.com
Sun Jul 11 18:37:39 EDT 2010


Alf P. Steinbach /Usenet wrote:
> * Stephen Hansen, on 11.07.2010 21:00:
>> On 7/11/10 11:45 AM, wheres pythonmonks wrote:
>>> Follow-up:
>>> Is there a way to define compile-time constants in python and have the
>>> bytecode compiler optimize away expressions like:
>>>
>>> if is_my_extra_debugging_on: print ...
>>>
>>> when "is_my_extra_debugging" is set to false?  I'd like to pay no
>>> run-time penalty for such code when extra_debugging is disabled.
>>
>> Any code wrapped in a __debug__ guard is utterly ommitted if you run
>> Python with the -O option. That, and asserts go away.
>>
>>> On #2:  My point regarding the impossibility of writing the swap
>>> function for ints is to explicitly understand that this isn't
>>> possible, so as not to look for solutions along those lines when
>>> trying to write python code.
>>
>> Its impossible because Python's calling and namespace semantics simply
>> don't work like that. There's no references in the traditional sense,
>> because there's no variables-- boxes that you put values in. There's
>> just concrete objects. Objects are passed into the function and given
>> new names; that those objects have names in the enclosing scope is
>> something you don't know, can't access, and can't manipulate.. even the
>> objects don't know what names they happen to be called.
>>
>> Check out http://effbot.org/zone/call-by-object.htm
> 
> Oh, I wouldn't give that advice. It's meaningless mumbo-jumbo. Python 
> works like Java in this respect, that's all; neither Java nor Python 
> support 'swap'.
> 
> Of course there are variables, that's why the docs call them variables.
> 
In Java a variable is declared and exists even before the first
assignment to it. In Python a 'variable' isn't declared and won't exist
until the first 'assignment' to it.




More information about the Python-list mailing list