Jose: Xin chào và chào mừng trở lại.
Trong video này, chúng tôi đang xem xét các tệp lặp trong Python.
Trong video cuối cùng, chúng ta đã xem xét
các trình vòng lặp, vậy cái quái gì là có thể lặp lại?
Vâng, một đối tượng có thể lặp lại
là một đối tượng có phương thức __iter __ () hoặc phương thức __iter __ ().
Vì vậy, một cái gì đó trông giống như thế này.
Sau khi bạn xác định phương thức này trong bất kỳ đối tượng nào, phương thức đó
bây giờ là một phương thức có thể lặp lại.
Vì vậy, chúng ta hãy xác định một cái gì đó ở đây.
Hãy xác định mộtHàng trăm Đầu tiên.
FirstH HundredIterable này sẽ định nghĩa
phương thức __iter __ () hoặc __iter () này và phương thức __iter
__ () này cho Python biết rằng bạn muốn có thể lặp
qua có thể lặp lại này, như trong vòng lặp for,
hoặc bạn muốn làm một số hoặc
bạn muốn chuyển nó thành một danh sách.
Nó có gì để trả lại?
Nó phải trả về một trình lặp.
Vì vậy, hãy trả về FirstH trămGenerator ().
Bây giờ bạn có thể làm
điều gì đó như in tổng của FirstH HundredIterable,
và nó sẽ thích nó, và nó sẽ cho bạn biết 4950.
Bạn cũng có thể lặp lại nó
bằng vòng lặp for và nó sẽ ổn.
Nó cũng sẽ cung cấp cho bạn tất cả các con số ở đó.
Vì vậy, đó là những gì làm cho một có thể lặp lại.
Không có gì kỳ diệu, không cần phải làm bất cứ điều gì theo giả thuyết.
Đối với Python, để nó trở thành một phương thức có thể lặp lại, tất
cả những gì bạn phải làm là xác định phương thức này và phương thức đó phải
trả về một thứ gì đó
mà bạn có thể gọi __next __ ().
Nó phải trả về một trình lặp.
Tất cả các trình tạo đều
là trình lặp, vì vậy tất nhiên đây có thể là trình tạo.
Bây giờ nếu bạn muốn làm cho việc này đơn giản hơn
một chút, điều này
bạn có thể làm, Thay vì có một lớp
riêng biệt trả về FirstH trămIterator, bạn có thể tự hỏi mình ...
Có phương thức __iter
__ () này ở đây trả về một đối tượng kiểu này.
FirstH HundredGenerator () trong ngữ cảnh
của lớp này là gì?
Đây là một câu hỏi khá mơ hồ, nhưng tôi muốn nói rằng nó là tự.
Bản thân luôn là đối tượng hiện tại, và những
gì bạn đang làm ở đây là bạn đang trả lại một đối tượng,
vì vậy chắc chắn bạn có thể làm
được điều này.
Giờ đây, bạn không còn cần đến FirstH HundredIterable này
nữa, và bạn có thể trả về FirstH trămGenerator () tại đây, và
nó sẽ giống như bây giờ.
Bây giờ trình tạo của bạn hơi khó hiểu hơn vì
nó vừa là trình vòng lặp vừa có thể lặp lại và điều đó có thể gây
nhầm lẫn trong một số trường hợp, nhưng nó thực
sự có thể hữu ích
ở những người khác vì nó ngắn hơn nhiều so với việc
có một lớp riêng biệt để làm điều đó cho bạn.
Một lần nữa, có thể lặp lại trả về một trình lặp bằng cách
sử dụng phương thức __iter __ () này.
Vì vậy, bạn cũng có thể làm
điều đó từ chính trình lặp, vì self luôn là một
trình lặp, vì self là đối tượng có phương thức __next __ () dunder này.
Vì vậy, tôi đã đề cập
trước đó nhiều điều về vòng lặp for và cách chúng
ta cần một đối tượng có định nghĩa dunder __len __ () và dunder __getitem __ ().
Vì vậy, đó là về cái gì?
Hãy định nghĩa một tệp
có thể lặp lại khác, và nó sẽ có một
__len __ (), len (self. ô tô), và tôi sẽ khởi tạo ô tô ở đây.
Vì vậy, hãy nói rằng chúng ta đã có tự. ô tô
bằng với danh sách hai phần tử này, sau đó chúng tôi xác định một phương
thức dunder __len __ (), trả về độ dài của
danh sách và chúng tôi cũng xác định một phương thức __getitem __ ()
lấy chỉ mục mà chúng tôi muốn truy xuất và
chỉ trả về bản thân. ô tô [i].
Trước đó trong khóa học, chúng ta đã xem xét điều này và tôi đã nói rằng
khi bạn có một đối tượng trông giống
như thế này có phương thức __len __ () và __getitem __ (), bạn
có thể sử dụng vòng lặp for trên đó.
Và thực sự, nếu chúng tôi làm cho ô tô trong AnotherIterable (), bạn sẽ
thấy rằng điều này in ra những chiếc ô tô, Fiesta và Focus.
Vì vậy, đây có phải là một quá có thể lặp lại?
Nó không có phương thức __iter __ ().
Nó không trả về bất kỳ máy phát điện nào.
Và câu trả lời là có.
Trong Python, bạn có thể xác định các tệp lặp của mình bằng phương thức
__iter __ () trả về một tệp có thể lặp
lại hoặc bạn có thể có một đối tượng có độ dài và địa lý.
Cả hai đều là các vòng lặp và bạn có thể sử dụng vòng lặp for, bạn có thể sử
dụng __sum __ (), bạn có thể sử dụng __len __ () trong chúng ...
Xin lỗi, không phải __len __ (), bạn có thể sử dụng __list __ () trong chúng.
Vì vậy, cả hai điều này đều có thể lặp lại.
Bây giờ, được không?
Và bây giờ chúng ta đã tìm hiểu một chút
về các vòng lặp, chúng khác nhau như thế
nào so với các trình vòng lặp, nhưng chúng thường ở cùng nhau, song hành với nhau.
Một trình vòng lặp được sử dụng để lấy giá trị tiếp theo và một trình vòng
lặp được sử dụng để đi qua tất cả các giá trị
của một trình vòng lặp.
Vì vậy, một loại trình lặp cho phép bạn thực hiện từng
bước một, trong trường hợp bạn muốn làm điều đó, bằng cách gọi
__next __ () và có thể lặp lại cho phép bạn xem qua tất cả các phần tử.
Vì vậy, đó là nó cho video này.
Nếu nếu không có ý nghĩa gì nhiều và bạn đang tự hỏi,
"Vậy tại sao tôi lại cần cái này? " Đừng
lo.
Trong thời gian của một vài phần,
bạn sẽ nói, "Ôi Chúa ơi, điều này rất có ý nghĩa"
khi chúng ta tìm hiểu về Python không đồng bộ.
Chỉ cung cấp cho bạn một vài gợi ý ở đây.
Ngoài ra, khi bạn muốn sử dụng hoặc xem qua danh sách
dài hơn một chút, bạn có thể sử dụng máy phát điện để làm điều đó.
Bây giờ, hãy để tôi nói, bây giờ chúng
ta đang ở đây, rằng thay vì có my_numbers = [x
cho x trong [1, 2, 3, 4,
5]] chẳng hạn, đây là một danh sách dễ hiểu.
my_numbers_gen (), bạn có thể hiểu trình tạo.
Phiên bản này không hữu ích lắm, nhưng đây
cũng là một đối tượng máy phát điện.
Đó chỉ là cách viết tắt để lặp lại một chuỗi.
Bạn có thể làm tiếp theo (my_numbers_gen).
Bạn có thể in nó ra.
Vì vậy, hiểu máy phát điện, một điều khá
phổ biến để làm, cũng không phải là cái được in ra ở đó.
Vì vậy, chỉ muốn đề cập đến điều đó.
Đây không phải là sự hiểu biết tuple;
đây là một sự hiểu biết của máy phát điện.
Và chúng ta có thể sử dụng nó để tạo một đối tượng trình tạo
một cách nhanh chóng, cho phép chúng ta gọi __next __ () trong cú pháp này.
Một lần nữa, tất cả những gì nó làm là
xem qua danh sách này và đưa ra từng số khi bạn gọi __next __ ().
Vì vậy, nó không sao chép toàn bộ danh sách, điều này làm được.
Điều này sao chép danh sách và cung cấp cho bạn một bản sao khác.
Điều này cho phép bạn xem qua từng
cái một mà không cần sao chép toàn bộ danh sách.
Tất nhiên ví dụ này không tốt lắm.
Bạn chỉ có thể lặp lại
danh sách này vì bạn đã có nó ở đó, nhưng
nó có thể hữu ích trong các trường hợp khác
như khi bạn đang lặp lại trên một trình tạo khác
và bạn muốn thực hiện một số thay đổi đối với nó ngay lập tức.
Vì vậy, nó có thể hữu ích trong những trường hợp sắp tới.
Chúng ta sẽ gặp nhiều ví dụ hơn về điều này ở phần sau.
Tôi chỉ muốn cung cấp cho bạn một chút về cú pháp.
Dù sao, đó là nó cho video này.
Không muốn giữ bạn lâu hơn nữa.
Hẹn gặp lại các bạn vào bài kế tiếp.