Kiểm tra Python nếu nhập khẩu được sử dụng

Python được tổ chức thành các mô-đun và gói. Một mô-đun là một tệp Python và một gói là một tập hợp các mô-đun. Xem xét ví dụ sau về nhập mô-đun

import random
random.randint[1,10]

from random import randint
randint[1,10]
8 là một mô-đun tích hợp sẵn của Python. Trong dòng đầu tiên, nó nhập mô-đun
from random import randint
randint[1,10]
9 và làm cho nó có sẵn để sử dụng, sau đó nó truy cập vào
import pandas
pandas.DataFrame[]
0. Nếu bạn mở một IDE và gỡ lỗi quá trình nhập, bạn sẽ thấy mã nằm trong tệp
import pandas
pandas.DataFrame[]
1

Bạn cũng có thể nhập

import pandas
pandas.DataFrame[]
2 như thế này

from random import randint
randint[1,10]

Hãy xem một ví dụ từ một gói

import pandas
pandas.DataFrame[]

Thoạt nhìn, bạn thực sự không thể biết đó là mô-đun hay gói. Nhưng nếu bạn gỡ lỗi quá trình nhập, nó sẽ chuyển hướng bạn đến

import pandas
pandas.DataFrame[]
3 thay vì
import pandas
pandas.DataFrame[]
4. Một gói chứa các mô-đun con hoặc đệ quy, các gói con và
import pandas
pandas.DataFrame[]
5 là điểm vào của gói

Nhưng đó không phải là cách duy nhất, các chức năng như

import pandas
pandas.DataFrame[]
6 và
import pandas
pandas.DataFrame[]
7 tích hợp cũng có thể được sử dụng

from random import randint
randint[1,10]
3

Bưu kiện. __trong đó__. py

Vậy

import pandas
pandas.DataFrame[]
5 là gì?

Gói Python thông thường chứa tệp

import pandas
pandas.DataFrame[]
5. Khi gói được nhập, tệp
import pandas
pandas.DataFrame[]
5 này được thực thi hoàn toàn và các đối tượng mà nó xác định được liên kết với các tên trong không gian tên của gói. Tập tin này có thể để trống

Hãy xem một ví dụ. Tôi có một cấu trúc thư mục như thế này.

from random import randint
randint[1,10]
31 là gói của tôi và
from random import randint
randint[1,10]
32 là mô hình con

cấu trúc thư mục [Được tạo bởi Xiaoxu Gao]

Bên trong

from random import randint
randint[1,10]
33 , tôi có một biến
from random import randint
randint[1,10]
34 mà tôi muốn sử dụng trong
from random import randint
randint[1,10]
35. Tôi sẽ tạo một số phiên bản của
import pandas
pandas.DataFrame[]
5 và xem nó ảnh hưởng như thế nào đến việc nhập vào
from random import randint
randint[1,10]
35

from random import randint
randint[1,10]
4

Trường hợp 1. tập tin

from random import randint
randint[1,10]
38 trống

Vì tệp

import pandas
pandas.DataFrame[]
5 trống khi chúng tôi nhập
from random import randint
randint[1,10]
31 , không có mô-đun con nào được nhập, do đó, nó không biết sự tồn tại của
from random import randint
randint[1,10]
32. Nếu chúng ta nhập
from random import randint
randint[1,10]
32 một cách rõ ràng bằng cách sử dụng
from random import randint
randint[1,10]
43 thì mọi thứ bên trong
from random import randint
randint[1,10]
33 sẽ được nhập. Nhưng sau đó, chúng tôi không thực sự nhập gói mà nhập mô-đun. Như bạn có thể tưởng tượng, nếu gói của bạn có nhiều mô-đun con, bạn cần nhập từng mô-đun một cách rõ ràng, điều này có thể khá tẻ nhạt

import pandas
pandas.DataFrame[]
2

Trường hợp2. nhập các mô hình con trong tệp

from random import randint
randint[1,10]
38

Thay vì để trống, chúng tôi nhập mọi thứ từ

from random import randint
randint[1,10]
32 vào tệp
import pandas
pandas.DataFrame[]
5. Sau đó,
from random import randint
randint[1,10]
48 trong tệp
from random import randint
randint[1,10]
35 sẽ nhận ra các biến trong
from random import randint
randint[1,10]
33 và bạn có thể gọi trực tiếp
import pandas
pandas.DataFrame[]
21 mà không cần biết nó đến từ mô-đun nào

import pandas
pandas.DataFrame[]
0

Bạn có thể đã nhận thấy dấu chấm trước khi

