Tuyên bố with
trong Python được sử dụng trong xử lý ngoại lệ để làm cho mã sạch hơn và dễ đọc hơn nhiều. Nó đơn giản hóa việc quản lý các tài nguyên chung như luồng tệp. Quan sát ví dụ mã sau về cách sử dụng câu lệnh with
làm cho mã sạch hơn. statement in Python is used in exception handling to make the code cleaner and much more readable. It simplifies the management of common resources like file streams. Observe the following code example on how the use of with
statement makes code cleaner.
file
=
open
[
________________________'w'
____9
file
with
1with
2]
file
with
5
file
=
open
[
________________________'w'
____9
file
4file
5
file
6file
with
1file
9]
=
1file
5
file
6file
with
5
=
6open
[
'file_path'
,
'w'
open
2file
file
5
file
6file
with
1with
2]
Lưu ý rằng không giống như hai triển khai đầu tiên, không cần phải gọi [
0 khi sử dụng câu lệnh with
. Bản thân tuyên bố with
đảm bảo mua lại và phát hành các tài nguyên thích hợp. Một ngoại lệ trong cuộc gọi [
3 trong quá trình triển khai đầu tiên có thể ngăn tệp đóng đúng cách có thể giới thiệu một số lỗi trong mã, tức là nhiều thay đổi trong các tệp không có hiệu lực cho đến khi tệp được đóng đúng.
Cách tiếp cận thứ hai trong ví dụ trên sẽ chăm sóc tất cả các ngoại lệ nhưng sử dụng câu lệnh with
làm cho mã nhỏ gọn và dễ đọc hơn nhiều. Do đó, câu lệnh with
giúp tránh các lỗi và rò rỉ bằng cách đảm bảo rằng tài nguyên được phát hành đúng khi mã sử dụng tài nguyên được thực thi hoàn toàn. Tuyên bố with
được sử dụng phổ biến với các luồng tệp, như được hiển thị ở trên và với các khóa, ổ cắm, quy trình con và telnet, v.v.
Hỗ trợ câu lệnh "với" trong các đối tượng do người dùng xác định
Không có gì đặc biệt trong [
7 làm cho nó có thể sử dụng được với câu lệnh with
và cùng một chức năng có thể được cung cấp trong các đối tượng do người dùng xác định. Hỗ trợ câu lệnh with
trong các đối tượng của bạn sẽ đảm bảo rằng bạn không bao giờ để bất kỳ tài nguyên nào mở. Để sử dụng câu lệnh with
trong các đối tượng do người dùng xác định, bạn chỉ cần thêm các phương thức 'file_path'
1 và 'file_path'
2 trong các phương thức đối tượng. Hãy xem xét các ví dụ sau để làm rõ thêm.
To use with
statement in user defined objects you only need to add the methods 'file_path'
1 and 'file_path'
2 in the object methods. Consider the following example for further clarification.
'file_path'
3 'file_path'
4'file_path'
5'file_path'
6
file
6'file_path'
8 'file_path'
9,
0,
1
,
2,
0,
4=
,
6
file
6'file_path'
8 ,
9,
0'file_path'
6
,
2,
0'w'
4___
,
2]
4 ,
0'w'
4file
file
6'file_path'
8 with
00,
0'file_path'
6
,
2,
0'w'
4file
with
5
with
08with
09with
10
file
6with
12file
9]
Hãy để kiểm tra mã trên. Nếu bạn nhận thấy, những gì tiếp theo từ khóa with
là hàm tạo của with
16. Ngay sau khi thực thi vào bối cảnh của câu lệnh with
, một đối tượng with
16 được tạo và Python sau đó gọi phương thức 'file_path'
1. Trong phương thức 'file_path'
1 này, khởi tạo tài nguyên bạn muốn sử dụng trong đối tượng. Phương thức 'file_path'
1 này phải luôn luôn trả về một mô tả của tài nguyên thu được.
Các mô tả tài nguyên là gì? Đây là những tay cầm được cung cấp bởi hệ điều hành để truy cập các tài nguyên được yêu cầu. Trong khối mã sau, file
là bộ mô tả của tài nguyên luồng tệp.
These are the handles provided by the operating system to access the requested resources. In the following code block, file
is a descriptor of the file stream resource.
Trong ví dụ with
16 được cung cấp ở trên, phương thức 'file_path'
1 tạo một bộ mô tả tệp và trả về nó. Tên with
25 Ở đây được sử dụng để tham khảo bộ mô tả tệp được trả về bằng phương thức 'file_path'
1. Khối mã sử dụng tài nguyên thu được được đặt bên trong khối của câu lệnh with
. Ngay sau khi mã bên trong khối with
được thực thi, phương thức 'file_path'
2 được gọi. Tất cả các tài nguyên thu được được phát hành theo phương pháp 'file_path'
2. Đây là cách chúng tôi sử dụng câu lệnh with
với các đối tượng do người dùng xác định.
Giao diện này của các phương thức 'file_path'
1 và 'file_path'
2 cung cấp sự hỗ trợ của câu lệnh with
trong các đối tượng do người dùng xác định được gọi là Trình quản lý ngữ cảnh.Context Manager.
Mô -đun bối cảnh
Trình quản lý bối cảnh dựa trên lớp như được hiển thị ở trên không phải là cách duy nhất để hỗ trợ câu lệnh with
trong các đối tượng do người dùng xác định. Mô -đun with
36 cung cấp thêm một vài trừu tượng được xây dựng trên giao diện trình quản lý bối cảnh cơ bản. Dưới đây là cách chúng tôi có thể viết lại trình quản lý ngữ cảnh cho đối tượng with
16 bằng mô -đun with
36.
with
39 with
40with
41 with
42
'file_path'
3 'file_path'
4'file_path'
5'file_path'
6
file
6'file_path'
8 'file_path'
9,
0,
1
,
2,
0,
4=
,
6
file
6with
58
file
6'file_path'
8 with
61,
0'file_path'
6
,
2file
4file
5
with
67file
=
open
[
,
0____90090
with
67with
77 file
,
2=
1file
5
with
67file
with
5
with
85=
'file_path'
4with
88]
with
90
file
6with
92file
9]
Trong ví dụ mã này, do câu lệnh with
77 Trong định nghĩa của nó, hàm with
96 là hàm của trình tạo. Khi hàm with
96 này được gọi, nó tạo ra một mô tả tài nguyên có tên file
. Bộ mô tả tài nguyên này sau đó được chuyển cho người gọi và được đại diện ở đây bởi biến with
99. Sau khi mã bên trong khối with
được thực thi, điều khiển chương trình trở lại chức năng with
96. Hàm with
96 tiếp tục thực thi và thực thi mã theo câu lệnh with
77. Phần mã này xuất hiện sau tuyên bố with
77 phát hành các tài nguyên có được. with
58 ở đây là một nhà trang trí.
When this
with
96 function is called, it creates a resource descriptor named file
. This resource descriptor is then passed to the caller and is represented here by the variable with
99. After the code inside the with
block is executed the program control returns back to the with
96 function. The with
96 function resumes its execution and executes the code following the with
77 statement. This part of code which appears after the with
77 statement releases the acquired
resources. The with
58 here is a decorator.
Việc triển khai dựa trên lớp trước và triển khai dựa trên trình tạo này của các nhà quản lý ngữ cảnh là giống nhau. Mặc dù sau này dường như dễ đọc hơn, nó đòi hỏi kiến thức về máy phát điện, trang trí và with
77.