بیشتر برنامهنویسها فایلهای بزرگ رو اینطوری میخونن:
while True:)
chunk = f.read(1024)
if not chunk:
break
process(chunk
اما یک روش حرفهایتر و تمیزتر وجود داره:
with open("data.bin", "rb") as f:
for chunk in iter(lambda: f.read(1024), b""):
process(chunk)
چرا این ترفند خفنه؟ 🤯
- بدون "while True" و "break"
- کد خواناتر و حرفهایتر میشه
- برای فایلهای بزرگ حافظه کمتری مصرف میکنه
- توی پروژههای واقعی مثل پردازش ویدیو، فایلهای حجیم و استریم داده کاربرد زیادی داره
"iter()" اینجا چه کار میکنه؟
"iter(callable, sentinel)" یک تابع را پشتسرهم اجرا میکند و به محض اینکه خروجی آن برابر مقدار "sentinel" شود، حلقه را متوقف میکند.
اینجا:
- "lambda: f.read(1024)" هر بار ۱۰۲۴ بایت میخواند.
- "b""" یعنی وقتی به انتهای فایل رسید، حلقه خودکار تمام میشود.
💡 این یکی از آن ترفندهایی است که هم کدت را تمیزتر میکند، هم نشان میدهد با قابلیتهای کمتر شناختهشده پایتون آشنا هستی.
#Python
Meta Academy 🚀
@metanix_ir
