Hướng dẫn what is the advantage of using with statement in python? - lợi thế của việc sử dụng với câu lệnh trong python là gì?

with open("hello.txt", "wb") as f:
    f.write("Hello Python!\n")

dường như giống như

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()

Ưu điểm của việc sử dụng mở .. như thay vì f =? Có phải nó chỉ là đường cú pháp? Chỉ lưu một dòng mã?

hỏi ngày 29 tháng 4 năm 2010 lúc 14:58Apr 29, 2010 at 14:58

Hướng dẫn what is the advantage of using with statement in python? - lợi thế của việc sử dụng với câu lệnh trong python là gì?

Prosseekprosseeekprosseek

175K201 Huy hiệu vàng554 Huy hiệu bạc854 Huy hiệu đồng201 gold badges554 silver badges854 bronze badges

2

Để tương đương với phiên bản câu lệnh with, mã bạn đã viết nên thay vào đó như thế này:

f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()

Mặc dù điều này có vẻ giống như đường cú pháp, nhưng nó đảm bảo rằng bạn phát hành tài nguyên. Nói chung, thế giới phức tạp hơn các ví dụ bị kích thích này và nếu bạn quên một try.. except... hoặc không xử lý một trường hợp cực đoan, bạn có rò rỉ tài nguyên trên tay.

Tuyên bố with giúp bạn tiết kiệm khỏi những rò rỉ đó, giúp việc viết mã sạch dễ dàng hơn. Để giải thích đầy đủ, hãy nhìn vào PEP 343, nó có rất nhiều ví dụ.

Đã trả lời ngày 29 tháng 4 năm 2010 lúc 15:12Apr 29, 2010 at 15:12

mg.mg.mg.

7.6371 Huy hiệu vàng25 Huy hiệu bạc 30 Huy hiệu Đồng1 gold badge25 silver badges30 bronze badges

0

Nếu f.write ném một ngoại lệ, f.close() được gọi khi bạn sử dụng with và không được gọi trong trường hợp thứ hai. Ngoài ra f có phạm vi nhỏ hơn và mã sạch hơn khi sử dụng

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
0

Đã trả lời ngày 29 tháng 4 năm 2010 lúc 15:02Apr 29, 2010 at 15:02

Kathy Van Stonekathy Van StoneKathy Van Stone

25K3 Huy hiệu vàng31 Huy hiệu bạc40 Huy hiệu đồng3 gold badges31 silver badges40 bronze badges

Cái trước vẫn đóng f nếu một ngoại lệ xảy ra trong thời gian

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
2.

Tim Pietzcker

Phù bằng vàng 319K5757 gold badges494 silver badges550 bronze badges

Đã trả lời ngày 29 tháng 4 năm 2010 lúc 15:01Apr 29, 2010 at 15:01

DJCDJCdjc

11.4K5 Huy hiệu vàng43 Huy hiệu bạc52 Huy hiệu Đồng5 gold badges43 silver badges52 bronze badges

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.

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
5
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
6
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
7
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
8
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
9
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
0
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
1
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
2

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
5
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
4
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
5
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
2

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
5
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
8

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
5
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
6
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
7
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
8
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
9
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
0
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
1
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
2

with7with8

with9

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
5
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
4try.. except...2
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
2

try.. except...4with8

with9

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
5
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
8

try.. except...9

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
7
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
8
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
9
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
0
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
1with5
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
5with8

with9

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
5
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
4
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
5
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
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 f.write3 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 f.write6 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 đảm nhận 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 f.close()0 mà 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 f.close()4 và f.close()5 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 f.close()4 and f.close()5 in the object methods. Consider the following example for further clarification.

f.close()6 f.close()77__78f.close()9

with9with1 with2with3with4

with5with3with7

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
6 with9

with9with1 f2with3f.close()9

with5with3f7

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
5
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
6
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
7
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
8with3
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
03
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
1
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
2

with5

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
07 with3f7
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
5

with9with1

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
13with3f.close()9

with5with3f7

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
5
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
8

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
21
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
22
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
23

with9

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
25try.. except...2
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
2

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

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
29. Ngay sau khi thực thi vào bối cảnh của câu lệnh with, một đối tượng
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
29 được tạo và Python sau đó gọi phương thức f.close()4. Trong phương thức f.close()4 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 f.close()4 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,

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
5 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,
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
5 is a descriptor of the file stream resource.

Trong ví dụ

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
29 được cung cấp ở trên, phương thức f.close()4 tạo ra một mô tả tệp và trả về nó. Tên
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
38 Ở đây được sử dụng để tham khảo bộ mô tả tệp được trả về bằng phương thức f.close()4. 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 f.close()5 được gọi. Tất cả các tài nguyên thu được được phát hành theo phương pháp f.close()5. Đâ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 f.close()4 và f.close()5 cung cấp 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

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
49 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ý bối cảnh cho đối tượng
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
29 bằng mô -đun
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
49.

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
52
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
53
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
54
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
55

f.close()6 f.close()77__78f.close()9

with9with1 with2with3

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
64

with5with3with7

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
6
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
69

with9

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
71

with9with1

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
74with3f.close()9

with5with7with8

Is

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
80
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
90
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
5

with5try.. except...4with8

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
80
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
5
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
8

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
98
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
6 f.close()7
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
01
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
2

f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
03

with9

f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
05try.. except...2
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
2

Trong ví dụ mã này, do câu lệnh

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
90 Trong định nghĩa của nó, hàm
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
09 là hàm của trình tạo. Khi hàm
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
09 này được gọi, nó tạo ra một mô tả tài nguyên có tên
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
5. 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
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
12. 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
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
09. Hàm
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
09 tiếp tục thực thi và thực thi mã theo câu lệnh
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
90. Phần mã này xuất hiện sau tuyên bố
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
90 phát hành các tài nguyên thu được.
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
71 ở đây là một người trang trí.
When this
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
09 function is called, it creates a resource descriptor named
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
5. This resource descriptor is then passed to the caller and is represented here by the variable
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
12. After the code inside the with block is executed the program control returns back to the
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
09 function. The
f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()
09 function resumes its execution and executes the code following the
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
90 statement. This part of code which appears after the
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
90 statement releases the acquired resources. The
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
71 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à

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
90.


Lợi thế của việc sử dụng với câu lệnh là gì?

Tuyên bố với bạn giúp bạn thoát khỏi những rò rỉ đó, giúp viết mã sạch dễ dàng hơn.saves you from those leaks, making it easier to write clean code.

Lợi ích chính của A với Tuyên bố Python là gì?

Với tuyên bố 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.simplifies the management of common resources like file streams.

Mục đích của tuyên bố với tuyên bố là gì?

Những lý do để sử dụng một câu lệnh bao gồm lưu một biến tạm thời và giảm kích thước tệp bằng cách tránh lặp lại tham chiếu đối tượng dài.

Mục đích của việc mở và với tuyên bố trong Python là gì?

Câu lệnh With hoạt động với hàm Open () để mở tệp.Không giống như Open () nơi bạn phải đóng tệp bằng phương thức đóng (), câu lệnh với câu lệnh đóng tệp cho bạn mà không cần bạn nói.to open a file. Unlike open() where you have to close the file with the close() method, the with statement closes the file for you without you telling it to.