Note: 這里的對象是廣義的,一個列表也算
有name的不在討論之列, 因為可以直接輸出
沒有name的,可以參考如下代碼,使用到的是globals()
except_word是用於過濾掉那些不想要的結果的,比如下面的例子中的for循環的each_item
這種 for循環干擾的情況有的時候會出現,有時候不會,具體的我現在還不清楚,但是似乎和namespace的排序有關。
>>> def get_name_of_obj(obj, except_word = ""):
... for name, item in globals().items():
... if item == obj and name != except_word:
... return name
...
>>> objA = [1, 2, 3]
>>> objB = ('a', {'b':'thi is B'}, 'c')
>>> for each_item in [objA, objB]:
... get_name_of_obj(each_item)
...
'objA'
'objB'
>>>
>>>
>>> objC = [{'a1':'a2'}]
>>>
>>> for item in [objA, objB, objC]:
... get_name_of_obj(item)
...
'objA'
'item' <<<<<<<<<<<<<<<<<<<--------------------這顯然不是我們想要的
'item'
>>> for item in [objA, objB]:
... get_name_of_obj(item)
...
'objA'
'item'
>>>
>>> for item in [objA, objB, objC]:
... get_name_of_obj(item, "item")
...
'objA'
'objB'<<<<<<<<<<<<<<<<<<<<------------------------ 加了except_word就好了
'objC'
>>> for item in [objA, objB, objC]:
... get_name_of_obj(item, "item")
...
'objA'
'objB'
'objC'
>>>