Эй, привет! Я еще добавлю, что with оператор часто используется с многими Python объектами которые требуют очистки состояния. Круто работает с файлами, как тут уже показано, но также с БД и сетевыми соединениями. Его основное преимущество - это предотвращение утечек ресурсов. Вот более сложный пример для лучшего понимания. Сначала используем базовый пример для чтения файла:
Программный код:
with open('myfile.txt', 'r') as f:
content = f.read()
print(content)
Теперь пример с сетевым соединением:
Программный код:
import socket
class SocketManager:
def __init__(self, host, port):
self.host = host
self.port = port
self.sock = None
def __enter__(self):
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.connect((self.host, self.port))
return self.sock
def __exit__(self, exc_type, exc_val, exc_tb):
self.sock.close()
with SocketManager('localhost', 8080) as s:
s.sendall(b'Hello, world!')
response = s.recv(1024)
print('Received', repr(response))
Он закроет соединение автоматически, даже если в коде возникает ошибка. Это мега полезно, когда работаешь с реальными проектами. Надеюсь, теперь понятно!