[Tutor] silly remedial question

Gregor Lingl glingl at aon.at
Mon Nov 24 12:06:34 EST 2003


Michael Janssen schrieb:

>On Mon, 24 Nov 2003, kevin parks wrote:
>
>  
>
>>I can print the input and output lists no problem, but how do you tell
>>python to print the variable itself..
>>    
>>
>
>You can do it for *function* via their __name__ attribute:
>
>def f():
>    pass
>
>print f.__name__
>  
>
And even this may result in strange effects:

>>> def f():
   print "Hi!"

  
>>> f()
Hi!
>>> f.__name__
'f'
>>> g = f
>>> g()
Hi!
>>> g.__name__
'f'
>>> del f
>>> f()

Traceback (most recent call last):
 File "<pyshell#29>", line 1, in -toplevel-
   f()
NameError: name 'f' is not defined
>>> g()
Hi!
>>> g.__name__
'f'
>>>

This is so, because in Python different names can refer to the same object.
So the question "which name refers to this object?" may have no unique 
answer.

However there *is* a construct in Python, which can retrieve the string 
representation
of names, namely keyword arguments of a function. It goes like this:

>>> def pwn(**kwargs):  # print with name
       for w in kwargs:
               print w, "=", kwargs[w]

      
>>> a=2
>>> b=5
>>> c=[4,9,11]
>>> pwn(a=a,b=b,c=c,d=[-1,0,1])
a = 2
c = [4, 9, 11]
b = 5
d = [-1, 0, 1]
>>>

This performs more or less automatically what Michael suggested in a 
previous post.
The only problem may be, that the order of the output is arbitrary, 
except you
implement some sorting routine inside pwn, which is appropriate to your 
needs.

Regards,
Gregor









More information about the Tutor mailing list