Gói Python chỉ đơn giản là một tập hợp các mô-đun python có tổ chức. Mô-đun python chỉ đơn giản là một tệp python
Tại sao tôi muốn tạo một gói bằng cách sử dụng someFolder
|-- stringLength.py
|-- stringToUpper.py
`-- stringToLower.py
7?
Tạo một gói với
someFolder |-- stringLength.py |-- stringToUpper.py `-- stringToLower.py7 là để giúp phát triển các dự án Python lớn hơn dễ dàng hơn
Nó cung cấp một cơ chế để bạn nhóm các tập lệnh python riêng biệt thành một mô-đun có thể nhập được
Hãy chạy qua một số ví dụ
Cách tốt nhất để hiểu tại sao bạn nên sử dụng
someFolder |-- stringLength.py |-- stringToUpper.py `-- stringToLower.py7và tìm hiểu cách sử dụng nó để tạo một gói là chạy qua một số ví dụ nhanh. Cách tốt nhất để học là làm
Mã trong hướng dẫn này sẽ hoạt động với Python 2 hoặc 3. Chỉ cần nhớ, nếu bạn đang sử dụng 2 thì bạn sẽ cần sử dụng chức năng
# stringLength.py def stringLength[inStr]: return len[inStr]2
Giả sử chúng tôi có ba mô-đun mà chúng tôi đã tạo
someFolder |-- stringLength.py |-- stringToUpper.py `-- stringToLower.py
Hãy nhớ rằng một mô-đun chỉ là một tên khác cho bất kỳ tệp python nào
Ví dụ của chúng tôi, nội dung của các tệp này là như sau
# stringLength.py def stringLength[inStr]: return len[inStr]
# stringToUpper.py def stringToUpper[inStr]: return inStr.upper[]
# stringToLower.py def stringToLower[inStr]: return inStr.lower[]
Rõ ràng, các chức năng này là vô dụng, nhưng nó giúp phục vụ như một mô hình cho khái niệm cơ bản rằng chúng tôi có một số mô-đun python mà chúng tôi đã viết có liên quan đến nhau.
Vì vậy, nếu không tạo gói và sử dụng
someFolder |-- stringLength.py |-- stringToUpper.py `-- stringToLower.py7, làm cách nào để sử dụng các chức năng trong các tệp này?
Chà, chúng tôi chỉ có thể nhập các tệp này nếu chúng nằm trong thư mục hiện tại mà bất kỳ tập lệnh nào chúng tôi đang chạy đều chạy từ đó
Chà, chúng ta có thể sử dụng các tệp này trong tập lệnh Python mới nhưng với một cảnh báo chính
- Các tệp phải nằm trong cùng thư mục với tập lệnh mà chúng tôi đang cố gắng sử dụng chúng trong
Để minh họa điều đó, hãy tạo một tệp có tên
# stringLength.py def stringLength[inStr]: return len[inStr]4 tận dụng các mô-đun của chúng tôi
# example1.py import stringLength import stringToLower import stringToUpper some_string = "Hello, Universe!" print[stringLength.stringLength[some_string]] print[stringToLower.stringToLower[some_string]] print[stringToUpper.stringToUpper[some_string]]
Thêm một khoảng trống someFolder
|-- stringLength.py
|-- stringToUpper.py
`-- stringToLower.py
7
Điều gì sẽ xảy ra nếu chúng ta muốn tách các tập lệnh này thành một thư mục để sắp xếp chúng ngăn nắp hơn?
Chà, đó là lúc tệp
someFolder |-- stringLength.py |-- stringToUpper.py `-- stringToLower.py7 phát huy tác dụng
Trước tiên, hãy di chuyển các tập lệnh của chúng ta vào một thư mục con mới và gọi nó là.
# stringLength.py def stringLength[inStr]: return len[inStr]7. Sau đó, tạo một tệp trống trong thư mục đó có tên là
someFolder |-- stringLength.py |-- stringToUpper.py `-- stringToLower.py7
Đây là cấu trúc tệp/thư mục mới của chúng tôi
________số 8
Vì vậy, bây giờ hãy kiểm tra xem chính xác những gì
someFolder |-- stringLength.py |-- stringToUpper.py `-- stringToLower.py7 cho phép chúng ta làm
Hãy tạo một tệp
# stringToUpper.py def stringToUpper[inStr]: return inStr.upper[]0 mới
someFolder |-- stringLength.py |-- stringToUpper.py `-- stringToLower.py0
Vì vậy, bây giờ chúng ta có thể truy cập các hàm chuỗi của mình theo cách này. Điều này thật tuyệt, vì tất cả chúng đều nằm trong một thư mục riêng biệt, nhưng cú pháp chắc chắn không ngắn gọn lắm. Hãy xem liệu chúng ta có thể dọn dẹp mọi thứ một chút bằng cách chỉnh sửa tệp
someFolder |-- stringLength.py |-- stringToUpper.py `-- stringToLower.py7 của mình không
Thêm nhập vào init. py
Mở tệp
someFolder |-- stringLength.py |-- stringToUpper.py `-- stringToLower.py7 của bạn và thực hiện các thay đổi sau
someFolder |-- stringLength.py |-- stringToUpper.py `-- stringToLower.py1
Lưu ý rằng ________ 33 trước tên mô-đun là cần thiết kể từ Python 3 vì nó nghiêm ngặt hơn đối với việc nhập tương đối. https. // stackoverflow. com/questions/12172791/changes-in-import-statement-python3?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
Và vì vậy với điều đó trong
someFolder |-- stringLength.py |-- stringToUpper.py `-- stringToLower.py7 của chúng tôi, giờ đây chúng tôi có thể rút ngắn mã của mình thành
someFolder |-- stringLength.py |-- stringToUpper.py `-- stringToLower.py3
Bây giờ cú pháp ngắn hơn rất nhiều và bạn có thể thấy rằng
# stringLength.py def stringLength[inStr]: return len[inStr]7 đang hoạt động giống như mô-đun của chính nó
Vì vậy, về cơ bản đó là những gì
someFolder |-- stringLength.py |-- stringToUpper.py `-- stringToLower.py7 làm. Nó cho phép bạn xử lý một thư mục như thể nó là một mô-đun python. Sau đó, bạn có thể xác định thêm nội dung nhập bên trong tệp
someFolder |-- stringLength.py |-- stringToUpper.py `-- stringToLower.py7 của mình để làm cho quá trình nhập ngắn gọn hơn hoặc bạn có thể để trống tệp
Gỡ lỗi các vấn đề về # stringToUpper.py
def stringToUpper[inStr]:
return inStr.upper[]
8
Về cơ bản, có 3 mẹo tôi có để gỡ lỗi các sự cố nhập
Sử dụng trình thông dịch tương tác [REPL] để nhập các mô-đun và xem bạn có nhận được những gì bạn mong đợi không
Bắt đầu tập lệnh của bạn với
# stringToUpper.py def stringToUpper[inStr]: return inStr.upper[]
9 và sau đó kiểm tra đầu ra để biết chính xác nơi các mô-đun của bạn được nhập từ đâuSử dụng Pycharm. Khả năng xem xét nội tâm tuyệt vời của Pycharm có nghĩa là bạn sẽ biết ngay liệu mô-đun của mình có được nhập đúng cách hay không vì nó sẽ báo lỗi nếu không. Đôi khi nó cũng sẽ đề xuất sự điều chỉnh thích hợp. Phiên bản cộng đồng là miễn phí và nếu bạn là sinh viên, bạn có thể đăng ký miễn phí TẤT CẢ các sản phẩm của họ
Để biết thêm thông tin về các gói và mô-đun python, bạn có thể xem kiểm tra tài liệu về python trên đó
Bạn cũng có thể xem podcast Talk Python To Me tuyệt vời này với David Beazley, nơi anh ấy thảo luận về chủ đề này, cũng như bài nói chuyện của David về cùng chủ đề