You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hàm dựng sẵn [`dir()`] (https://docs.python.org/3/library/functions.html#dir) được sử dụng để tìm ra tên mà mô-đun xác định. Nó trả về danh sách các chuỗi được sắp xếp: > & gt; & gt;
194
+
Hàm dựng sẵn [`dir()`] (https://docs.python.org/3/library/functions.html#dir) được sử dụng để tìm ra các tên (gồm cả hàm, biến toàn cục) mà mô-đun đã định nghĩa. Nó trả về danh sách các chuỗi được sắp xếp: >>>
Không có đối số, [`dir()`] (https://docs.python.org/3/library/functions.html#dir) liệt kê các tên bạn đã xác định hiện tại: > & gt; & gt;
220
+
Khi không có đối số, hàm [`dir()`] (https://docs.python.org/3/library/functions.html#dir) liệt kê các tên bạn đã định nghĩa đến vị trí hiện tại: >>>
221
221
222
222
```text
223
223
>>> a = [1, 2, 3, 4, 5]
@@ -227,9 +227,9 @@ Không có đối số, [`dir ()`] (https://docs.python.org/3/library/functions.
Lưu ý rằng nó liệt kê tất cả các loại tên: biến, mô-đun, chức năng, v.v.
230
+
Lưu ý rằng nó liệt kê tất cả các loại tên: tên biến, tên mô-đun, các hàm, v.v.
231
231
232
-
[`dir ()`] (https://docs.python.org/3/library/functions.html#dir) không liệt kê tên của các hàm và biến tích hợp sẵn. Nếu bạn muốn một danh sách, chúng được định nghĩa trong mô-đun chuẩn [`builtins`](https://docs.python.org/3/library/builtins.html#module-builtins): & gt; & gt; & gt;
232
+
[`dir ()`] (https://docs.python.org/3/library/functions.html#dir) không liệt kê tên của các hàm và biến tích hợp sẵn của python. Nếu bạn muốn một danh sách của chúng, thì có thể tìm thấy trong mô-đun chuẩn [`builtins`](https://docs.python.org/3/library/builtins.html#module-builtins):>>>
233
233
234
234
```text
235
235
>>> nhập nội trang
@@ -265,11 +265,11 @@ Lưu ý rằng nó liệt kê tất cả các loại tên: biến, mô-đun, ch
265
265
'zip']
266
266
```
267
267
268
-
### 6.4. Gói
268
+
### 6.4 Các gói
269
269
270
-
Các gói là một cách để cấu trúc không gian tên mô-đun của Python bằng cách sử dụng "tên mô-đun chấm chấm". Ví dụ, tên module `AB` chỉ định một mô-đun con có tên là` B` trong một gói có tên `A`. Cũng giống như việc sử dụng các mô-đun tiết kiệm cho các tác giả của các mô-đun khác nhau phải lo lắng về tên biến toàn cục của nhau, việc sử dụng tên mô-đun chấm chấm lưu các tác giả của các gói đa mô-đun như NumPy hoặc Pillow khỏi phải lo lắng về các tên mô-đun của nhau .
270
+
Các gói là một cách để tổ chức, cấu trúc không gian tên mô-đun của Python bằng cách sử dụng "tên mô-đun và dấu chấm". Ví dụ, khi nói mô-đun có tên `A.B` thì hiểu là một mô-đun con có tên là` B` trong một gói có tên `A`. Đơn giản là, việc sử dụng các mô-đun theo cách này, sẽ giúp cho tác giả của các mô-đun khác nhau không phải lo lắng về vấn đề tên biến toàn cục có thể trùng nhau, việc sử dụng tên mô-đun với dấu chấm như thế này giúp tác giả của các gói rất nhiều mô-đun như NumPy hoặc Pillow khỏi phải lo lắng về các tên mô-đun bị trùng nhau.
271
271
272
-
Giả sử bạn muốn thiết kế một tập hợp các mô-đun \ (một "gói"\) để xử lý thống nhất các file âm thanh và dữ liệu âm thanh. Có nhiều định dạng file âm thanh khác nhau \(thường được nhận dạng bởi phần mở rộng của chúng, ví dụ: `.wav`,` .aiff`, `.au`\), vì vậy bạn có thể cần tạo và duy trì một tập hợp các mô-đun ngày càng tăng cho chuyển đổi giữa các định dạng file khác nhau. Cũng có nhiều thao tác khác nhau mà bạn có thể muốn thực hiện trên dữ liệu âm thanh \(chẳng hạn như trộn, thêm echo, áp dụng hàm cân bằng, tạo hiệu ứng stereo nhân tạo\), ngoài ra bạn sẽ viết luồng mô-đun không bao giờ kết thúc để thực hiện các hoạt động này. Đây là một cấu trúc có thể cho gói của bạn \ (được biểu thị bằng hệ thống file phân cấp\):
272
+
Giả sử bạn muốn thiết kế một tập hợp các mô-đun \(được gọi là một "gói"\) để xử lý một cách thống nhất (cùng giao diện xử lý) các file âm thanh và dữ liệu âm thanh. Có nhiều định dạng file âm thanh khác nhau \(thường được nhận dạng bởi phần mở rộng của chúng, ví dụ: `.wav`,` .aiff`, `.au`\), vì vậy bạn có thể cần tạo và bảo trì một tập hợp các mô-đun ngày càng tăng khi chuyển đổi để xử lý các định dạng file khác nhau. Cũng có nhiều thao tác khác nhau mà bạn có thể muốn thực hiện trên dữ liệu âm thanh \(chẳng hạn như trộn, thêm tiếng vọng, thực hiện chức năng cân bằng, tạo hiệu ứng stereo nhân tạo\), rồi bạn sẽ viết một loạt rất nhiều mô-đun để thực hiện các hoạt động này. Đây là một cấu trúc tham khảo cho gói này \(được biểu thị bằng hệ thống file phân cấp\):
273
273
274
274
```text
275
275
Gói âm thanh / cấp cao nhất
@@ -283,75 +283,75 @@ Gói âm thanh / cấp cao nhất
283
283
auread.py
284
284
auwrite.py
285
285
...
286
-
hiệu ứng / Subpackage cho hiệu ứng âm thanh
286
+
hiệu ứng / Gói con để xử lý hiệu ứng âm thanh
287
287
__init__.py
288
288
echo.py
289
289
surround.py
290
290
revers.py
291
291
...
292
-
bộ lọc / Subpackage cho các bộ lọc
292
+
bộ lọc / Gói con để xử lý các bộ lọc
293
293
__init__.py
294
294
equalizer.py
295
295
vocoder.py
296
296
karaoke.py
297
297
...
298
298
```
299
299
300
-
Khi nhập gói, Python tìm kiếm thông qua các thư mục trên`sys.path` để tìm thư mục con của gói.
300
+
Khi import gói, Python tìm kiếm thông qua các thư mục trong biến`sys.path` để tìm thư mục con của gói.
301
301
302
-
Các file `__init __. Py` được yêu cầu để làm cho Python xử lý các thư mục có chứa các gói; điều này được thực hiện để ngăn các thư mục có tên chung, chẳng hạn như `chuỗi`, từ vô tình ẩn các mô-đun hợp lệ xảy ra sau này trên đường dẫn tìm kiếm mô-đun. Trong trường hợp đơn giản nhất, `__init __. Py` chỉ có thể là một file rỗ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__`, được mô tả sau.
302
+
Các file `__init__.py` phải có trong source của gói giúp cho Python nhận ra các thư mục đó là các gói; điều này được thực hiện để ngăn các thư mục có tên phổ biến, chẳng hạn như `string`, làm ẩn các mô-đun hợp lệ trước đó khi nó được tìm thấy sau trong các đường dẫn tìm kiếm mô-đun. Trong trường hợp đơn giản nhất, `__init__.py`có thể chỉ là một file rỗng, nhưng nó cũng có thể dùng để thực thi mã khởi tạo cho gói hoặc gán lại biến` __all__`, được mô tả sau đây.
303
303
304
-
Người dùng của gói có thể nhập các mô-đun riêng lẻ từ gói, ví dụ:
304
+
Người sử dụng gói có thể import các mô-đun riêng lẻ từ gói, như ví dụ sau:
305
305
306
306
```text
307
307
import sound.effects.echo
308
308
```
309
309
310
-
Điều này tải submodule `sound.effects.echo`. Nó phải được tham chiếu với tên đầy đủ của nó.
310
+
Đoạn trên đây sẽ nạp mô-đun con `sound.effects.echo`, rồi ở đoạn sau đây, sử dụng một hàm của nó. Hàm này phải được tham chiếu bằng tên đầy đủ.
311
311
312
312
```text
313
313
sound.effects.echo.echofilter (đầu vào, đầu ra, độ trễ = 0,7, atten = 4)
314
314
```
315
315
316
-
Một cách khác để nhập mô-đun con là:
316
+
Một cách khác để import mô-đun con là:
317
317
318
318
```text
319
-
từ sound.effects import echo
319
+
from sound.effects import echo
320
320
```
321
321
322
-
Điều này cũng nạp submodule `echo`, và làm cho nó có sẵn mà không có tiền tố gói của nó, vì vậy nó có thể được sử dụng như sau:
322
+
Đoạn trên đây cũng tải mô-đun con `echo`, và sau đó có thể sử dụng nó mà không có tiền tố gói của nó nữa, vì vậy nó có thể được sử dụng như sau:
323
323
324
324
```text
325
325
echo.echofilter (đầu vào, đầu ra, độ trễ = 0,7, atten = 4)
326
326
```
327
327
328
-
Tuy nhiên, một biến thể khác là nhập hàm hoặc biến mong muốn trực tiếp:
328
+
Tuy nhiên, một biến thể khác là nạp trực tiếp hàm hoặc biến mong muốn:
329
329
330
330
```text
331
-
từ echofilter import sound.effects.echo
331
+
from sound.effects.echo import echofilter
332
332
```
333
333
334
-
Một lần nữa, điều này nạp submodule `echo`, nhưng điều này làm cho hàm của nó` echofilter () `có sẵn trực tiếp:
334
+
Cũng giống ở trên, đoạn trên sẽ nạp mô-đun con `echo`, nhưng, sau đó có thể sử dụng trực tiếp hàm `echofilter()` của nó:
335
335
336
336
```text
337
337
echofilter (đầu vào, đầu ra, độ trễ = 0,7, atten = 4)
338
338
```
339
339
340
-
Lưu ý rằng khi sử dụng `từ mục nhập gói`, mục có thể là một mô-đun con (hoặc gói con\) của gói, hoặc một số tên khác được định nghĩa trong gói, như một hàm, lớp hoặc biến. Câu lệnh `import` đầu tiên kiểm tra xem mục được định nghĩa trong gói; nếu không, nó giả định nó là một mô-đun và cố gắng tải nó. Nếu nó không tìm thấy nó, một ngoại lệ [`ImportError`] (https://docs.python.org/3/library/exceptions.html#ImportError) được nâng lên.
340
+
Lưu ý là, khi sử dụng cú pháp `from gói import ABC`, cái mô-đun được chỉ định ABC ở đây, có thể là một mô-đun con (hoặc gói con\) của gói, hoặc một số tên khác được định nghĩa trong gói, như một hàm, lớp hoặc biến. Câu lệnh `import` đầu tiên kiểm tra gói nào là ABC trong đó hay không; nếu không thấy, nó giả định ABC là tên một mô-đun và tiếp tục tìm để nạp nó. Nếu không thấy nữa, nó sẽ bắn ra một ngoại lệ [`ImportError`] (https://docs.python.org/3/library/exceptions.html#ImportError).
341
341
342
-
Ngược lại, khi sử dụng cú pháp như`import item.subitem.subsubitem`, mỗi mục ngoại trừ mục cuối cùng phải là một gói; mục cuối cùng có thể là một mô-đun hoặc một gói nhưng không thể là một lớp hoặc hàm hoặc biến được xác định trong mục trước đó.
342
+
Ngược lại, khi sử dụng cú pháp dạng`import ABC.DEF.GHI`, các phần ABC, DEF trừ phần cuối GHI phải là một gói;n phần cuối cùng GHI có thể là một mô-đun hoặc một gói nhưng không thể là một lớp, hàm hoặc biến được.
343
343
344
-
#### 6.4.1. Nhập \ * Từ gói
344
+
#### 6.4.1. Nạp sử dụng \* từ gói
345
345
346
-
Bây giờ điều gì sẽ xảy ra khi người dùng viết `từ sound.effects import *`? Lý tưởng nhất, người ta sẽ hy vọng rằng điều này bằng cách nào đó đi ra ngoài hệ thống tập tin, tìm thấy submodules có mặt trong gói, và import tất cả. Quá trình này có thể mất nhiều thời gian và việc nhập các mô-đun phụ có thể có các tác dụng phụ không mong muốn chỉ xảy ra khi mô đun phụ được nhập một cách rõ ràng.
346
+
Bây giờ, điều gì sẽ xảy ra khi người dùng viết `from sound.effects import *`? Lý tưởng nhất, chúng ta sẽ hy vọng rằng đoạn này, bằng cách nào đó xem xét hệ thống tập tin từ thư mục của gói, tìm các mô-đun con có mặt trong gói đó, và nạp tất cả chúng vào. Quá trình này có thể mất nhiều thời gian và việc nạp nhiều mô-đun con như thế này có thể gây ra tác dụng phụ từ việc nạp cả những mô-đun không liên quan. Hiệu ứng do các mô-đun không liên quan này đáng lẽ ra chỉ xảy ra khi mô đun đó được nạp một cách rõ ràng.
347
347
348
-
Giải pháp duy nhất là dành cho tác giả gói để cung cấp chỉ mục rõ ràng về gói. Câu lệnh [`import`] (https://docs.python.org/3/reference/simple_stmts.html#import) sử dụng quy ước sau đây: nếu mã` __init __. Py` của một gói định nghĩa một danh sách có tên `__all__`, nó được lấy là danh sách các tên mô-đun cần được nhập khi `từ gói nhập * * gặp phải. Tùy thuộc vào tác giả gói để cập nhật danh sách này khi phiên bản mới của gói được phát hành. Tác giả gói cũng có thể quyết định không hỗ trợ nó, nếu họ không thấy sử dụng để nhập \ * từ gói của họ. Ví dụ, file `sound / effects / __init __. Py` có thể chứa đoạn mã sau:
348
+
Giải pháp duy nhất cho tình huống này là tác giả của gói nên đưa ra một cách rõ ràng về gói. Câu lệnh [`import`] (https://docs.python.org/3/reference/simple_stmts.html#import) sử dụng quy ước sau đây: nếu file `__init__.py` của một gói định nghĩa một biến danh sách có tên `__all__`, nó chính là danh sách các tên mô-đun cần được nạp khi trình thông dịch gặp đoạn `from package import *`. Điều này tùy thuộc vào tác giả gói có cập nhật danh sách này khi phiên bản mới của gói được phát hành. Tác giả gói cũng có thể quyết định không hỗ trợ nó, nếu họ không thấy sử dụng để nhập \ * từ gói của họ. Ví dụ, file `sound / effects / __ init__.py` có thể chứa đoạn mã sau:
349
349
350
350
```text
351
351
__all__ = ["echo", "surround", "reverse"]
352
352
```
353
353
354
-
Điều này có nghĩa là `from sound.effects import *` sẽ nhập ba tên con được đặt tên là `sound`package.
354
+
Điều này có nghĩa là `from sound.effects import *` sẽ nhập ba tên con được đặt tên là `sound`package.
355
355
356
356
Nếu `__all__` không được định nghĩa, câu lệnh` from sound.effects import * `hiện _not_ import tất cả các submodules từ gói` sound.effects` vào không gian tên hiện tại; nó chỉ đảm bảo rằng gói `sound.effects` đã được nhập \ (có thể chạy bất kỳ mã khởi tạo nào trong` __init __. py`\) và sau đó import bất kỳ tên nào được định nghĩa trong gói. Điều này bao gồm bất kỳ tên được định nghĩa \ (và submodules được nạp một cách rõ ràng \) bởi `__init __. Py`. Nó cũng bao gồm bất kỳ mô-đun con nào của gói được tải một cách rõ ràng bằng các câu lệnh [`import`] (https://docs.python.org/3/reference/simple_stmts.html#import) trước đó. Hãy xem xét mã này:
357
357
@@ -390,4 +390,4 @@ Mặc dù tính năng này thường không cần thiết, nhưng nó có thể
390
390
Chú thích
391
391
392
392
|[\ [1 \]] (https://docs.python.org/3/tutorial/modules.html#id1)| Trong các định nghĩa chức năng thực tế cũng là 'các câu lệnh' được 'thi hành'; việc thực hiện định nghĩa hàm cấp mô-đun sẽ nhập tên hàm vào bảng ký hiệu toàn cục của mô-đun. |
0 commit comments