Jose: Xin chào các bạn trở
lại và trong video này, chúng ta đang nói về máy phát điện bằng Python.
Tôi thực sự hào hứng
với phần này vì chúng ta sẽ nói về một số
công cụ nâng cao hơn và trình tạo là một trong
những chủ đề này trong Python mà rất
nhiều khóa học thậm chí không đề cập đến nhưng chúng rất cần thiết cho hiệu
suất và cũng vì e -phát triển đồng bộ hóa trong Python, sự
phát triển đồng
bộ điện tử mà
chúng ta sẽ học sau này được xây dựng dựa trên các trình tạo này.
Khi bạn hiểu về trình
tạo, rất nhiều thứ trong Python bắt đầu trở nên rõ ràng hơn rất nhiều.
Vậy máy phát điện là gì?
Trình tạo trong Python là một hàm.
Nó là một chức năng đặc biệt.
Xem một hàm ghi nhớ trạng thái mà nó đang
ở giữa các lần thực
thi, vì vậy bạn có thể chạy hàm nhiều
lần và nó sẽ nhớ những gì
nó đã làm trong lần cuối cùng bạn chạy nó.
Vì vậy, điều đó nghe có vẻ khá kỳ lạ, hãy để tôi giải thích bằng một ví dụ.
Hãy tưởng tượng bạn muốn xây dựng một
danh sách 100 số,
rất đơn giản, bạn muốn có một danh sách mới với các số từ
0 đến 99, không bao gồm 100.
Vì vậy, bạn có thể tạo một chức năng như thế này.
Rõ ràng là không sử dụng phạm vi, v.v., bạn biết phạm vi.
Hãy không sử dụng phạm vi thay vào đó hãy xây dựng một danh sách từ đầu.
Bạn sẽ làm điều này như thế nào.
Một cách tốt để làm điều đó là bắt đầu với một danh sách trống.
Giả sử gọi nó là nums và làm cho nó bằng một danh sách trống.
Và cũng bắt đầu với một chỉ số bằng không.
Sau đó, khi tôi nhỏ hơn
100, hãy nói nums dot append i.
Vì vậy, bạn sẽ thêm số 0 khi bắt đầu.
Sau đó, bạn sẽ tăng dần từng thứ một, sẽ
làm cho nó thành một.
Bạn sẽ thêm một, lặp lại,
thêm hai, rồi ba, v.v., cho đến khi bạn đến 99.
Và ở cuối hàm này trả
về nums, là danh sách các số của bạn.
Nếu chúng tôi in hàng trăm số và chúng tôi chạy điều đó.
Chúng ta có thể thấy rằng
nó chứa ở đây danh sách hàng trăm con số của chúng ta.
Tất nhiên, chúng tôi có thể sử dụng khả năng hiểu danh sách cho việc này.
Chúng ta có thể sử
dụng hàm phạm vi, nhưng bây giờ hãy
giả sử đây là một cách làm hay, vì những gì
tôi thực sự đang giải thích về cơ bản là cách hàm phạm vi hoạt động bên trong.
Vì vậy, chúng tôi xây dựng
một danh sách, điền vào nó với hàng trăm số đầu tiên và sau đó trả về.
Bây giờ chúng ta có một trăm số trong một danh sách.
Toàn bộ danh sách này nằm trong bộ nhớ máy tính của bạn được lưu trữ
dưới dạng giá trị trả về của hàm.
Bây giờ hàng trăm con số không
phải là rất lớn, nó
là một khoảng không gian khá nhỏ, nhưng giả sử chúng ta muốn
lưu trữ 10 triệu, triệu giống như một
trăm con số, nhưng nó sẽ giống như một triệu con số.
Bạn sẽ tạo một danh sách một triệu số và
lưu trữ nó trong
biến này đi vào bộ nhớ máy tính của
bạn và có lẽ nó sẽ chiếm một lượng bộ nhớ
lớn hơn, bởi vì mỗi một trong số
những con số này đang chiếm một lượng nhỏ bộ nhớ máy tính của bạn.
Nếu bạn muốn 10 triệu con số thì nó lớn hơn và như vậy.
Bây giờ có 10 triệu con số không phải là một ví dụ tuyệt vời, nhưng
hãy tưởng tượng bạn có một danh sách rất dài về một thứ gì đó.
Ví dụ, chúng thường được sử dụng để
tính toán các số nguyên tố và trong dữ liệu
lớn và những thứ tương tự
như vậy, đôi khi bạn có thể muốn có những danh sách lớn.
Vì vậy, một máy phát điện được sử dụng để giải
quyết vấn đề này bởi vì giả định là bạn không
cần 100 số cùng một lúc.
Những gì bạn cần là số 0 để bạn có thể làm điều gì đó với nó.
Và sau đó một cái để bạn có thể làm gì đó với nó.
Và sau đó là hai để bạn có thể làm điều gì đó với nó.
Ví dụ với hàng trăm số này, sau đó
chúng ta có thể nhân tất cả chúng với hai và lưu trữ chúng trong một danh sách khác.
Bạn làm điều đó như thế nào?
Bạn sẽ làm điều gì đó như ít hiểu
hơn, x nhân hai lần cho x trong hàng trăm số.
Những gì bạn đang làm ở đây là bạn
đang sử dụng danh sách này để tách biệt nó và nhân mỗi số với hai.
Hãy nghĩ rằng phép nhân này với hai
là một phép toán mà chúng ta muốn thực
hiện với những con số này để tính toán một cái gì đó.
Một ví dụ khác sẽ là, nếu bạn có nhiều
người dùng và bạn muốn tính toán mức độ tương tác xung quanh họ
hoặc mức độ tương tác của họ với hệ
thống của bạn, hoặc đại loại như vậy.
Về cơ bản, bạn muốn xem qua
từng phần tử và thực hiện một thao tác.
Vấn đề ở đây là bạn không cần tất cả các yếu tố cùng một lúc.
Bạn cần từng cái một.
Vì vậy, đây là những gì máy phát điện được sử dụng.
Thay vì có toàn bộ danh sách các phần tử, điều
bạn làm là trình tạo cung cấp cho
bạn phần tử đầu tiên của
danh sách mà không cần lưu trữ tất cả danh sách trong bộ nhớ.
Lần sau khi bạn gọi trình
tạo, nó sẽ nhớ phần tử mà nó đã cung cấp cho bạn
lần trước và nó sẽ cung cấp cho bạn phần tử thứ hai.
Sau đó, bạn chạy lại nó và nó cung cấp cho bạn
phần tử thứ ba, v.v.
Nó không bao giờ lưu danh sách trong
bộ nhớ, nó luôn chỉ nhớ số cuối cùng mà nó đã cho bạn, vì
vậy nó có thể cung cấp cho bạn số tiếp theo.
Bạn phải giải trí hàm mỗi
khi bạn muốn một số mới, và đó là lý do
tại sao nó được gọi là trình tạo, bởi vì nó
tạo ra số, hoặc thực sự là chuỗi, hoặc người dùng hoặc bất cứ thứ gì mà bạn muốn tạo.
Đây là cách bạn sẽ làm điều đó, thay vì "nums. append (i) ", bạn nói"
nhường i ", vì i là số chúng ta muốn trả
về, chúng ta không cần dấu
ngoặc vuông bằng nums này nữa và
chúng ta cũng không cần phân đoạn trả về nữa.
Vì vậy, bây giờ hàm này ở đây được gọi là hàm máy phát điện.
Lợi nhuận rất giống với lợi nhuận, nhưng điều gì sẽ xảy
ra là nó mang lại cho bạn khi bạn gọi nó, và sau
đó nó nhớ rằng nó ở đây, nó dừng lại
ngay trước dòng năm. Ngay sau dòng bốn
ở giữa.
Lần tới khi bạn gọi hàm, nó sẽ tiếp tục, vì vậy
những gì nó sẽ làm là nó sẽ
tăng dần i từng cái một, nó sẽ chạy lại vòng lặp
và nhường một, cho bạn một hàm và sau đó dừng lại.
Lần tới khi bạn gọi nó,
nó sẽ tiếp tục tăng lên, tôi
mua một cái và lặp lại vòng lặp và sau đó cho bạn hai cái, rồi nó sẽ dừng lại, v.v.
Cuối cùng khi bạn dùng hết số
lượng, nó sẽ không mang lại kết quả nào.
Và sau đó bạn biết rằng nó đã hoàn thành.
Vì vậy, chúng ta sẽ làm điều này như thế nào?
Trước hết, hãy in ra hàng trăm số.
Lưu ý rằng nó không còn cung cấp cho chúng ta một danh
sách nữa, bây giờ nó cung cấp cho chúng ta một đối tượng
máy phát điện, được gọi là hàng trăm số, do đó
là tên của hàm của chúng ta.
Nó cũng cung cấp cho chúng ta địa chỉ bộ nhớ của đối tượng của chúng ta.
Lưu ý cách chúng tôi đã định nghĩa một hàm,
nhưng bản in cho chúng tôi biết đây là một đối tượng,
vì Python ở chế độ nền
nhận ra rằng bạn đã sử dụng năng suất,
bạn đang tạo một trình tạo và nó biến chúng thành một đối tượng python.
Sau này tôi sẽ cho bạn biết
cách tự tạo những đối tượng này mà không cần hàm.
Vì vậy, hãy lưu trữ trình tạo của chúng tôi trong một biến.
Chúng tôi sẽ gọi nó là "g", đó là một
cái tên khá phổ biến cho một máy phát điện trong một chương trình nhỏ.
Nếu bạn có nhiều trình tạo,
tất nhiên bạn sẽ phải đặt một cái tên mô tả hơn.
Sau đó, chúng tôi sẽ in giá trị tiếp theo mà
trình tạo sẽ cung cấp cho chúng tôi.
Lưu ý rằng khi bạn khởi tạo một trình tạo, tương tự
như vậy, nó không chạy chức năng, nó bắt đầu ở phía
trên cùng mà không chạy chút nào.
Khi bạn yêu cầu nó cho giá trị tiếp theo, nó sẽ chạy
cho đến khi lợi nhuận và cung
cấp cho bạn bất kỳ giá trị nào bạn đã thu được.
Cách bạn yêu cầu nó cho
giá trị tiếp theo là bạn không chạy lại hàm mà bạn nói tiếp theo của "g".
Vì vậy, tiếp theo là một chức năng được tích hợp sẵn ảnh hưởng đến
máy phát điện, và nó yêu cầu nó tăng năng suất.
Được rồi, vì vậy nếu chúng tôi chạy điều này, bạn có thể thấy bây giờ chúng tôi
nhận được số 0, bởi vì đó là số đầu tiên mang lại.
Bây giờ máy phát điện của chúng tôi, "g", đã dừng ở
đây ở dòng 4. 5 giữa 4 và
5, vì vậy nếu chúng ta yêu cầu nó cho một số khác, hãy lưu ý rằng tất nhiên,
ở cuối chương trình, trình tạo sẽ bị hủy,
vì vậy nếu chúng ta chạy lại chương trình này, nó
sẽ bằng 0 lần nữa và đây sẽ là một bây giờ.
Nó không nhớ nó qua các lần thực thi
chương trình, đó không phải là cách Python hoạt động.
Vì vậy, bây giờ chúng ta có thể yêu cầu nó cho số đầu tiên,
và sau đó cho số tiếp theo.
Sau số đầu tiên, nó sẽ bị dừng
trong khoảng từ bốn đến năm.
Khi chúng ta nói tiếp theo, nó sẽ tiếp tục cho đến khi kết quả
tiếp theo, có nghĩa là lặp lại vòng lặp này một lần và cho chúng ta một vòng lặp.
Được chứ.
Rất quan trọng, hàm ghi nhớ vị trí nó đã dừng.
Vì vậy, tại bất kỳ thời điểm nào, bạn có thể ngừng
chạy chức năng và sau đó bạn có thể gọi tiếp theo để tiếp tục nó.
Vì vậy, nó không chỉ hữu ích để tạo số hoặc bất cứ điều gì, nó còn hữu
ích khi bạn muốn tạm thời dừng một chức năng đang chạy và
sau đó bạn có thể tiếp tục chạy nó
bất cứ khi nào bạn muốn,
bằng cách gọi tiếp theo trên nó.
Vì vậy, đó có thể không phải là điều
gì đó quá có ý nghĩa lúc này, nhưng chỉ cần nhớ rằng khi
nào chúng ta sẽ cần nó khi chúng ta thực hiện một chương trình đồng bộ.
Vậy còn hàm range thì sao?
Tôi đã nói trước đó rằng điều này
giải thích về cơ bản cách hoạt động của hàm phạm vi ở bên trong, và điều đó
đúng, nhưng hàm phạm
vi không trực tiếp cung cấp cho bạn một trình tạo.
Ở đây, hãy làm một cái gì đó
như "đối tượng phạm vi của tôi", nó sẽ
là phạm vi 10.
Điều này hoạt động rất giống một trình tạo, nhưng nếu bạn
gọi tiếp theo của "đối tượng phạm vi của
tôi", bạn sẽ gặp lỗi và hãy xem điều đó.
Đó là bởi vì đối tượng phạm vi không hoàn toàn là một trình
tạo mặc dù nó hoạt động
theo cách này, nó không tạo ra một danh sách
và sau đó cho phép bạn lặp lại nó, nó hoạt động theo cách thế hệ
này để hiệu quả hơn.
Tuy nhiên, "Đối tượng phạm vi của
tôi", bạn có thể nhớ rằng chúng tôi
đã in nó ra trước đó nhiều trong khóa
học và chúng tôi đã nhận được một số thứ kỳ lạ trong phạm vi từ 0 đến 10.
Đó chỉ là hàm "repr" đang được gọi và như bạn có thể thấy
nếu chúng tôi in ra kết quả "repr", chúng tôi cũng
thấy phạm vi từ 0 đến 10.
Vì vậy, "đối tượng phạm vi của tôi" là một thứ hoạt động
rất giống như thế này, chúng ta sẽ
tìm hiểu trong một vài video thời gian chính xác cách chúng ta có thể lặp qua một đối tượng
để làm cho nó hoạt động giống như một đối tượng phạm vi.
Vì vậy, chúng ta đã tìm hiểu về những máy phát điện này, và một điều
nữa tôi muốn đề cập thực sự, về
máy phát điện là hàm danh sách có thể biến một máy phát điện thành một danh sách.
Vì vậy, chúng tôi có thể in danh sách của "g".
Ngay tại đây những gì chúng tôi đã gọi là "tiếp theo" rồi lại "tiếp
theo", và sau đó là "danh sách".
Vì vậy, bây giờ chúng tôi có số 0 và một được in ra cho hai thứ đó
trong các hàm "tiếp theo" của chúng tôi,
và sau đó chúng tôi đã tạo danh sách trình tạo,
nhưng danh sách đó tất nhiên vẫn tiếp tục từ nơi chúng tôi đã dừng lại.
Bản thân trình tạo ghi nhớ nó
là gì, vì vậy danh sách bắt đầu từ hai, không phải từ 0.
Vì vậy, điều thực sự quan trọng cần ghi nhớ trong máy
phát điện, chúng nhớ vị trí của chúng.
Vì vậy, khi bạn tạo một cái, đó là về cơ bản từ thời điểm bạn bắt đầu sử dụng nó,
thời điểm bạn bắt đầu gọi "tiếp
theo" trên nó, nó sẽ nhớ vị trí của nó và
bạn không thể quay ngược lại. Được chứ.
Bây giờ, trong một vài video tiếp theo,
chúng ta sẽ tìm hiểu thêm về máy phát điện.
Chúng ta sẽ tìm hiểu về các
lớp của trình tạo, cách bạn có thể tạo một lớp hoạt động giống như
một trình tạo và chúng ta cũng sẽ tìm hiểu về các trình vòng lặp và
các tệp lặp trong Python và mục tiêu phạm vi
là một trong những ví dụ như vậy.
Sau đó, chúng ta sẽ
chuyển sang một số ví dụ lập trình
chức năng, như bộ lọc, bản đồ, bất kỳ và tất cả, và liệt kê.
Vì vậy, khá hào hứng
với phần này, tôi tin rằng trình tạo sẽ là thứ mà
bạn sẽ cần trong quá trình phát triển Python của
mình, đặc biệt là khi chúng ta tiến xa hơn trong khóa học.
Vì vậy, với những gì đã nói, tôi sẽ gặp bạn trong video tiếp theo.