Tạo hai tệp python và nhập tệp này vào tệp khác

Chào mừng đến với ngày thứ 21 của loạt bài 30 Days of Python. Hôm nay chúng ta sẽ tìm hiểu về cách [và lý do tại sao] chia mã Python của chúng ta thành nhiều tệp

Tuy nhiên, trước tiên, chúng ta sẽ nhanh chóng tóm tắt cách thức hoạt động của quá trình nhập trong Python. Bắt đầu nào

Tóm tắt các lần nhập trong Python

Thực hiện một bản tóm tắt nhanh là đáng giá trong trường hợp này, vì điều quan trọng là chúng ta phải hiểu một số điểm trước khi bắt đầu và tạo nhiều tệp cho chương trình của mình

Nếu bạn muốn một cái gì đó toàn diện hơn một chút, vui lòng đọc lại bài đăng ngày 18 nơi chúng tôi lần đầu tiên đề cập đến hàng nhập khẩu

Nhập thêm tên vào
import math

print[math.pi]  # 3.14
7

Nếu bạn có một tệp Python và bạn gõ cái này

import json

print[globals[]]

Sau đó, nó sẽ hiển thị các tên hiện có trong không gian tên chung. Tên mô-đun sẽ nằm trong không gian tên chung, sẵn sàng để bạn sử dụng

Nhập cho phép chúng tôi truy cập các phần tử của mô-đun đã nhập

Sau khi nhập, chúng ta có thể làm như thế này để truy cập thứ gì đó bên trong mô-đun

import math

print[math.pi]  # 3.14

Chúng tôi đã truy cập tên

import math

print[math.pi]  # 3.14
8 bên trong mô-đun
import math

print[math.pi]  # 3.14
9. Trong trường hợp này, đó là giá trị của hằng số toán học, pi

Các cách khác để nhập khẩu

Bạn có thể sử dụng từ khóa

import myfile
0 để đặt tên khác cho mô-đun đã nhập trong mã của mình. Tôi không khuyên bạn nên làm điều này, mặc dù thỉnh thoảng bạn sẽ thấy nó được thực hiện

Bạn cũng có thể sử dụng

import myfile
1 để thêm hầu hết mọi thứ từ mô-đun vào không gian tên chung của mình. Điều này có thể "làm ô 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ó không được khuyến khích mạnh mẽ

Tại sao phải chia mã của bạn thành các tệp?

Bây giờ chúng tôi đã nhanh chóng tóm tắt lại chủ đề nhập, hãy nói về lý do tại sao chúng tôi có thể muốn chia mã của mình thành nhiều tệp

Câu hỏi đầu tiên chúng tôi nhận được khi bắt đầu thảo luận về vấn đề này là. "không dễ dàng hơn để giữ mã trong một tệp sao?"

Rốt cuộc, sau đó bạn không phải đối phó với hàng nhập khẩu

Giữ mã của bạn trong một tệp có thể giúp viết dễ dàng hơn [bắt đầu bằng. ], 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ì vượt trội hơn tốc độ viết bất kỳ ngày nào

Tách mối quan tâm và dễ tổ chức

Khi 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 ta đi theo mối quan tâm. Mã thực hiện một việc đi vào một tệp và mã thực hiện việc khác đi vào một tệp khác

