Cho đến thời điểm này, chúng tôi đã tìm hiểu về một số cách để tổ chức mã Python của chúng tôi.
Điều đầu tiên chúng tôi đã làm tốt, chúng tôi chỉ viết Python trong một tệp và sắp xếp nó, phải không?
Toàn bộ mã của chúng tôi cho đến nay nằm trên một tệp duy nhất.
Vì vậy, đó là một cách mà chúng tôi tổ chức mã của mình.
Tiếp theo, chúng ta học về các hàm và các hàm được sử dụng như một cách để chúng ta không viết mã
lặp đi lặp lại.
Chúng ta có thể viết các hàm mà chúng ta có thể sử dụng ở bất kỳ đâu chúng ta muốn trong tệp của mình để chúng ta có thể
gọi đi gọi lại các hàm này và chúng ta có thể đặt tên cho các hàm một cách thích hợp để mã của chúng ta có ý nghĩa.
Và sau đó chúng tôi đã tìm hiểu về các lớp học.
Viết các bản thiết kế này mà chúng ta có thể tạo ra các đối tượng từ đó.
Chúng ta có thể khởi tạo các kiểu dữ liệu Python mới ngoài những kiểu mà họ vừa cung cấp cho chúng ta, phải không?
Thay vì chỉ có từ điển và danh sách, chúng ta có thể tạo những từ điển và danh sách tùy chỉnh của riêng mình, danh sách của riêng chúng
ta, có thể có các tính năng bổ sung.
Và chúng tôi có thể sử dụng các lớp để tổ chức mã của chúng tôi để đóng hộp chúng và cung cấp cho mỗi lớp một phương thức
và thuộc tính nhất định đóng gói nó độc đáo để chúng tôi sử dụng.
Chúng tôi cũng đã học về lập trình hàm và không giống như lập trình hướng đối tượng, chúng ta
thấy rất nhiều lớp có lập trình hàm, chúng ta chỉ sử dụng rất nhiều hàm, rất nhiều hàm thuần túy
và chúng ta có một dữ liệu mà chúng ta chỉ chuyển vào các chức năng đó và chúng tôi sắp xếp mọi thứ thành
những phần nhỏ nhỏ.
Tất cả những điều này nhằm mục đích để chúng tôi giữ cho mã của chúng tôi sạch sẽ, làm cho mã của chúng tôi dễ bảo trì hơn, do đó giữ cho
mã của chúng tôi có tổ chức.
Bởi vì khi chúng ta viết nhiều dòng mã hơn, việc ghi nhớ mọi thứ trong đầu bạn ngày càng khó hơn.
Nếu những người khác tham gia vào nhóm của bạn để làm việc trong dự án của bạn, họ cần một cách dễ dàng để tìm ra cách mọi thứ
đang hoạt động.
Nhưng chúng tôi vẫn có một vấn đề.
Và vấn đề đó là mọi thứ đều được chứa trong một tệp này.
Tất cả các hàm, tất cả các lớp mà chúng tôi đang viết chỉ nằm trên một tệp PI chấm.
Nhưng trong cuộc sống thực, không phải như vậy.
Chúng tôi có nhiều mã hơn và chúng tôi không thể chỉ có một tệp với hàng triệu dòng mã.
Vậy làm thế nào để chúng ta luôn có tổ chức?
Tốt.
Nếu chúng ta có nhiều tệp Python.
Như thế này bởi vì dự án của chúng tôi ngày càng lớn hơn.
Điều này sẽ hoạt động?
Có cách nào để chúng tôi liên kết tất cả các tệp này với nhau không?
Trên thực tế, có và đây là thực tế rất phổ biến trong tất cả các ngành, và chúng tôi gọi
đây là cách tổ chức các mô-đun mã.
Và các mô-đun chỉ đơn giản là những tệp này.
Mỗi một trong số các tệp này, mỗi tệp dot pi là một mô-đun.
Và bằng cách xây dựng các mô-đun này, giống như chúng ta đã xây dựng các chức năng khác nhau, giống như chúng ta xây dựng các lớp
khác nhau bởi vì bên trong các tệp này, chúng ta có thể có các lớp, chúng ta có thể có các hàm, nhưng chúng ta cũng có thể có
các tệp khác nhau.
Vì vậy, một lớp cao hơn để phân chia mã của chúng ta.
Và trong phần này, chúng ta sẽ tìm hiểu tất cả về các mô-đun và cố gắng nắm vững nó và xem cách chúng ta có thể
viết mã có tổ chức.
Chúng ta hãy có một cái nhìn.
Bạn có thể thấy ở đây, nếu tôi nhấp vào các tệp trong ripple của chúng tôi, chúng tôi có một số pi chính và mỗi khi tôi
nhấp vào Chạy, tệp này đã chạy.
Nhưng nếu chúng ta có nhiều tệp hơn thì sao?
Điều gì sẽ xảy ra nếu tôi thêm một tệp khác vào đây và chúng tôi sẽ gọi nó là Tiện ích Dot Pi?
Vì vậy, dựa trên những gì tôi vừa nhìn thấy bạn.
Hai điều này là gì?
Chúng là các mô-đun, phải không?
Main Pi là một tiện ích mô-đun.
PI là một mô-đun.
Và khi viết mô-đun, chúng tôi sử dụng các nguyên tắc tương tự như các biến trong Python, đó là trường hợp rắn.
Đó là, nếu có khoảng trắng mà chúng ta sử dụng dấu gạch dưới, thì mọi thứ đều là chữ thường.
Vì vậy, làm thế nào để chúng ta phân chia các mô-đun?
Và điều này đi kèm với thực hành.
Khi bạn mới bắt đầu, thật khó để nói, này, cái gì đi vào tệp nào, cái gì đi vào
tệp nào?
Nhưng nó tương tự như các lớp học, phải không?
Tương tự với các chức năng.
Chúng tôi muốn chia mã của chúng tôi thành các phần có ý nghĩa.
Một lần nữa, giả sử chúng tôi đang làm việc tại Netflix.
Chúng tôi có thể có một tệp dành riêng cho video, chúng tôi có thể có một tệp hoặc mô-đun khác dành riêng cho việc đăng nhập của người
dùng, có thể là một tệp khác dành riêng cho phân tích và tìm ra các đề xuất cho người dùng.
Chúng tôi muốn nhóm các lớp và chức năng này lại với nhau bên trong một tệp có ý nghĩa.
Bây giờ, một trong những cách phổ biến nhất để sử dụng một mô-đun là một thứ gì đó giống như một tiện ích.
Giả sử chúng ta muốn tạo một mô-đun tiện ích là một mô-đun có rất nhiều chức năng, giống như một vành đai công cụ, các
chức năng rất đơn giản mà chúng ta có thể sử dụng trong toàn bộ dự án của mình vì chúng ta có thể tưởng tượng ở
đây có nhiều tệp.
Vì vậy, hãy tạo một ví dụ rất đơn giản.
Tôi sẽ nói rằng một hàm nhân tồn tại ở đây.
Và điều này làm tê liệt một và tê liệt.
Và ở đây chúng tôi chỉ đơn giản là sẽ quay trở lại.
Và tôi đã một lần tê liệt với một chức năng rất đơn giản.
Và một lần nữa, chúng ta cũng sẽ có một hàm chia.
Và vâng, điều này là vô ích vì chúng ta chỉ có thể sử dụng cộng hoặc chia, toán hạng và python.
Nhưng hãy gắn bó với tôi.
Ở đây, tôi đang cố gắng cho bạn thấy một ví dụ.
Được rồi, bây giờ là hai, tôi sẽ trả về số một chia cho số hai.
Đẹp và đơn giản.
Vì vậy, điều này.
Là mô-đun tiện ích của chúng tôi có tất cả các chức năng này cho chúng tôi.
Bây giờ lưu ý ở đây rằng chúng tôi thực sự không làm gì trong tệp này.
Tôi chỉ đơn giản là xác định các chức năng, nhưng tôi không chạy bất kỳ chức năng nào.
Nhưng giả sử chúng ta có mô-đun tiện ích này và tôi muốn sử dụng nó trong tệp py chính của mình.
Làm thế nào chúng ta sẽ làm điều này?
Chà, cách chúng ta giao tiếp giữa hai tệp này khá đơn giản.
Tất cả những gì chúng ta cần làm là sử dụng lệnh nhập mà chúng ta nhập và sau đó đặt cho nó tên tệp mà chúng ta muốn
nhập.
Chúng ta muốn nhập gì?
Chúng tôi muốn nhập tiện ích giống như vậy.
Và lưu ý rằng tôi không thêm dấu chấm py vì chúng tôi giả định rằng bất cứ thứ gì chúng tôi sẽ nhập sẽ
là một tệp python.
Vì vậy, chúng ta không cần phải làm điều đó.
Chỉ cái tên.
Chỉ vậy thôi.
Bây giờ, hãy in tiện ích ở đây.
Nếu tôi chạy cái này.
Ái chà.
Bạn có thấy điều đó không?
Chúng tôi có một tiện ích mô-đun từ.
Và đây là đường dẫn tệp mà trang web này tạo cho chúng tôi, vì vậy nó không thực sự quan trọng.
Bây giờ, có một vài điều đã xảy ra ở đây.
Một là chúng tôi đã tạo thư mục py cache này gạch dưới, gạch dưới, py cache.
Và.
Oh Boy.
Đây là gì?
Hừ!
Điều này là khá khó hiểu, phải không?
Chà, bộ đệm hình tròn này được tạo mỗi khi chúng tôi chạy một tệp với, giả sử, nhập các câu lệnh.
Vì vậy, khi chúng tôi đang sử dụng các mô-đun.
Bạn thấy đấy, những gì Pi Cash thực hiện là khi chúng ta nhấp vào Chạy.
Trình thông dịch sẽ tạo thư mục podcast này và nó sẽ nói, Này, tôi đang chạy
tệp này, tệp pi chính này, bất kỳ thứ gì có thể không nhập tệp py, giả sử tiện ích.
Trong trường hợp của chúng tôi, tôi sẽ tính tiền mặt.
Vì vậy, hãy xem nó nói dấu chấm pi như thế nào.
Thấy điều này là do nó đang sử dụng trình thông dịch C Python.
Hãy nhớ rằng đây là Python C là trình thông dịch được viết và C, vì vậy đây thực sự là một tệp được biên
dịch để lần sau khi tôi nhấp vào chạy ở đây trên pi chính của tôi, không có gì thay đổi vì những gì sắp xảy ra
là thay vì tải lên tiện ích pi, nó sẽ tải lên phiên bản tiện ích đã biên dịch này vì không có
gì thay đổi.
Và tiện ích số pi.
Và điều này làm cho mọi thứ nhanh hơn.
Khi tôi cố gắng chạy lại Main Pi, bộ nhớ đệm là như vậy.
Caching là, này, tôi sẽ ghi nhớ điều này và đây là phiên bản biên dịch
nên tôi không phải thực hiện lại bước biên dịch.
Nhưng lưu ý rằng tệp pi chính không được biên dịch bởi vì, chúng tôi chạy nó mọi lúc.
Bây giờ, nếu chúng ta thay đổi chức năng tiện ích để không có sự phân chia trong đó, tôi nhấp vào chạy và bạn không nhận thấy nó
ở đây.
Nhưng điều này hiện đã được chạy lại vì chúng tôi có một tệp khác.
Bạn thấy rằng chúng tôi có nhân ở đây nhưng không chia.
Vì vậy, chúng ta hãy mang lại chia một lần nữa.
Quay lại đây, bấm chạy.
Và ở đó bạn đi.
Chúng ta cũng có sự phân chia ở đây.
Nhưng đây là thứ mà chúng tôi không đụng đến.
Điều này chỉ xuất hiện bên dưới mui xe với bất kỳ trình chỉnh sửa nào mà chúng tôi sử dụng.
Và trong một vài video, chúng tôi sẽ cho bạn thấy điều này cũng xảy ra như thế nào khi chúng tôi sử dụng thứ gì đó như biểu đồ hình tròn.
Đây chỉ là điều mà các biên tập viên cho phép chúng tôi làm để các chương trình của chúng tôi có thể chạy nhanh hơn.
Vì vậy, bây giờ tôi có quyền truy cập.
Hãy làm cho điều này nhỏ hơn một chút.
Bây giờ tôi có quyền truy cập vào tiện ích.
Và đây là phần thú vị.
Nếu tôi chấm ở đây, hãy nhìn vào đó.
Tôi có quyền truy cập để chia và nhân để tôi có thể nhân các số.
Giả sử hai và ba nhấp chuột chạy.
Và tôi có thể sử dụng mô-đun tiện ích trong tệp chính của mình.
Rất, rất tuyệt.
Nếu tôi chia và tôi bấm chạy.
Tôi cũng có thể sử dụng cái này.
Rất, rất tuyệt.
Và tôi có thể nhập bao nhiêu lần tùy thích nếu tôi có một tệp khác ở đây và tôi muốn nhập
một thứ khác, giả sử có một tiện ích để tệp.
Chà, tôi có thể nhập dữ liệu đó và nhập bao nhiêu thứ tùy thích và sử dụng chúng trên các tệp của mình.
Làm thế nào là mát đó là?
Vì vậy, bây giờ chúng tôi có một cách để tổ chức mã của chúng tôi và để tất cả các tệp này giao tiếp với nhau.
Bởi vì trong cuộc sống thực, chúng ta có những dự án lớn và những dự án lớn này sẽ được thực hiện bởi các nhóm khác
nhau, các lập trình viên khác nhau.
Và chúng tôi cần một cách để làm việc với tất cả các tệp này.
Và bằng cách sử dụng các câu lệnh nhập giữa các mô-đun, chúng tôi có thể sử dụng chức năng, giống như chúng tôi có thể
sử dụng chức năng mà các chức năng cung cấp cho chúng tôi giữa các tệp khác nhau.
Và hầu hết thời gian, nếu bạn đang làm việc tại một công ty, vài dòng đầu tiên trên tệp dot pi
thường là câu lệnh nhập vì thông thường bạn đang giao tiếp với các tệp khác.
Chúng ta hãy tìm hiểu thêm một số trong video tiếp theo.