Tôi đang cố gắng sử dụng trình tạo với lớp Python hoạt động tương tự như một danh sách được liên kết.Năng suất trên cấu trúc dữ liệu đệ quy
Dưới đây là một ví dụ rất đơn giản về những gì tôi có nghĩa là:
class GeneratorTest():
def __init__(self, list):
if list:
self.elem = list[0]
if list[1:]:
self.n = GeneratorTest(list[1:])
else:
self.n = None
def __iter__(self):
return self
def next(self):
my_next = self
while my_next is not None:
yield my_next
my_next = my_next.n
Tất nhiên đây chỉ là một ví dụ, nhưng nó đủ để minh họa cho điểm.
Bây giờ, tôi đã mong để có thể gọi một cái gì đó như:
g = GeneratorTest([1,2,3,4,5])
for x in g:
print x
Và có điểm dừng chu kỳ khi nó đạt đến giá trị cuối cùng, nhưng cho vòng lặp chỉ tiếp tục không ngừng.
Tôi khá mới đối với máy phát điện, vì vậy tôi chắc chắn đó là tiền đề cơ bản mà tôi thiếu ở đây.
Có phải vấn đề liên quan đến thực tế là tôi mang lại cùng một đối tượng tạo bộ tạo không? Tôi chắc chắn rằng nếu tôi có một đối tượng với danh sách các đối tượng GeneratorTest, tôi có thể trả về từng đối tượng này một cách đơn giản, nhưng tôi cảm thấy có một cách để thực hiện công việc này mà không có đối tượng "wrapper".
tôi thiếu gì ở đây?
'danh sách' là tên của nội trang dựng sẵn, vì vậy bạn đang che khuất nó khi bạn sử dụng nó làm đối số cho phương thức' __init__' của bạn. – MattH
vâng, vâng, tôi biết, đây chỉ là một ví dụ tôi đã tấn công và không bận tâm với tên. Mã thực sự là tương tự trong logic nhưng với tên có ý nghĩa và không làm lu mờ nội trang. Cảm ơn bạn đã chỉ ra điều đó! – pcalcao
Rất hữu ích khi cung cấp các ví dụ hay: tự chứa và minh họa. – MattH