Tại sao tôi có thể thêm các cuộc gọi và phương thức thông thường vào một tập hợp chứ không phải là <some list>.append
(ví dụ)?Tại sao tôi không thể thêm <some list> .gửi một bộ python?
Ví dụ:
>>> 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>])
Edit: Tôi nhận thấy rằng l.append.__hash__()
cũng cho lỗi này
gì được bạn * thực sự * cố gắng để làm gì? o_O –
@KarlKnechtel Tôi đang viết các bài kiểm tra bằng cách sử dụng twisted.trial. Tôi có một hệ thống xe buýt sự kiện đăng ký callback cho một sự kiện (được chỉ định bởi một chuỗi) và lưu trữ các cuộc gọi lại trong một tập hợp để ngăn chặn các bản sao. Gọi lại cụ thể này chỉ là một trình bao bọc xung quanh results_list.append vì vậy tôi đã cố gắng đăng ký trực tiếp đó như một cuộc gọi lại. Thử nghiệm kích hoạt một sự kiện và kiểm tra results_list để xem nó có chứa dữ liệu hay không. –