[python-win32] How Can I exec() a statement?

Tim Roberts timr at probo.com
Tue Apr 12 19:19:56 CEST 2005


On Mon, 11 Apr 2005 23:59:35 -0300, Gabriel Genellina 
<gagenellina at softlab.com.ar> wrote:

>At Thursday 7/4/2005 10:53, * William wrote:
>  
>
>> For example, I'd like a way to get the symbol name for variable a 
>>above.  Is there a function like "nameOF( a )"?
>>    
>>
>
>Maybe a Python hacker guru could say something, but AFAIK, once you get 
>inside the function nameOF( a ), there is no way to tell where its argument 
>came from. In the following example, I think there is no way to distinguish 
>inside f if it was called with a or b as an argument, since both are simply 
>names pointing to the same object
>

That's exactly right.  When programming in Python, there is a very 
strict distinction between "objects" and "names that happen to be bound 
to objects".  If you are coming from a C or C++ background, for example, 
think of every variable in Python as being a pointer or reference.  An 
object that is being pointed to has absolutely no idea which variables 
point to it.  Even the run-time library does not know.  Consider this 
pseudo-C++ example.

    int& i;
    int& j;
    i = 3;
    j = i;

At this point, the constant "3" has no clue that two things point to 
it.  If I pass "i" to a function, that function receives "3".  It 
receives no knowledge about "i" or "j", and there is no way to trace it 
back.

That's the situation in Python.  A function receives an object, not a 
name.  While inside the function, the parameter name happens to be bound 
to that object, but it doesn't know what other (outside) names might be 
bound to that object.

(Actually, that's not entirely true: it knows HOW MANY names are bound 
to it, so it can do reference counting and garbage collection, but not 
WHICH names.)

-- 
- Tim Roberts, timr at probo.com
  Providenza & Boekelheide, Inc.



More information about the Python-win32 mailing list