爲什麼我可以添加普通的可調式和方法到一個集合,但不是<some list>.append
(例如)?爲什麼我不能將<some list> .append添加到Python集合中?
例如:
>>> l = []
>>> s = set()
>>> s.add(l.append)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> type(l.append)
<type 'builtin_function_or_method'>
>>> type(map)
<type 'builtin_function_or_method'>
>>> s.add(map)
>>> def func(): print 'func'
...
>>> s.add(func)
>>> print s
set([<built-in function map>, <function func at 0x10a659758>])
編輯:我注意到l.append.__hash__()
你不是想添加list.append
也給出了這樣的錯誤
什麼是你真的* *意欲何爲? o_O –
@KarlKnechtel我正在使用twisted.trial編寫測試。我有一個事件總線系統,它記錄事件的回調(由一個字符串指定)並將回調存儲在一個集合中以防止重複。這個特定的回調只是results_list.append的一個包裝,所以我試圖直接註冊爲回調。測試觸發一個事件,並檢查results_list以查看它是否包含數據。 –