| کانال توسعه‌دهندگان پایتون |
7.59K subscribers
67 photos
3 videos
4 files
63 links
⭕️ کانال توسعه‌دهندگان پایتون دولوپیکس

💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
📌 باز و بسته کردن فایل با context manager

خیلی وقت cها توی کدهای Python دیده می cشه فایل رو با open() باز می cکنیم، ولی فراموش می cکنیم ببندیمش. این کار می cتونه باعث Memory Leak، خطاهای عجیب روی سیستم فایل و قفل شدن فایل بشه.

راه تمیز و Pythonic استفاده از کلمهٔ کلیدی with هست که خودش به cصورت خودکار فایل رو می cبنده، حتی اگر وسط کار Exception بیاد. 😎

#  روش ضعیف
f = open("data.txt", "r", encoding="utf-8")
text = f.read()
# اگر اینجا Exception بیاد، f.close() هرگز صدا زده نمی cشه
f.close()

# روش پیشنهادی با context manager
with open("data.txt", "r", encoding="utf-8") as f:
text = f.read()

print(len(text))


اینجا with تضمین می cکنه بعد از اتمام بلاک، چه کد موفق اجرا بشه چه Exception رخ بده، متد f.close() صدا زده بشه. این دقیقاً رفتاریه که برای منابع حساس مثل فایل، کانکشن دیتابیس، و ساکت cها می cخوایم. 🔐

نکتهٔ مهم دیگه اینه که with کد رو خواناتر و قابل cاعتمادتر می cکنه؛ هر کسی کد رو ببینه، فوراً متوجه scope استفاده از منبع می cشه و لازم نیست دنبال close() بگرده.

این الگو رو می cشه برای چند فایل همزمان هم استفاده کرد:

with open("input.txt", "r", encoding="utf-8") as fin, \
open("output.txt", "w", encoding="utf-8") as fout:
for line in fin:
fout.write(line.upper())


امتحان این الگو توی پروژه cهای فعلی، مخصوصاً جاهایی که با فایل، شبکه یا هر منبع خارجی کار می cشه، یکی از سریع cترین بهبودهای کد محسوب می cشه.

منبع رسمی برای جزئیات بیشتر:
Python Docs - The with statement

🔖 #Python #پایتون #Python #File_I/O #Context_Manager #Best_Practices #Code_Readability

👤 Developix

💎 Channel: @DevelopixPython
مدیریت درست resource مثل فایل، connection دیتابیس یا lock، کلی باگ و Memory Leak بالقوه را حذف می‌کند. پایتون برای این کار Context Manager دارد که با کلمهٔ کلیدی with استفاده می‌شود. 😌

ساده‌ترین مثال، کار با فایل است؛ بدون نیاز به close() یادت نرود:
with open("data.txt", "r", encoding="utf-8") as f:
content = f.read()

بعد از تمام شدن بلاک، فایل به‌صورت خودکار بسته می‌شود؛ حتی اگر exception رخ بدهد. 👌

برای resourceهای خودت هم می‌شود Context Manager ساخت. راحت‌ترین راه در پروژه‌های کوچیک، استفاده از contextlib.contextmanager است:
from contextlib import contextmanager

@contextmanager
def temp_change_dir(path):
import os
old = os.getcwd()
os.chdir(path)
try:
yield
finally:
os.chdir(old)

حالا هرجا لازم بود، فقط:
with temp_change_dir("/tmp"):
# کدهای وابسته به مسیر جدید
...

این الگو، کد را خواناتر، امن‌تر و تست‌پذیرتر می‌کند. دفعهٔ بعد که نیاز به setup/cleanup داشتی، به یک Context Manager کوچک فکر کن.

🔗 رفرنس: Python docs - contextlib

🔖 #Python #پایتون #Python #context_manager #with #contextlib #best_practices #resources

👤 Developix

💎 Channel: @DevelopixPython
👍3