Ví dụ: chúng tôi có thể có một tệp để tương tác với người dùng [bản 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 đối với bạn. Đó 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, mọi thứ 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 đặt 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 bộ phim có tên là ________ 52 và ________ 53, bạn sẽ biết mình sẽ tìm thấy gì trong mỗi bộ phim.

Sử dụng tệp và thư mục cũng mang lại điều 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 đọc

Khi các tệp của bạn phát triển, chúng bắt đầu khó đọc hơn. Bạn có thể có nhiều hàm và biến, và việc tìm kiếm mọi thứ có thể cần phải cuộn nhiều lần

Các trình soạn thảo hiện đại có các tính năng giúp 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 các tệp nhỏ hơn, tập trung hơn. Điều hướng các tệp nhỏ hơn sẽ dễ dàng hơn và do đó sẽ hiểu được nội dung của từng tệp này

Dễ sử dụng lại mã hơn

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

Quá nhiều tệp

Cũng có thể có quá nhiều tệp. Đừng đặt mục tiêu làm cho các tệp của bạn càng nhỏ càng tốt. Thay vào đó, hãy khiến 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 đều có tên hay, thì việc điều hướng dự án của bạn sẽ dễ dàng

Làm việc với hai tệp

Hãy bắt đầu bằng cách đi vào một dự án Python mới [hoặc thay thế. nó thay thế] và tạo hai tệp. Hãy gọi chúng là

import myfile
4 và
import myfile
5

Hãy nhớ rằng thay thế. nó sẽ luôn chạy

import myfile
4 khi bạn nhấn nút "Chạy", như chúng tôi đã đề cập trong bài đăng ngày 0

Vì cả hai tệp đều nằm trong cùng một thư mục nên bạn có thể nhập tệp này từ tệp kia

Hãy nhập cái này vào

import myfile
4

chính. py ______5

Lưu ý rằng chúng tôi không nhập

import myfile
5 mà chỉ nhập
import myfile
9. Python làm phần còn lại

Điều gì xảy ra khi bạn nhập

Khi chúng tôi nhập tệp, Python sẽ 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ó cung cấp tệp đó cho chúng tôi trong

import myfile
4 bằng cách đặt tham chiếu đến mô-đun trong không gian tên chung

Hãy thêm một

import json

print[globals[]]
71 trong
import myfile
5

tệp của tôi. py ______17

Và một cái khác trong

import myfile
4

chính. py ______21

Hãy thử chạy nó

Bạn sẽ thấy rằng chúng tôi nhận được hai điều được in ra

import math

print[math.pi]  # 3.14
2

Đó là vì tệp

import myfile
5 đã được thực thi. Nó chứa một cuộc gọi
import json

print[globals[]]
71, vì vậy Python đã in nội dung 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, vì vậy 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 đó

Hãy thêm điều gì đó thực tế hơn một chút vào

import myfile
5. Có lẽ một cái gì đó như thế này

tệp của tôi. py ______26

Bây giờ trong

import myfile
4, chúng ta có thể sử dụng hàm
import json

print[globals[]]
78 mà chúng ta đã xác định trong
import myfile
5

chính. py ______30

Tuyệt quá

Đó là ý chính của nó. tách mọi thứ thành các tệp và nhập chúng

Cái gì [không] để đặt tên cho tệp của bạn

Không đặt tên cho các tệp của bạn giống như các mô-đun tích hợp

Ví dụ: nếu bạn tạo một tệp mới và đặt tên là

import math

print[math.pi]  # 3.14
10, bạn sẽ gặp rắc rối

Đó là bởi vì nếu một tệp khác cố gắng chuyển sang

import math

print[math.pi]  # 3.14
11, thì bạn sẽ không nhập mô-đun
import math

print[math.pi]  # 3.14
12 tích hợp sẵn 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
import math

print[math.pi]  # 3.14
10 của mình

Python luôn tìm trong thư mục dự án để nhập trước khi xem các gói tích hợp hoặc đã cài đặt

Các tệp của bạn hoạt động giống như các mô-đun

Mọ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

  • Nhập toàn bộ tệp bằng
    import math
    
    print[math.pi]  # 3.14
    
    14 và sau đó gọi mọi thứ là
    import math
    
    print[math.pi]  # 3.14
    
    15
  • Nhập những thứ cụ thể với
    import math
    
    print[math.pi]  # 3.14
    
    16
  • Nhập bí danh
  • Chúng ta có thể làm
    import math
    
    print[math.pi]  # 3.14
    
    17 [mặc dù điều đó không được khuyến khích]

Sử dụng tệp và thư mục

Bạ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 ích cho việc 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à

import math

print[math.pi]  # 3.14
18 và chuyển
import myfile
5 vào đó. Bây giờ cấu trúc tệp/thư mục của bạn sẽ trông như thế này

import math

print[math.pi]  # 3.14
1

Từ

import myfile
4, bây giờ bạn phải sử dụng cú pháp hơi khác để nhập
import myfile
5

chính. py ______44

Khi nhập, dấu chấm [

import math

print[math.pi]  # 3.14
22] có nghĩa là "bên trong"

Trong ví dụ trên, do đó, chúng tôi đang nhập

import myfile
9 từ bên trong
import math

print[math.pi]  # 3.14
18

Nếu bạn có nhiều thư mục con, bạn sẽ cần sử dụng nhiều

import math

print[math.pi]  # 3.14
22 để phân tách các cấp độ khác nhau của thư mục và tệp, như thế này

import math

print[math.pi]  # 3.14
0

Khi 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 bí danh. Một trong hai cái này đều tốt [cái đầu tiên thường tốt hơn]

  • import math
    
    print[math.pi]  # 3.14
    
    26
  • import math
    
    print[math.pi]  # 3.14
    
    27

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ì có thể mất khá nhiều thời gian để gõ ra

import math

print[math.pi]  # 3.14
1

Bạn cần tham khảo phần nhập hoàn chỉnh khi muốn sử dụng thứ gì đó, vì vậy bạn sẽ phải nhập rất nhiều vào mã của mình

import math

print[math.pi]  # 3.14
28

Bạn có thể làm điều đó nếu bạn không sử dụng tệp nhiều

Chế độ tập lệnh so với. chế độ mô-đun

Khi chúng tôi chạy một tệp [e. g. thay thế. nó, đó là

import myfile
4], chúng tôi nói rằng tệp đó được chạy ở "chế độ tập lệnh"

Khi chúng tôi nhập một tệp, tệp đó sẽ 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

import math

print[math.pi]  # 3.14
1

Tôi sẽ xóa nội dung của cả hai tệp và tôi sẽ đặt tệp này vào

import myfile
5

tệp của tôi. py ______03

Và tôi sẽ làm điều này trong

import myfile
4

chính. py ______04

Bạn sẽ thấy đầu ra này

import math

print[math.pi]  # 3.14
5

Hãy nhớ rằng khi chúng tôi nhập, chúng tôi chạy tệp. Do đó, dòng đầu tiên thuộc về

import myfile
5 và dòng thứ hai thuộc về
import myfile
4

Tệp mà chúng tôi chạy luôn có biến

import math

print[math.pi]  # 3.14
64 với giá trị là
import math

print[math.pi]  # 3.14
65. Đó đơn giản là cách Python cho chúng tôi biết rằng chúng tôi đã chạy tệp đó

Bất kỳ tệp nào không có

import math

print[math.pi]  # 3.14
64 bằng với
import math

print[math.pi]  # 3.14
65 đã được nhập

Hãy thử di chuyển mọi thứ xung quanh và xem đầu ra được tạo bởi

import myfile
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—chứ không phải nếu chúng tôi đã nhập tệp

Vì chúng tôi biết rằng

import math

print[math.pi]  # 3.14
64 phải bằng
import math

print[math.pi]  # 3.14
65 để tệp được chạy, chúng tôi có thể sử dụng câu lệnh if

Chúng ta có thể gõ cái này vào

import myfile
5

tệp của tôi. py ______06

Điều đó có thể cho phép chúng tôi chạy

import myfile
5 [chúng tôi không thể làm điều đó thay thế. nó mà không cần một số cấu hình bổ sung] và xem chức năng
import math

print[math.pi]  # 3.14
03 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 nội dung trong tệp có hoạt động hay không khi chúng tôi thường không muốn nó chạy

Một trường hợp sử dụng khác dành cho các tệp mà bạn thường không tự chạy. Đôi khi bạn có thể ghi một tệp để chương trình khác sử dụng, chẳng hạn

Sử dụng cấu trúc này sẽ cho phép bạn chạy tệp của mình để thử nghiệm, đồng thời không ảnh hưởng đến chức năng của tệp khi tệp được nhập bởi một chương trình khác

bài tập

Đối với bài tập [chỉ] hôm nay, chúng tôi sẽ cung cấp cho bạn một loạt mã tất cả trong một tệp

Truy cập mã tại đây

Nhiệm vụ của bạn là chia đoạn code đó thành nhiều file. 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 nghĩ về lý do tại sao bạn đặt từng đoạn mã trong mỗi tệp

Sau đó, khi bạn hoàn tất, hãy xem giải pháp bài tập của chúng tôi để xem cách chúng tôi chia mã và tại sao

Dự định

Đố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

Chủ Đề