Hướng dẫn how do multiple files work in python? - làm thế nào để nhiều tệp hoạt động trong python?
Chào mừng bạn đến với ngày 21 của 30 ngày của loạt phim Python! Hôm nay chúng ta sẽ tìm hiểu về cách (và tại sao) chia mã Python của chúng tôi thành nhiều tệp. Show
Tuy nhiên, trước tiên, chúng tôi sẽ nhanh chóng tóm tắt lại cách nhập khẩu hoạt động trong Python. Bắt đầu nào! Tóm tắt nhập khẩu trong PythonThực hiện một bản tóm tắt nhanh là đáng giá trong trường hợp này, bởi vì điều quan trọng là chúng tôi hiểu một vài điểm trước khi tắt và tạo rất nhiều tệp cho các chương trình của chúng tôi! Nếu bạn muốn một cái gì đó toàn diện hơn một chút, hãy đọc lại bài đăng ngày 18, nơi chúng tôi lần đầu tiên nhập khẩu. Nhập thêm tên vào import math print(math.pi) # 3.14 7Nếu bạn có tệp Python và bạn nhập cái này:
Sau đó, hiển thị các tên hiện tại trong không gian tên toàn cầu. Tên mô -đun sẽ nằm trong không gian tên toàn cầu, sẵn sàng để bạn sử dụng. Nhập cho phép chúng tôi truy cập các yếu tố của mô -đun đã nhậpSau khi nhập, chúng tôi có thể làm một cái gì đó như thế này để truy cập vào một cái gì đó bên trong một mô -đun:
Chúng tôi đã truy cập tên 8 bên trong mô -đun 9. Trong trường hợp này, đó là giá trị của hằng số toán học, pi.Bạn có thể sử dụng từ khóa 0 để đặt cho mô -đun đã nhập một tên khác trong mã của bạn. Tôi không khuyên bạn nên làm điều này, mặc dù bạn sẽ thấy nó được thực hiện mọi lúc mọi nơi!Bạn cũng có thể sử dụng 1 để thêm hầu hết mọi thứ từ mô -đun đến không gian tên toàn cầu của bạn. Điều này có thể "gây ô nhiễm" không gian tên toàn cầu, lấp đầy nó bằng các biến. Hầu hết thời gian, nó rất nản lòng.Tại sao chia mã của bạn thành các tập tin?Bây giờ chúng tôi đã nhanh chóng tóm tắt lại chủ đề nhập khẩu, hãy nói về lý do tại sao chúng tôi có thể muốn chia mã của chúng tôi thành nhiều tệp! Câu hỏi đầu tiên chúng ta nhận được khi chúng ta bắt đầu thảo luận về điều này là: "Không dễ dàng giữ mã trong một tệp?". Rốt cuộc, sau đó bạn không phải đối phó với nhập khẩu! Giữ mã của bạn trong một tệp có thể giúp việc viết dễ dàng hơn (để bắt đầu!), Nhưng khi bạn viết nhiều hơn, nó sẽ khiến việc đọc và sửa đổi trở nên khó khăn hơn nhiều. Trong lập trình, khả năng đọc và khả năng bảo trì của Trump tốc độ viết bất cứ ngày nào! Tách mối quan tâm và dễ dàng tổ chứcKhi chúng tôi tách mã thành các tệp, điều quan trọng là chúng tôi có lý do để đặt một số mã vào một tệp nhất định. Thông thường, chúng tôi đi theo mối quan tâm. Mã thực hiện một điều đi vào một tệp và mã thực hiện một cái gì đó khác đi vào một tệp khác. Ví dụ: chúng tôi có thể có một tệp cho tương tác người dùng (in và đầu vào) và một tệp khác để lưu trữ dữ liệu (lưu và truy xuất mọi thứ từ một tệp). Hiện tại, các mối quan tâm khác nhau của ứng dụng Python có thể không rõ ràng với bạn. Điều đó là bình thường! Theo thời gian, bạn sẽ tìm hiểu thêm về điều này. Với nhiều kinh nghiệm hơn, nó sẽ trở nên rõ ràng hơn khi mọi thứ sẽ được hưởng lợi từ việc chia thành các tệp. Tách các tệp theo mối quan tâm, giả sử chúng tôi cung cấp cho các tệp tên tốt, cũng giúp chúng tôi tìm mã dễ dàng hơn. Nếu bạn có hai FILS được gọi là 2 và 3, bạn sẽ biết những gì bạn sẽ tìm thấy trong mỗi cái!Sử dụng các tập tin và thư mục cũng kỳ diệu cho tổ chức. Ví dụ, bạn có thể đặt các tệp liên quan đến làm việc với các loại lưu trữ dữ liệu khác nhau vào một thư mục. Cải thiện khả năng đọcKhi các tập tin của bạn phát triển, chúng bắt đầu trở nên khó đọc hơn. Bạn có thể có nhiều chức năng và biến, và việc tìm kiếm mọi thứ có thể đòi hỏi nhiều cuộn. Các biên tập viên hiện đại có các tính năng để dễ dàng tìm thấy nơi mọi thứ được xác định, nhưng đây không phải là một giải pháp hoàn hảo. Chia mã của bạn thành nhiều tệp là một cách tuyệt vời để tạo ra các tệp nhỏ hơn, tập trung hơn. Điều hướng các luận án nhỏ hơn các tệp nhỏ hơn sẽ dễ dàng hơn và do đó, sẽ hiểu nội dung của từng tệp này. Dễ dàng sử dụng lại mãKhi bạn có nhiều tệp nhỏ hơn, tập trung, việc sử dụng lại nội dung của một tệp trong nhiều tệp khác sẽ dễ dàng hơn bằng cách nhập. Cũng có thể có quá nhiều tập tin! Đừng nhằm mục đích làm cho các tệp của bạn nhỏ nhất có thể. Thay vào đó, làm cho họ tập trung. Nếu mỗi tệp liên quan đến một khía cạnh của ứng dụng của bạn và mọi tệp có một tên tốt, việc điều hướng dự án của bạn sẽ dễ dàng! Làm việc với hai tệpHãy bắt đầu bằng cách đi vào một dự án Python mới (hoặc repl.it replet) và tạo hai tệp. Hãy gọi chúng là 4 và 5.Hãy nhớ rằng repl.it sẽ luôn chạy 4 khi bạn nhấn nút "Chạy", như chúng tôi đã đề cập trong bài 0 ngày.Bởi vì cả hai tệp đều nằm trong cùng một thư mục, bạn có thể nhập một tệp khác. Hãy nhập cái này vào 4:
Lưu ý rằng chúng tôi không nhập 5, nhưng chỉ 9. Python làm phần còn lại!Điều gì xảy ra khi bạn nhậpKhi chúng tôi nhập một tệp, Python chạy tệp. Nó phải làm điều đó để xác định tên nào tồn tại trong tệp đó. Sau đó, nó làm cho tệp đó có sẵn cho chúng tôi trong 4 bằng cách đặt một tham chiếu đến mô -đun trong không gian tên toàn cầu.Hãy thêm một cái gì đó vào 5:
Bây giờ chúng ta hãy nhập tệp từ 4:
Hãy thử chạy điều đó. Bạn sẽ thấy rằng chúng ta nhận được hai điều được in ra:
Đó là bởi vì tệp 5 đã được thực thi. Nó chứa một cuộc gọi 4, do đó, Python đã in ra!Thật hiếm khi bạn viết mã như thế này. Thay vào đó, các tệp bạn nhập thường sẽ chứa các biến và hàm, để khi bạn nhập chúng, không có gì thực sự xảy ra cho đến khi bạn thực sự sử dụng các biến và hàm đó.variables and functions, so that when you import them nothing actually happens until you actually use those variables and functions. Hãy thêm một cái gì đó thực tế hơn một chút vào 5. Có lẽ một cái gì đó như thế này:
Bây giờ trong 4, chúng ta có thể sử dụng hàm 7 mà chúng ta đã xác định trong 5.
Great! Đó là ý chính của nó: tách mọi thứ thành các tập tin và nhập chúng! Đừng đặt cho các tệp của bạn cùng tên với các mô-đun tích hợp. Ví dụ: nếu bạn tạo một tệp mới và gọi nó là ____39, bạn sẽ gặp rắc rối! Đó là bởi vì nếu một tệp khác cố gắng 0, bạn sẽ không nhập mô-đun 1 tích hợp cho phép chúng tôi nói chuyện với các tệp JSON. Thay vào đó, bạn sẽ nhập tệp 9!Python luôn tìm trong thư mục dự án để nhập trước khi xem các gói được cài đặt hoặc tích hợp. Các tệp của bạn hoạt động giống như các mô -đunMọi thứ chúng tôi có thể làm với các mô -đun bên ngoài, chúng tôi có thể làm với các tệp của riêng mình:
Sử dụng các tệp và thư mụcBạn có thể tạo các thư mục cho các tệp của mình nếu bạn nghĩ rằng điều đó sẽ giúp tổ chức. Theo kinh nghiệm của tôi, nó thường làm. Ví dụ: tạo một thư mục trong dự án của bạn có tên là 7 và di chuyển 5 vào nó. Bây giờ cấu trúc tệp/thư mục của bạn sẽ trông như thế này:________số 8Từ 4 bây giờ bạn phải sử dụng cú pháp hơi khác nhau để nhập 5:
Khi nhập, dấu chấm ( 1) có nghĩa là một cái gì đó giống như "bên trong".Trong ví dụ trên, do đó chúng tôi đang nhập 9 từ bên trong 7.Nếu bạn có nhiều bộ phụ, bạn sẽ cần sử dụng nhiều 1 để tách các cấp độ khác nhau của các thư mục và tệp, như thế này: 0Khi bạn đang nhập như thế này, bạn sẽ nhập những thứ cụ thể như chúng tôi đã thực hiện hoặc bạn sẽ sử dụng nhập khẩu bí danh. Một trong hai điều này là tốt (cái đầu tiên nói chung là tốt hơn):
Bạn thường sẽ không làm bất cứ điều gì như trong ví dụ dưới đây, bởi vì nó có thể khá lâu để gõ ra: 1Bạn cần tham khảo nhập hoàn toàn khi bạn muốn sử dụng thứ gì đó, vì vậy bạn sẽ gõ 7 rất nhiều trong mã của mình!Mặc dù vậy, bạn sẽ không sử dụng tệp nhiều. Chế độ tập lệnh so với chế độ mô -đunKhi chúng tôi chạy một tệp (ví dụ: trong repl.it, đó là 4), chúng tôi nói rằng tệp được chạy trong "chế độ tập lệnh".Khi chúng tôi nhập một tệp, tệp đó chạy ở "Chế độ mô -đun". Hiện tại cấu trúc dự án của chúng tôi là như thế này:
Tôi sẽ xóa nội dung của cả hai tệp và tôi sẽ đặt nó trong 5: 3Và tôi sẽ làm điều này trong 4: 4Bạn sẽ thấy đầu ra này: 5Hãy nhớ rằng khi chúng tôi nhập, chúng tôi chạy tập tin. Do đó, dòng đầu ra đầu tiên thuộc về 5 và dòng đầu ra thứ hai thuộc về 4.Tệp mà chúng tôi chạy luôn có biến 3 với giá trị 4. Đó chỉ đơn giản là cách Python nói với chúng tôi rằng chúng tôi đã chạy tập tin đó.Bất kỳ tệp nào không có 3 bằng 4 đều được nhập.Hãy thử di chuyển mọi thứ xung quanh và xem đầu ra được tạo bởi 5 thay đổi như thế nào!Chỉ chạy mã trong chế độ tập lệnhĐôi khi chúng tôi muốn đưa một số mã vào một tệp, nhưng chúng tôi chỉ muốn mã đó chạy nếu chúng tôi thực thi tệp đó trực tiếp và không nếu chúng tôi nhập tệp. Vì chúng ta biết rằng 3 phải bằng 4 cho một tệp đã được chạy, chúng ta có thể sử dụng câu lệnh IF.Chúng tôi có thể nhập cái này trong 5: 6Điều đó có thể cho phép chúng tôi chạy 5 (chúng tôi không thể làm điều đó trong bản sao. Nó không có một số cấu hình bổ sung) và xem chức năng 2 có hoạt động không.Đó là một trong những trường hợp sử dụng chính của cấu trúc này: để giúp chúng tôi xem liệu các công cụ trong tệp có hoạt động khi chúng tôi thường không muốn nó chạy hay không. Một trường hợp sử dụng khác là cho các tệp mà bạn thường không tự chạy. Đôi khi bạn có thể viết một tệp được sử dụng bởi một chương trình khác, ví dụ. Sử dụng cấu trúc này sẽ cho phép bạn chạy tệp của mình để kiểm tra, trong khi không ảnh hưởng đến chức năng của nó khi được nhập bởi một chương trình khác. Bài tậpĐối với bài tập (duy nhất) ngày hôm nay, chúng tôi sẽ cung cấp cho bạn một loạt các mã trong một tệp. Truy cập mã ở đây. Nhiệm vụ của bạn là chia mã đó thành nhiều tệp.Bạn có thể chọn số lượng và tệp nào bạn muốn chia mã thành, nhưng hãy suy nghĩ về lý do tại sao bạn đặt mỗi phần vào mã trong mỗi tệp! Sau đó, khi bạn hoàn thành, hãy xem giải pháp tập thể dục của chúng tôi để xem cách chúng tôi chia mã và tại sao. Dự ánĐối với dự án hôm nay, chúng tôi sẽ sử dụng thư viện Python để tạo một số biểu đồ!Là một phần của dự án này, bạn sẽ phải cấu trúc tốt mã của mình để nó không trở thành một mớ hỗn độn không thể đọc được. Kiểm tra bản tóm tắt của dự án để biết thêm thông tin về dự án hôm nay. |