Đối với mỗi trăn chứa C, kỳ vọng là
for item in C:
assert item in C
sẽ vượt qua tốt - sẽ không bạn thấy nó đáng ngạc nhiên nếu một cảm giác in
(mệnh đề loop) đã có một hoàn toàn khác nhau ý nghĩa từ người khác (kiểm tra sự hiện diện)? Tôi chắc chắn sẽ! Nó tự nhiên hoạt động theo cách đó cho danh sách, bộ, bộ, ...
Vì vậy, khi C
là một từ điển, nếu in
mang lại giá trị khóa/giá trị trong vòng lặp for
, thì theo nguyên tắc ít ngạc nhiên nhất, in
cũng sẽ phải lấy một tuple như toán hạng bên trái của nó trong kiểm tra ngăn chặn.
Sẽ hữu ích như thế nào? Khá vô dụng thực sự, về cơ bản làm if (key, value) in C
một từ đồng nghĩa với if C.get(key) == value
- đó là một tấm séc Tôi tin rằng tôi có thể thực hiện, hoặc muốn thực hiện, hiếm khi hơn 100 lần so với những gì if k in C
thực nghĩa, kiểm tra sự hiện diện của chính chỉ và bỏ qua hoàn toàn giá trị.
Mặt khác, muốn vòng lặp chỉ trên phím là khá phổ biến, ví dụ:
for k in thedict:
thedict[k] += 1
có giá trị cũng sẽ không giúp đỡ đặc biệt:
for k, v in thedict.items():
thedict[k] = v + 1
thực sự hơi ít rõ ràng và ít súc tích hơn. (Lưu ý rằng items
là cách viết chính xác của các phương pháp "thích hợp" để sử dụng để nhận cặp khóa/giá trị: không may là đã trở lại trong những ngày mà những người truy cập đó trả về toàn bộ danh sách, để hỗ trợ "chỉ cần lặp lại" giới thiệu, và iteritems
nó đã được - trong Python 3, nơi hạn chế khả năng tương thích ngược với các phiên bản trước Python đã bị suy yếu nhiều, nó đã trở thành items
một lần nữa).
+1 Câu hỏi hay. Hãy xem những gì Alex đã nói – NullUserException