Nhập Python so với từ hiệu suất nhập

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 ngầm 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 cảnh báo 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, điều đầ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 tôi 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

Sự 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

Cái nào nhập nhanh hơn hoặc từ nhập?

Có một sự khác biệt, bởi vì trong phiên bản nhập x có hai tra cứu tên. một cho tên mô-đun và thứ hai cho tên chức năng; . Như bạn có thể thấy, sử dụng biểu mẫu từ x nhập y nhanh hơn một chút .

Sự khác biệt giữa nhập và từ nhập trong Python là gì?

Nếu bạn chỉ sử dụng câu lệnh nhập thì bạn có thể sử dụng tất cả các chức năng của mô-đun đó nhưng nếu bạn sử dụng từ và nhập cùng nhau thì bạn chỉ có thể sử dụng chức năng cụ thể

Cách tốt nhất để nhập bằng Python là gì?

Hướng dẫn kiểu nhập . Viết nhập khẩu trên các dòng riêng biệt. Tổ chức nhập khẩu thành các nhóm. nhập thư viện tiêu chuẩn đầu tiên, sau đó nhập của bên thứ ba và cuối cùng là nhập thư viện hoặc ứng dụng cục bộ. Đặt hàng nhập khẩu theo thứ tự bảng chữ cái trong mỗi nhóm. Keep imports at the top of the file. Write imports on separate lines. Organize imports into groups: first standard library imports, then third-party imports, and finally local application or library imports. Order imports alphabetically within each group.

Thứ tự nhập khẩu có quan trọng với Python không?

Lệnh nhập không thành vấn đề . Nếu một mô-đun phụ thuộc vào các mô-đun khác, thì nó cần phải tự nhập các mô-đun đó. Python xử lý từng. py dưới dạng một đơn vị độc lập theo như nội dung hiển thị trong tệp đó.

Chủ Đề