Tôi xây dựng một đối tượng có thể lặp lại A chứa danh sách các đối tượng khác B. Tôi muốn có thể tự động bỏ qua một đối tượng cụ thể B trong danh sách nếu nó là bị gắn cờ xấu khi đối tượng A được sử dụng trong vòng lặp for.Làm thế nào để hỏi một iterator trong python mà không thay đổi trạng thái yêu cầu trước của nó
class A():
def __init__(self):
self.Blist = [B(1), B(2), B(3)] #where B(2).is_bad() is True, while the other .is_bad() are False
def __iter__(self):
nextB = iter(self.Blist)
#if nextB.next().is_bad():
# return after skip
#else:
# return nextB
Tuy nhiên, tôi không thể tìm ra cách để viết các điều kiện được nhận xét trong mã giả ở trên, không được dùng cách lặp hỏi (mệnh đề vẫn thất bại)
Cảm ơn!
Bạn có thể đóng gói các trình vòng lặp của mình trong các đối tượng có hàm 'peek()' và hàm được ghi đè tiếp theo(). Nó phải chứa một biến trạng thái theo dõi cái nào được gọi gần đây nhất, next() hoặc peek(). Nếu next() được gọi sau chính nó, nó sẽ gọi next() trên đối tượng được đóng gói, trả về kết quả và cũng lưu trữ nó trong một bộ đệm. Nếu nó được gọi sau khi một peek() nó sẽ trả về bộ đệm. Peek() luôn gọi encapsulated next(), trả về nó và lưu nó trong buffer(). –