__init__.py trăn

__init__. các tệp py được yêu cầu để làm cho Python coi các thư mục là các gói chứa; . Trong trường hợp đơn giản nhất, __init__. py chỉ có thể là một tệp trống, nhưng nó cũng có thể thực thi mã khởi tạo cho gói hoặc đặt biến __all__. Một ví dụ về __init__. tập tin py

from math import sin
from my_package import my_func

Đoạn mã trên đảm bảo rằng các hàm đã nhập có sẵn trong các mô-đun của gói khi nó được nhập như được định nghĩa trong __init__. tập tin py. Bạn có thể đọc thêm về __init__. py tại http. //mikegrouchy. com/blog/2012/05/be-pythonic-__init__py. html

__init__.py trăn

Cập nhật ngày 16-Dec-2019 06. 14. 02

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 # stringLength.py def stringLength(inStr): return len(inStr) 8?

Tạo một gói với

# stringLength.py

def stringLength(inStr):
    return len(inStr)
8 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

# stringLength.py

def stringLength(inStr):
    return len(inStr)
8và 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 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

# stringLength.py

def stringLength(inStr):
    return len(inStr)
8, 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 # stringLength.py def stringLength(inStr): return len(inStr) 8

Đ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

# stringLength.py

def stringLength(inStr):
    return len(inStr)
8 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à
# stringLength.py

def stringLength(inStr):
    return len(inStr)
8

Đây là cấu trúc tệp/thư mục mới của chúng tôi

someFolder
|-- string_func
|   |-- __init__.py
|   |-- stringToUpper.py
|   |-- stringToLower.py
|   `-- strengthLength.py
`-- example1.py

Vì vậy, bây giờ hãy kiểm tra chính xác những gì

# stringLength.py

def stringLength(inStr):
    return len(inStr)
8 cho phép chúng tôi làm

Hãy tạo một tệp

# stringToUpper.py

def stringToUpper(inStr):
    return inStr.upper()
0 mới

# stringLength.py

def stringLength(inStr):
    return len(inStr)
1

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

# stringLength.py

def stringLength(inStr):
    return len(inStr)
8 của mình không

Thêm nhập vào init. py

Mở tệp

# stringLength.py

def stringLength(inStr):
    return len(inStr)
8 của bạn và thực hiện các thay đổi sau

# stringLength.py

def stringLength(inStr):
    return len(inStr)
2

Lưu ý rằng ________ 43 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

# stringLength.py

def stringLength(inStr):
    return len(inStr)
8 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

# stringLength.py

def stringLength(inStr):
    return len(inStr)
4

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ì

# stringLength.py

def stringLength(inStr):
    return len(inStr)
8 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
# stringLength.py

def stringLength(inStr):
    return len(inStr)
8 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

  1. 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

  2. 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ừ đâu

  3. Sử 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ủ đề

__ init __ py có cần thiết trong Python không?

Nếu bạn đã thiết lập. py trong dự án của bạn và bạn sử dụng find_packages() trong đó, cần phải có __init__. py trong mọi thư mục để các gói được tự động tìm thấy .

Có gì bên trong __ init __ py?

__init__. py làm cho Python coi các thư mục chứa nó là mô-đun . Ngoài ra, đây là tệp đầu tiên được tải trong một mô-đun, vì vậy bạn có thể sử dụng nó để thực thi mã mà bạn muốn chạy mỗi khi mô-đun được tải hoặc chỉ định các mô-đun con sẽ được xuất.

Có nên để trống __ init __ py không?

Để lại __init__. py trống được coi là bình thường và thậm chí là một phương pháp hay, nếu các mô-đun và gói con của gói không cần chia sẻ bất kỳ mã nào .

Mục đích của tệp _init __ py là gì?

Mục đích của __init__. py là để chỉ định các tệp Python mà bạn muốn đưa vào mô-đun của mình . Tối thiểu, thông thường bạn sẽ có một tệp Python, nhưng bạn có thể có nhiều hơn hoặc ít hơn tùy thuộc vào độ phức tạp của mô-đun mà bạn đang phát triển.