from random import randint
randint[1,10]
32. Đó là một lối tắt bảo nó tìm kiếm trong gói hiện tại. Đó là một ví dụ về nhập khẩu tương đối. Nhập tuyệt đối tương đương sẽ đặt tên rõ ràng cho gói hiện tại như
import pandas
pandas.DataFrame[]
23

Có một báo trước mặc dù. Nếu một mô hình con khác trong gói chứa cùng một biến, thì mô hình con được nhập sau sẽ ghi đè lên mô hình con trước đó

Ưu điểm của việc có một

import pandas
pandas.DataFrame[]
5 không trống là làm cho tất cả các mô hình con đã có sẵn cho máy khách khi họ nhập gói, vì vậy mã máy khách trông gọn gàng hơn

Python tìm các mô-đun và gói như thế nào?

Hệ thống tìm kiếm các mô-đun và gói trong Python được gọi là Máy nhập khẩu, bao gồm các công cụ tìm, trình tải, bộ đệm và bộ điều phối

Máy móc nhập khẩu [Tạo bởi Xiaoxu Gao]
  1. Mô-đun tìm kiếm trong bộ đệm ẩn
    import pandas
    pandas.DataFrame[]
    25

Mỗi khi bạn nhập một mô-đun, thứ đầu tiên được tìm kiếm là từ điển

import pandas
pandas.DataFrame[]
26. Các khóa là tên mô-đun và các giá trị là chính mô-đun thực tế.
import pandas
pandas.DataFrame[]
26 là một từ điển được lưu trong bộ nhớ cache, nếu mô-đun ở đó thì nó sẽ được trả về ngay lập tức, nếu không, nó sẽ được tìm kiếm trong hệ thống

Quay lại ví dụ trước. Khi chúng tôi nhập

from random import randint
randint[1,10]
31, hai mục được thêm vào
import pandas
pandas.DataFrame[]
26. Mô-đun cấp cao nhất
import pandas
pandas.DataFrame[]
5 và mô-đun con
from random import randint
randint[1,10]
33

import pandas
pandas.DataFrame[]
1

Nếu chúng ta nhập hai lần, lần nhập thứ hai sẽ đọc từ bộ đệm. Nhưng nếu chúng ta cố tình xóa mục từ từ điển

import pandas
pandas.DataFrame[]
26, thì lần nhập thứ hai sẽ trả về một đối tượng mô-đun mới

import pandas
pandas.DataFrame[]
3

2. Thông số mô-đun tìm kiếm

Nếu mô-đun không có trong từ điển

import pandas
pandas.DataFrame[]
26, thì mô-đun đó cần được tìm kiếm trong danh sách đối tượng công cụ tìm đường dẫn meta có các phương thức
import pandas
pandas.DataFrame[]
04 của chúng để xem liệu mô-đun có thể được nhập hay không

import pandas
pandas.DataFrame[]
6

import pandas
pandas.DataFrame[]
05 được sử dụng cho các mô-đun tích hợp.
import pandas
pandas.DataFrame[]
06 được sử dụng để định vị các mô-đun bị đóng băng.
import pandas
pandas.DataFrame[]
07 chịu trách nhiệm tìm các mô-đun nằm ở một trong những đường dẫn này

  • import pandas
    pandas.DataFrame[]
    08
  • import pandas
    pandas.DataFrame[]
    09
  • import pandas
    pandas.DataFrame[]
    10
  • import pandas
    pandas.DataFrame[]
    11

Hãy xem có gì trong

import pandas
pandas.DataFrame[]
08

from random import randint
randint[1,10]
0

import pandas
pandas.DataFrame[]
07 sẽ sử dụng phương pháp
import pandas
pandas.DataFrame[]
14 để tìm kiếm
import pandas
pandas.DataFrame[]
15 của mô-đun. Mỗi mô-đun có một đối tượng đặc tả là siêu dữ liệu của mô-đun. Một trong những thuộc tính là
import pandas
pandas.DataFrame[]
16.
import pandas
pandas.DataFrame[]
16 cho biết máy móc nhập khẩu sử dụng bộ tải nào trong khi tạo mô-đun

from random import randint
randint[1,10]
1

3. Tải mô-đun

Sau khi tìm thấy thông số mô-đun, máy nhập sẽ sử dụng thuộc tính trình tải để khởi tạo mô-đun và lưu trữ mô-đun trong từ điển

import pandas
pandas.DataFrame[]
26. Bạn có thể đọc mã giả này để hiểu điều gì xảy ra trong quá trình tải phần nhập

Nhập vòng tròn Python

