آموزش کامل دستور With در پایتون به زبان ساده
With در پایتون عبارتی است که برای کار با منابع مدیریت نشده مانند جریان فایل، اتصالات شبکه و اتصالات پایگاه داده استفاده میشود. دستور With مدیریت این منابع را با مراقبت خودکار از عملیات پاکسازی آنها ساده میکند. دستور with به عنوان یکی از دستورات پایتون تضمین میکند که منابع به درستی استفاده میشوند، حتی اگر در طول اجرای کد یک استثنا یا خطا ایجاد شود.
سینتکس With در پایتون
سینتکس With در پایتون به صورت زیر است:
with expression [as variable]:
with-block
در سینتکس بالا، expression نشان دهنده زمینهای است که باید مدیریت شود و with-block بلوک کدی را نشان میدهد که از منبع مدیریت شده استفاده میکند.
هنگامی که دستور with اجرا میشود، پایتون متد __enter__ مدیر زمینه (شی برگردانده شده توسط expression) را فراخوانی میکند. اگر یک عبارت as وجود داشته باشد، شیء برگشتی با متد __enter__ به متغیر مشخص شده اختصاص داده میشود. پس از اجرای “with-block”، پایتون متد __exit__ مدیر زمینه را فراخوانی میکند که عملیات پاکسازی را بر عهده دارد. در زیر انواع کاربرد With در پایتون در زمینههای مختلفی مورد بررسی قرار خواهد گرفت.
استفاده از with برای کار با فایلها در پایتون
یکی از رایجترین موارد استفاده از دستور with در زبان برنامهنویسی پایتون برای کار با فایلها محسوب میشود. در ادامه مثالی آورده شده است که نحوه باز کردن یک فایل txt را با استفاده از دستور with نشان میدهد:
with open("example.txt", "r") as file:
data = file.read()
print(data)
در مثال فوق، تابع with در پایتون برای باز کردن فایل “example.txt” در حالت خواندن (read) استفاده میشود. شی فایل (file) به فایل متغیر اختصاص داده میشود. کد داخل “with-block” محتویات فایل را با استفاده از متد read میخواند و در کنسول چاپ میکند. پس از اجرای “with-block”، فایل به طور خودکار با متد __exit__ شی فایل بسته میشود.
پیشنهاد مطالعه: آموزش Dataframe در پایتون به زبان ساد
استفاده از with برای اتصالات شبکه در پایتون
دستور with در پایتون همچنین میتواند برای مدیریت اتصالات شبکه استفاده شود. در اینجا مثالی آورده شده است که نحوه باز کردن سوکت را با استفاده از عبارت with نشان میدهد:
در مثال فوق، دستور with برای باز کردن یک اتصال سوکت به وب سرور در “www.example.com” در پورت 80 استفاده میشود. شی سوکت به متغیر s اختصاص داده شده است. کد داخل “with-block” یک درخواست HTTP را به سرور ارسال کرده و پاسخی را دریافت میکند. پس از اجرای “with-block”، سوکت به طور خودکار با متد __exit__ شی سوکت بسته میشود.
پیشنهاد مطالعه: آموزش دستورات شرطی در پایتون به زبان ساده
استفاده از with در پایتون برای اتصالات پایگاه داده
دستور with در زبان پایتون همچنین میتواند برای مدیریت اتصالات پایگاه داده استفاده شود. در اینجا نیز مثالی وجود دارد که نحوه اتصال به پایگاه داده MySQL را با استفاده از عبارت with نشان میدهد:
import mysql.connector
with mysql.connector.connect(
host="localhost",
user="username",
password="password",
database="database"
) as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
در مثال بالا، عبارت “with” برای اتصال به پایگاه داده MySQL استفاده شده است. شیء اتصال به متغیر conn اختصاص داده میشود. کد داخل “with-block” یک شی cursor را با استفاده از متد cursor شی اتصال ایجاد خواهد کرد و یک کوئری SELECT را در جدول “users” اجرا میکند و همه ردیفها را با استفاده از روش fetchall بازیابی خواهد کرد. در نهایت، کد ردیفها را در کنسول چاپ میکند. پس از اجرای “with-block”، اتصال به طور خودکار با متد __exit__ شی اتصال بسته میشود.
استفاده از with با زمینه سفارشی
علاوه بر مدیریتهای زمینه (Context Managers) داخلی مانند فایلها، سوکتها و اتصالات پایگاه داده، میتوان با استفاده از ماژول contextlib، مدیران زمینه خود را نیز ایجاد کرد. در اینجا مثالی آورده شده است که نحوه ایجاد یک مدیر زمینه سفارشی با استفاده از ماژول contextlib را نشان میدهد:
from contextlib import contextmanager
@contextmanager
def my_context_manager():
# Code to setup the context
print("Entering the context")
yield
# Code to tear down the context
print("Exiting the context")
with my_context_manager():
print("Inside the context")
در مثال بالا، دکوراتور پایتون @contextmanager برای تعریف تابع مولد my_context_manager استفاده میشود که نمایانگر زمینهای است که باید مدیریت شود. کد داخل تابع مولد، زمینه را با چاپ Entering the context تنظیم میکند. کلمه کلیدی yield برای مشخص کردن مرز بین کد راهاندازی و حذف استفاده میشود. کد بعد از کلمه کلیدی yield نشان دهنده کد حذفی است که Exiting the context را چاپ میکند.
مدیر زمینه سفارشی در عبارت “with” با فراخوانی تابع مولد my_context_manager و اجرای کد داخل “with-block” استفاده میشود. در این مثال، کد داخل with-block عبارت Inside the context را چاپ میکند. پس از اجرای “with-block”، کد حذفی مدیر زمینه سفارشی به طور خودکار فراخوانی میشود که ” Exiting the context ” را چاپ میکند.
مثالی کاربردی از with در پایتون
در اینجا به عنوان تکمیل کننده بحث مثالی عملی و کاربردی از دستور with آورده شده که قطعه کد آن به صورت زیر است:
import socket
HOST = 'www.example.com'
PORT = 80
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
request = b'GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n'
s.sendall(request)
response = s.recv(1024)
print(response.decode())
در این مثال، ما از دستور “with” برای ایجاد یک اتصال سوکت TCP به میزبان فرضی “www.example.com” در پورت 80 با استفاده از ماژول سوکت استفاده میکنیم. تابع socket.socket برای ایجاد یک شی سوکت جدید با خانواده آدرس AF_INET و نوع سوکت SOCK_STREAM استفاده میشود. دستور with تضمین میکند که هنگام خروج بلوک، سوکت به طور خودکار بسته میشود، حتی اگر یک استثنا رخ دهد.
در “with-block”، از متد اتصال شی سوکت برای برقراری اتصال به هاست و پورت استفاده میکنیم. سپس یک درخواست HTTP GET میسازیم و با استفاده از روش sendall شی سوکت به سرور ارسال میکنیم. متد recv برای دریافت حداکثر 1024 بایت داده از سرور استفاده میشود که پس از رمزگشایی آن به یک رشته با استفاده از متد decode، آن را در کنسول چاپ میکنیم.
با استفاده از عبارت “with” در این مثال، اطمینان حاصل میکنیم که اتصال سوکت پس از اتمام کار به درستی بسته شده است، حتی اگر در حین انتقال داده خطایی رخ دهد. این به جلوگیری از نشت منابع کمک میکند و اطمینان حاصل خواهد شد که کد پایتون ما قوی و قابل اعتماد است.
پیشنهاد مطالعه: آموزش count در پایتون به زبان ساده + مثال عملی و آموزنده
مزایای استفاده از with در پایتون چیست؟
عبارت with در پایتون مزایای متعددی را نسبت بهروشهای سنتی مدیریت منابع مانند فایلها، اتصالات پایگاه داده و سوکتهای شبکه ارائه میدهد. در اینجا برخی از مزایای کلیدی ذکر شده است:
- مدیریت خودکار منابع: یکی از مزایای اصلی استفاده از with در پایتون این است که به طور خودکار مدیریت منابع را به عهده میگیرد. این بدان معنی است که منابع به درستی بسته و پاکسازی میشوند، حتی اگر خطایی در بلوک “with” رخ دهد. این به جلوگیری از نشت منابع کمک میکند و تضمین میکند که برنامه قویتر و قابلاعتمادتر است.
- کد مختصر و خوانا: عبارت “with” روشی مختصر و خوانا برای مدیریت منابع در پایتون ارائه میدهد. با کپسوله کردن کدهای پایتون مدیریت منابع در یک بلوک ” with”، مشخص خواهد شد که کدام منابع مدیریت میشوند و چه زمانی از آنها استفاده میشود.
- حذف کدهای boilerplate: استفاده از “with” در پایتون نیاز به کدهای boilerplate مانند بلوکهای نهایی یا بستن دستی منابع را از بین میبرد. این مقدار کدی را که باید نوشته شود کاهش میدهد و کد را قابلخواندن و نگهداری میکند.
- مدیران زمینه سفارشی: عبارت “with” در پایتون همچنین امکان ایجاد مدیران زمینه سفارشی با استفاده از ماژول contextlib را فراهم میکند. این روشی را برای مدیریت منابع پیچیده یا انجام عملیات راهاندازی و حذف به شیوهای کنترل شده و قابل پیشبینی تر ارائه میدهد.
سخن پایانی
در این مطلب از مجله مکتب خونه، همهچیزهایی را که باید در مورد عبارت with در پایتون به عنوان یکی از دستورات ورودی یا input بدانید، پوشش دادهایم. ما دیدیم که چگونه کلمه کلیدی with مدیریت منابع مدیریت نشده مانند فایلها، اتصالات شبکه و اتصالات پایگاه داده را با مراقبت از عملیات پاکسازی خودکار آنها ساده میکند. ما همچنین نحوه استفاده از عبارت with را با مثالهای ساده و کاربردی و همچنین نحوه ایجاد مدیران زمینه سفارشی با استفاده از ماژول contextlib را دیدیم. با خواندن این مطلب، هماکنون باید بتوانید از عبارت “with” به طور مؤثر در کد پایتون خود استفاده کنید.
پیشنهاد مطالعه: کتابخانه های پایتون + مزایا، معایب و کاربرد هرکدام
یادگیری پایتون با مکتب خونه
اگر به فکر یادگیری برنامهنویسی پایتون از صفر هستید و یا دوست دارید که مهارتهای خود را از پایتون تا سطح حرفهای شدن ادامه دهید، پیشنهاد ما به شما استفاده از دورههای آموزش پایتون مکتب خونه است. با استفاده از دورههای آموزش پایتون مکتب خونه میتوانید مهارتهای خود را از پایتون به شیوهای عملی ارتقا داده و علاوه بر آن گواهینامههای معتبری را نیز دریافت کنید.