Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 300b73f

Browse files
committed
Sửa lỗi code block hiển thị sai
1 parent c935edf commit 300b73f

1 file changed

Lines changed: 51 additions & 51 deletions

File tree

6.-modules.md

Lines changed: 51 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Nếu bạn thoát khỏi trình thông dịch Python và quay lại nó, các
77

88
Một mô-đun là một file chứa các định nghĩa và câu lệnh Python. Tên file là tên mô-đun có thêm hậu tố `.py`. Trong mô-đun, tên của mô-đun \ (dưới dạng chuỗi \) được lưu sẵn trong giá trị của biến toàn cục`__name__`. Ví dụ, sử dụng trình soạn thảo văn bản yêu thích của bạn để tạo một file có tên là `fibo.py` trong thư mục hiện tại với các nội dung sau:
99

10-
`` `text
10+
```text
1111
# Mô-đun số Fibonacci
1212
1313
def fib (n): # viết chuỗi Fibonacci lên đến n
@@ -24,13 +24,13 @@ def fib2 (n): # trả về dãy Fibonacci đến n
2424
result.append (b)
2525
a, b = b, a + b
2626
return result
27-
`` `
27+
```
2828

2929
Bây giờ vào trình thông dịch Python và import mô-đun này bằng lệnh sau: & gt; & gt; & gt;
3030

3131
```text
3232
>>> import fibo
33-
`` `
33+
```
3434

3535
Chỗ này không đưa tên của các hàm được định nghĩa trong `fibo` trực tiếp vào trong bảng ký hiệu hiện tại; nó chỉ đưa tên mô-đun 'fibo` thôi. Sau đó sử dụng tên mô-đun, bạn có thể truy cập các hàm: & gt; & gt; & gt;
3636

@@ -41,15 +41,15 @@ Chỗ này không đưa tên của các hàm được định nghĩa trong `fibo
4141
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
4242
>>> fibo .__ name__
4343
'fibo'
44-
`` `
44+
```
4545

4646
Nếu bạn định sử dụng hàm thường xuyên, bạn có thể gán nó cho một tên cục bộ: & gt; & gt; & gt;
4747

4848
```text
4949
>>> fib = fibo.fib
5050
>>> fib (500)
5151
1 1 2 3 5 8 13 21 34 55 89 144 233 377
52-
`` `
52+
```
5353

5454
### 6.1. Thông tin thêm về Mô-đun
5555

