Package trong python

Lập trình Python cơ bản

5.0 (37 đánh giá)
Tạo bởi I Hate Python Team Cập nhật lần cuối 5 năm trước 39.045 lượt xem 38 bình luận
Tác giả/Dịch giả: I Hate Python Team
Học nhanh

Danh sách bài học

01. Giới thiệu ngôn ngữ lập trình Python 02. Cài đặt môi trường Python 03. Cách chạy chương trình Python 04. Cách ghi chú trong Python 05. Biến trong Python 06. Kiểu dữ liệu số trong Python 07. Kiểu dữ liệu chuỗi trong Python - Phần 1 08. Kiểu dữ liệu chuỗi trong Python - Phần 2 09. Kiểu dữ liệu chuỗi trong Python - Phần 3 10. Kiểu dữ liệu chuỗi trong Python - Phần 4 11. Kiểu dữ liệu chuỗi trong Python - Phần 5 12. Kiểu dữ liệu List trong Python - Phần 1 13. Kiểu dữ liệu List trong Python - Phần 2 14. Kiểu dữ liệu Tuple trong Python 15. Sự khác nhau về toán tử của Hashable object và Unhashable object trong Python 16. Kiểu dữ liệu Set trong Python 16. Kiểu dữ liệu Set trong Python – Phần 2 17. Kiểu dữ liệu Dict trong Python - Phần 1 18. Kiểu dữ liệu Dict trong Python - Phần 2 19. Xử lý file trong Python 20. Iteration và một số hàm hỗ trợ cho iteration object trong Python 21. Nhập xuất trong Python - Hàm xuất 22. Nhập xuất trong Python - Hàm nhập 23. Kiểu dữ liệu Boolean trong Python 24. Cấu trúc rẽ nhánh trong Python 25. Vòng lặp While trong Python 26. Vòng lặp For trong Python - Phần 1 27. Vòng lặp For trong Python - Phần 2 28. Kiểu dữ liệu Function trong Python - Sơ lược về hàm 29. Kiểu dữ liệu Function trong Python - Positional và keyword argument 30. Kiểu dữ liệu Function trong Python - Packing và unpacking arguments 31. Kiểu dữ liệu Function trong Python - Biến locals và globals 32. Kiểu dữ liệu Function trong Python - Return 33. Kiểu dữ liệu function trong Python – Yield 34. Kiểu dữ liệu function trong Python – Lambda 35. Kiểu dữ liệu Function trong Python - Functional tools 36. Kiểu dữ liệu Function trong Python - Đệ quy (recursion) 37. Giới thiệu module trong Python 38. Package trong python

Package trong python

Dẫn nhập

Trong bài trước, Kteam đã giới thiệu với bạn MODULE TRONG PYTHON. Ở bài này chúng ra sẽ cùng tìm hiểu về Package trong Python.

Nội dung

Để đọc hiểu bài này tốt nhất bạn cần:

Bạn và Kteam sẽ cùng tìm hiểu những nội dung sau đây

  • Giới thiệu package trong Python
  • Package import cơ bản
  • File __init__.py (initialization)
  • Biến __all__

Giới thiệu package trong Python

Ở bài trước, bạn đã biết về việc import các module. Và dĩ nhiên bạn cũng đã biết rằng các module phải nằm cùng một folder với file Python mà chúng ta chạy lệnh import các module đó. Tuy nhiên, ta thử đặt một câu hỏi như thế này
Chúng ta sẽ xử lí thế nào nếu như có vài trăm module thậm chí lên tới cả nghìn?
Bỏ tất cả các module vào một folder? Có vẻ không hay cho lắm khi việc này ảnh hưởng khá nhiều tới việc tìm kiếm các module nếu như chúng ta cần chỉnh sửa, thay đổi và đôi khi những module có thể trùng tên nhau.
Giải pháp ở đây là ta phân nhóm các module, mỗi nhóm module ta tạo cho nó một folder. Rõ ràng, việc này đã giúp chúng ta dễ dàng xử lí các module hơn.
Nhưng điều này lại nảy sinh vấn đề. Làm sao ta có thể import các module này khi file a bên folder A muốn module b bên file Bfile d nằm trong folder D folder D nằm trong folder C?
Dễ thôi, chúng ta sẽ sử dụng đường dẫn của các module. Trong Python, việc chỉ cho con trăn này đường dẫn các module có hơi một chút thông qua khái niệm Package.
Nôm na, Package là một folder chứa các module, package con (sub package) và bên cạnh đó là file __init__.py.


Package import cơ bản

Chúng ta sẽ đến với những thứ cơ bản của package import. Đầu tiên ta tạo một thư mục như sau:

Và giống như bài trước, main.py chính là file mà chúng ta sẽ chạy. File __init__.py tạm thời ta sẽ đụng đến.

Đầu tiên, ta sẽ chạy file main.py với nội dung sau đây và xem cách mà chúng ta import một module nằm ở trong môt folder.

