你基本上在问:“我的代码如何发现一个对象的名称?”
def animal_name(animal):
return some_string
cat = 5
print(animal_name(cat))
在这里,来自comp.lang.python的Fredrik Lundh()的一句引用特别适合。
和你在门廊上找到的那只猫的名字一样:猫(对象)本身无法告诉你它的名字,而且它其实也不关心——所以找出它叫什么名字的唯一方法就是询问所有的邻居(命名空间)是否它是他们的猫(对象)…
...不要惊讶地发现它可能有许多名称,或者根本没有名称!
只是为了好玩,我尝试使用sys
和gc
模块来实现animal_name
,并发现周围的人也称您所喜爱的“猫”,即字面整数5,有几个名称:
>>> cat, dog, fish = 5, 3, 7
>>> animal_name(cat)
['n_sequence_fields', 'ST_GID', 'cat', 'SIGTRAP', 'n_fields', 'EIO']
>>> animal_name(dog)
['SIGQUIT', 'ST_NLINK', 'n_unnamed_fields', 'dog', '_abc_negative_cache_version', 'ESRCH']
>>> animal_name(fish)
['E2BIG', '__plen', 'fish', 'ST_ATIME', '__egginsert', '_abc_negative_cache_version', 'SIGBUS', 'S_IRWXO']
对于足够独特的对象,有时你确实可以获得唯一的名称:
>>> mantis_shrimp = 696969; animal_name(mantis_shrimp)
['mantis_shrimp']
因此,总结一下: