你基本上問「我的代碼如何發現一個對象的名稱?」
def animal_name(animal):
# here be dragons
return some_string
cat = 5
print animal_name(cat) # prints "cat"
甲quote從弗雷德裏克Lundh開發(在comp.lang.python)是特別這裏適當。
相同的方式,你得到的是貓,你在你的門廊發現的名稱: 貓(對象)本身不能告訴你它的名字,它不 不在乎 - 所以唯一的辦法找出它被稱爲是要求 所有的鄰居(命名空間),如果這是他們的貓(對象)...
...。而且不感到驚訝,如果你會發現,它是由許多名字, 或已知的無名字!
只是爲了好玩我嘗試使用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']
因此,簡言之:
來源
2012-02-03 00:15:22
wim
有沒有辦法做到這一點沒有字典? – thelost 2012-02-02 23:12:13
相關:http://stackoverflow.com/questions/544919/python-can-i-print-original-var-name – 2012-02-02 23:14:23
爲什麼你需要避免使用字典? – 2012-02-02 23:27:20