Cuối cùng, hãy xem xét một vấn đề thú vị về nhập khẩu. Nhập Khẩu Thông Tư. Nhập vòng tròn xảy ra khi hai hoặc nhiều mô-đun phụ thuộc vào nhau. Trong ví dụ này,

import pandas
pandas.DataFrame[]
19 phụ thuộc vào
from random import randint
randint[1,10]
33 và
from random import randint
randint[1,10]
33 phụ thuộc vào
import pandas
pandas.DataFrame[]
19

phụ thuộc mô-đun [Tạo bởi Xiaoxu Gao]
from random import randint
randint[1,10]
2

Python không thể tìm thấy thuộc tính

import pandas
pandas.DataFrame[]
33 từ mô-đun
from random import randint
randint[1,10]
32. Vậy tại sao điều này xảy ra? . Khi
import pandas
pandas.DataFrame[]
35, Python đi qua
from random import randint
randint[1,10]
33 từng dòng một. Điều đầu tiên nó tìm thấy là
import pandas
pandas.DataFrame[]
37 , vì vậy nó sẽ nhập
import pandas
pandas.DataFrame[]
19. Dòng đầu tiên là nhập
from random import randint
randint[1,10]
32, nhưng vì Python chưa đi qua mọi thứ trong
from random import randint
randint[1,10]
33, nên chúng tôi nhận được một đối tượng được khởi tạo một nửa. Khi chúng ta gọi
import pandas
pandas.DataFrame[]
61 mà python không nhìn thấy, nó sẽ đưa ra một ngoại lệ AttributeError

Nhập khẩu tròn [Tạo bởi Xiaoxu Gao]

Vậy cách khắc phục nhập vòng như thế nào? . Hầu hết thời gian, sự phụ thuộc không thực sự cần thiết. Một giải pháp đơn giản là hợp nhất cả hai chức năng thành một mô-đun duy nhất

from random import randint
randint[1,10]
3

Đôi khi, mô-đun hợp nhất có thể trở nên rất lớn. Một giải pháp khác là trì hoãn việc nhập

import pandas
pandas.DataFrame[]
62 để nhập khi cần. Điều này có thể được thực hiện bằng cách đặt
import pandas
pandas.DataFrame[]
37 trong hàm
import pandas
pandas.DataFrame[]
64. Trong trường hợp này, Python sẽ tải tất cả các chức năng trong
from random import randint
randint[1,10]
33 và sau đó chỉ tải
import pandas
pandas.DataFrame[]
19 khi cần

from random import randint
randint[1,10]
4

Nhiều cơ sở mã sử dụng nhập hoãn lại không nhất thiết phải giải quyết vấn đề phụ thuộc vòng tròn mà để tăng tốc thời gian khởi động. Một ví dụ từ Airflow là không viết mã cấp cao nhất không cần thiết để tạo DAG. Điều này là do tác động của tốc độ phân tích cú pháp mã cấp cao nhất đối với cả hiệu suất và khả năng mở rộng của Airflow

from random import randint
randint[1,10]
5

Phần kết luận

Như mọi khi, tôi hy vọng bạn thấy bài viết này hữu ích và đầy cảm hứng. Chúng tôi coi nhiều thứ trong Python là điều hiển nhiên, nhưng thật thú vị khi khám phá cách nó hoạt động bên trong. Hy vọng bạn thích nó, Chúc mừng

Làm cách nào để kiểm tra nhập Python?

Bạn có thể kiểm tra đường dẫn nhập của Python bằng cách in sys. .
Thư mục của tập lệnh hiện tại [hoặc thư mục hiện tại nếu không có tập lệnh nào, chẳng hạn như khi Python đang chạy tương tác]
Nội dung của biến môi trường PYTHONPATH
Các thư mục phụ thuộc vào cài đặt khác

Tại sao nhập * không được khuyến nghị?

Sử dụng nhập * trong các chương trình python được coi là một thói quen xấu vì theo cách này, bạn đang làm ô nhiễm không gian tên của mình , câu lệnh nhập * sẽ nhập tất cả .

Điều gì thực sự xảy ra khi câu lệnh nhập được sử dụng trong Python?

Để truy cập một mô-đun trong Python, bạn có thể sử dụng câu lệnh nhập. Câu lệnh nhập đọc mã trong mô-đun Python và cho phép bạn sử dụng mã đó trong một tệp khác .

__ tất cả __ trong Python là gì?

Danh sách các chuỗi xác định biến nào phải được nhập vào tệp khác được gọi là __all__ trong Python.

Chủ Đề