@@ -65,39 +65,39 @@ Có một biến thể của câu lệnh [`import`] (https://docs.python.org/3/r
6565
>>> from fibo import fib, fib2
6666
>>> fib (500)
6767
1 1 2 3 5 8 13 21 34 55 89 144 233 377
68-
`` `
68+
```
6969

7070
Cách này không đưa tên mô-đun vào những thứ được import vào bảng symbol cục bộ \ (ví dụ, trong ví dụ, `fibo` không được sẽ không được thêm vào bảng \).
7171

7272
Thậm chí còn có một biến thể để import tất cả các tên mà mô-đun đã định nghĩa nữa: & gt; & gt; & gt;
7373

74-
`` `text
74+
```text
7575
>>> from fibo import *
7676
>>> fib (500)
7777
1 1 2 3 5 8 13 21 34 55 89 144 233 377
78-
`` `
78+
```
7979

8080
Đoạn này sẽ nhập tất cả các định nghĩa trừ các tên bắt đầu bằng dấu gạch dưới \ (`_` \). Trong hầu hết các trường hợp, các lập trình viên Python không sử dụng cách này vì nó sẽ đưa một số tên không được hiểu rõ vào trình thông dịch, dẫn đến có nguy cơ một số tên trùng bị ghi đè giá trị hay mất giá trị được gán lúc trước.
8181

8282
Lưu ý rằng nói chung, việc import sử dụng `*` từ một mô-đun hoặc gói được không được khuyến khích, vì nó làm cho code trở nên khó đọc. Tuy nhiên, bạn có thể sử dụng nó để đỡ phải gõ nhiều khi làm việc ở chế độ tương tác.
8383

8484
Nếu tên mô-đun được theo sau bởi [`as`] (https://docs.python.org/3/reference/compound_stmts.html#as), thì tên phía sau [` as`] (https: // docs. python.org/3/reference/compound_stmts.html#as) được liên kết trực tiếp với mô-đun đã nhập. & gt; & gt; & gt;
8585

86-
`` `text
86+
```text
8787
>>> import fibo như fib
8888
>>> fib.fib (500)
8989
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
90-
`` `
90+
```
9191

9292
Điều này là để import các mô-đun như cách mà `import fibo` làm, chỉ có sự khác biệt duy nhất giờ có một cái tên là ` fib` được định nghĩa thôi.
9393

9494
Nó cũng có thể dùng được khi sử dụng [`from`] (https://docs.python.org/3/reference/simple_stmts.html#from) với các tác dụng tương tự: & gt; & gt; & gt;
9595

96-
`` `text
96+
```text
9797
>>> từ fibo import fib là fibonacci
9898
>>> fibonacci (500)
9999
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
100-
`` `
100+
```
101101

102102
Chú thích
103103

@@ -107,31 +107,31 @@ Vì lý liên quan đến tính hiệu quả, mỗi mô-đun chỉ được impo
107107

108108
Khi bạn chạy một mô-đun Python với
109109

110-
`` `text
110+
```text
111111
python fibo.py <arguments>
112-
`` `
112+
```
113113

114114
code trong mô-đun sẽ được thực hiện, sẽ giống như khi bạn import nó, nhưng với giá trị `__name__` được gán là ` "__main __" `. Điều đó có nghĩa là bằng cách thêm mã này vào cuối mô-đun của bạn:
115115

116-
`` `text
116+
```text
117117
nếu __name__ == "__main__":
118118
import sys
119119
fib (int (sys.argv [1]))
120-
`` `
120+
```
121121

122122
bạn có thể làm cho file vừa có thể được sử dụng làm script cũng vừa là một mô-đun, bởi vì code cái đọc giá trị từ dòng lệnh chỉ chạy nếu mô-đun được thực thi dưới dạng file "main":
123123

124-
`` `text
124+
```text
125125
$ python fibo.py 50
126126
1 1 2 3 5 8 13 21 34
127-
`` `
127+
```
128128

129129
Nếu mô-đun được import, thì code sẽ không chạy: & gt; & gt; & gt;
130130

131-
`` `text
131+
```text
132132
>>> import fibo
133133
>>>
134-
`` `
134+
```
135135

136136
Điều này thường được sử dụng cho việc hoặc là cung cấp một giao diện người dùng thuận tiện cho một mô-đun, hoặc cho mục đích kiểm thử \ (chạy mô-đun như một scrip thực hiện một loạt test case \).
137137

@@ -168,7 +168,7 @@ Một số mẹo cho các chuyên gia:
168168

169169
Python đi kèm với một thư viện các mô-đun chuẩn, được mô tả trong một tài liệu riêng biệt, Tham khảo Thư viện Python \ ("Tham khảo Thư viện" sau đây \). Một số mô-đun được tích hợp vào trình thông dịch; chúng cung cấp quyền truy cập vào các hoạt động không phải là một phần cốt lõi của ngôn ngữ nhưng vẫn được tích hợp sẵn, hoặc để có hiệu quả hoặc cung cấp quyền truy cập vào các nguyên bản của hệ điều hành như các cuộc gọi hệ thống. Tập hợp các mô-đun như vậy là một tùy chọn cấu hình cũng phụ thuộc vào nền tảng cơ bản. Ví dụ, mô-đun [`winreg`] (https://docs.python.org/3/library/winreg.html#module-winreg) chỉ được cung cấp trên các hệ thống Windows. Một mô-đun đặc biệt đáng chú ý: [`sys`] (https://docs.python.org/3/library/sys.html#module-sys), được xây dựng trong mọi trình thông dịch Python. Các biến `sys.ps1` và` sys.ps2` xác định các chuỗi được sử dụng làm lời nhắc chính và phụ: & gt; & gt; & gt;
170170

171-
`` `text
171+
```text
172172
>>> import sys
173173
>>> sys.ps1
174174
'>>>'
@@ -178,22 +178,22 @@ Python đi kèm với một thư viện các mô-đun chuẩn, được mô tả
178178
C> in ('Yuck!')
179179
Kinh quá!
180180
C>
181-
`` `
181+
```
182182

183183
Hai biến này chỉ được xác định nếu trình thông dịch ở chế độ tương tác.
184184

185185
Biến `sys.path` là một danh sách các chuỗi xác định đường dẫn tìm kiếm của trình thông dịch cho các mô-đun. Nó được khởi tạo cho một đường dẫn mặc định được lấy từ biến môi trường [`PYTHONPATH`] (https://docs.python.org/3/using/cmdline.html#envvar-PYTHONPATH), hoặc từ một mặc định dựng sẵn nếu [ `PYTHONPATH`] (https://docs.python.org/3/using/cmdline.html#envvar-PYTHONPATH) chưa được đặt. Bạn có thể sửa đổi nó bằng cách sử dụng các hoạt động danh sách chuẩn: & gt; & gt; & gt;
186186

187-
`` `text
187+
```text
188188
>>> import sys
189189
>>> sys.path.append ('/ ufs / guido / lib / python')
190-
`` `
190+
```
191191

192192
### 6.3. Hàm [`dir ()`] (https://docs.python.org/3/library/functions.html#dir) Hàm
193193

194194
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; & gt;
195195

196-
`` `text
196+
```text
197197
>>> import fibo, sys
198198
>>> dir (fibo)
199199
['__name__', 'fib', 'fib2']
@@ -215,23 +215,23 @@ Hàm dựng sẵn [`dir ()`] (https://docs.python.org/3/library/functions.html#d
215215
'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit',
216216
'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout',
217217
'thread_info', 'version', 'version_info', 'warnoptions']
218-
`` `
218+
```
219219

220220
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; & gt;
221221

222-
`` `text
222+
```text
223223
>>> a = [1, 2, 3, 4, 5]
224224
>>> import fibo
225225
>>> fib = fibo.fib
226226
>>> dir ()
227227
['__builtins__', '__name__', 'a', 'fib', 'fibo', 'sys']
228-
`` `
228+
```
229229

230230
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.
231231

232232
[`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;
233233

234-
`` `text
234+
```text
235235
>>> nhập nội trang
236236
>>> dir (nội trang)
237237
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException',
@@ -263,15 +263,15 @@ Lưu ý rằng nó liệt kê tất cả các loại tên: biến, mô-đun, ch
263263
'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice',
264264
'được sắp xếp', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars',
265265
'zip']
266-
`` `
266+
```
267267

268268
### 6.4. Gói
269269

270270
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 .
271271

272272
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 \):
273273

274-
`` `text
274+
```text
275275
Gói âm thanh / cấp cao nhất
276276
__init__.py Khởi tạo gói âm thanh
277277
định dạng / Gói con để chuyển đổi định dạng file
@@ -295,47 +295,47 @@ Gói âm thanh / cấp cao nhất
295295
vocoder.py
296296
karaoke.py
297297
...
298-
`` `
298+
```
299299

300300
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.
301301

302302
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.
303303

304304
Người dùng của gói có thể nhập các mô-đun riêng lẻ từ gói, ví dụ:
305305

306-
`` `text
306+
```text
307307
import sound.effects.echo
308-
`` `
308+
```
309309

310310
Đ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ó.
311311

312-
`` `text
312+
```text
313313
sound.effects.echo.echofilter (đầu vào, đầu ra, độ trễ = 0,7, atten = 4)
314-
`` `
314+
```
315315

316316
Một cách khác để nhập mô-đun con là:
317317

318-
`` `text
318+
```text
319319
từ sound.effects import echo
320-
`` `
320+
```
321321

322322
Đ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:
323323

324-
`` `text
324+
```text
325325
echo.echofilter (đầu vào, đầu ra, độ trễ = 0,7, atten = 4)
326-
`` `
326+
```
327327

328328
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:
329329

330-
`` `text
330+
```text
331331
từ echofilter import sound.effects.echo
332-
`` `
332+
```
333333

334334
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:
335335

336-
`` `text
336+
```text
337337
echofilter (đầu vào, đầu ra, độ trễ = 0,7, atten = 4)
338-
`` `
338+
```
339339

340340
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.
341341

@@ -347,21 +347,21 @@ Bây giờ điều gì sẽ xảy ra khi người dùng viết `từ sound.effec
347347

348348
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:
349349

350-
`` `text
350+
```text
351351
__all__ = ["echo", "surround", "reverse"]
352-
`` `
352+
```
353353

354354
Đ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.
355355

356356
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:
357357

358-
`` `text
358+
```text
359359
import sound.effects.echo
360360
import sound.effects.surround
361361
từ import sound.effects *
362-
`` `
362+
```
363363

364-
Trong ví dụ này, các mô đun `echo` và` surround` được nhập vào không gian tên hiện tại vì chúng được định nghĩa trong gói `sound.effects` khi câu lệnh` from ... import` được thi hành. \ (Điều này cũng hoạt động khi `` `` `` được xác định.\)
364+
Trong ví dụ này, các mô đun `echo`` surround` được nhập vào không gian tên hiện tại vì chúng được định nghĩa trong gói `sound.effects` khi câu lệnh` from ... import` được thi hành. \ (Điều này cũng hoạt động khi ```` `` được xác định.\)
365365

366366
Mặc dù các mô-đun nhất định được thiết kế để chỉ xuất các tên theo một số mẫu nhất định khi bạn sử dụng `import *`, nó vẫn được coi là thực hành không tốt trong mã sản xuất.
367367

@@ -373,11 +373,11 @@ Khi các gói được cấu trúc thành các gói con \ (như với gói `soun
373373

374374
Bạn cũng có thể viết import tương đối, với dạng `from module import name` của câu lệnh import. Các mục nhập này sử dụng các dấu chấm đầu để chỉ ra các gói hiện tại và cha mẹ có liên quan đến việc nhập tương đối. Từ ví dụ `surround`module, bạn có thể sử dụng:
375375

376-
`` `text
376+
```text
377377
từ . import echo
378378
từ .. định dạng nhập
379379
từ bộ cân bằng import ..filters
380-
`` `
380+
```
381381

382382
Lưu ý rằng import tương đối dựa trên tên của mô-đun hiện tại. Vì tên của mô-đun chính luôn là `" __main __ "`, các mô-đun được sử dụng làm mô đun chính của ứng dụng Python phải luôn sử dụng import tuyệt đối.
383383

0 commit comments

Comments
 (0)