Kết quả:

Như bạn đã thấy, thay vì truy xuất đường dẫn file một cách thông thường folder\file thì Python sử dụng folder.file. Và dĩ nhiên, bạn hoàn toàn có thể truy xuất file nằm trong folder nằm trong một folder folder\sub_folder\file bằng cách folder.sub_folder.file. Nó tương tự như là package.sub_package.module.

Bạn cũng có thể sử dụng from nếu như thấy cái phần tên của kteam_package quá dài dòng.

Kết quả:

Và đây cũng là cách mà mọi người thường làm và bạn cũng nên theo.

Bạn cũng hoàn toàn có thể import một package. Tuy nhiên, điều này là không nên

Bạn không thể truy xuất các module thông qua package kiểu này.


File __init__.py (initialization)

Mỗi package đều phải chứa file này. Nhìn chung, file này sẽ được tự động chạy khi bạn package được import.

Kết quả:

Một điều thú vị nữa là, các biến khởi tạo trong file __init__.py cũng được khởi tạo đồng thời.

 Kết quả:

Nhìn rộng ra, file __init__.py này nhằm mục đích khởi tạo những thứ cần thiết cho package trong trường hợp bạn import package này. Điển hình là bạn có thể làm một số thứ như thế này

Một điều thú vị nữa là, các biến khởi tạo trong file __init__.py cũng được khởi tạo đồng thời.

Kết quả:

Nếu như lúc nãy khi ta chỉ import mỗi package, ta sẽ không sử dụng được các module. Tuy nhiên bằng một vài xử lí ở file __init__.py, ta có thể sử dụng được các module khi import package.

Bạn để ý ở file __init__.py, tuy nằm cùng với các folder với module_a, module_b, nhưng khi import lại sử dụng package import. Nếu bạn thử chạy file __init__.py chắc chắn sẽ có lỗi xảy ra. Tại sao lại xảy ra điều này thì mình sẽ để lại cho các bạn tự nghiền ngẫm vì nó không quá khó.


Biến __all__

Ở bài trước, nếu muốn import tất nội dung của một module thì ta sử dụng cú pháp from module import *. Bây giờ ta muốn import tất cả các module của một package thì làm sao? Điều này cũng tương tự, tuy nhiên có một chút khác biệt.
Với module, khi bạn import tất cả có nghĩa là tất cả các biến, hàm, lớp,… nói chung là toàn bộ nội dung của module đó (một số trường hợp ngoại lệ, tuy nhiên ta sẽ không đề cập ở đây vì nó rất hiếm gặp). Còn với package ta có thể quy định “tất cả” ở đây là gồm những gì. Mặc định khi bạn không quy ước thì “tất cả” thì “tất cả” bằng không có gì.
Việc quy ước tất cả này liên quan tới biến __all__, và dĩ nhiên, để dễ dàng thì nó thường sẽ nằm trong file __init__.py.
Ta sẽ đến với từng trường hợp một để thấy rõ điều này.
Trường hợp đầu tiên là ta không quy định gì cho “tất cả”

Kết quả:

Quy định “tất cả” gồm module_a

Kết quả:

Còn đây là khi “tất cả” thực sự là tất cả

Kết quả:


Kết luận

Qua bài viết này, Bạn đã biết sơ lược về việc import các package trong Python.

Ở bài viết tiếp theo, ta sẽ tiếp tục tìm hiểu về một số thứ liên quan tới việc import này thông qua một số biến đặc biệt.

Cảm ơn bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.


Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Package trong python dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên likeshare để ủng hộ Kteam và tác giả nhé!


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Tác giả/Dịch giả

Chúng tôi là những người có niềm yêu thích Python và muốn Python được nhiều người biết đến hơn ở Việt Nam.

Khóa học

Lập trình Python cơ bản

Lập trình Python cơ bản

Đánh giá

5.0
37 đánh giá
Đánh giá
5
37
4
3
2
1
Bonzinzin đã đánh giá 7 tháng trước

Cảm ơn Kteam

Legend đã đánh giá 7 tháng trước

nguyentruonghai đã đánh giá khoảng 1 năm trước

Tuyệt vời

thanhjash đã đánh giá 2 năm trước

thangthuycity đã đánh giá 2 năm trước

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
traidephocAI đã bình luận 4 tháng trước

hoàn thành khóa học py cơ bản 12/11/2024

cảm ơn Kteam <3

builehungmanh đã bình luận 7 tháng trước

hoàn thành khoá học 8/14/2024

 

Legend đã bình luận 7 tháng trước

8/2024: Complete

 

Le Rachitique đã bình luận khoảng 1 năm trước

làm mấy bài tập C/C++ về xử lý số nguyên lớn khổ như tró, chạy sang python cái sướng quên lối về :))

Boima12 đã bình luận 2 năm trước

hoàn thành khoá học 01/23/2023 , ước lượng 1 tháng rưỡi.

Không có video.