وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

خروجی تابع print() را در پایتون شستشو دهید

0 50
زمان لازم برای مطالعه: 3 دقیقه


معرفی

در پایتون، print تابع یک ابزار اساسی برای خروجی داده ها به console (و برای بسیاری از ما، ابزار اصلی اشکال زدایی ماست). اما، همانطور که ممکن است با آن برخورد کرده باشید، گاهی اوقات خروجی این تابع بلافاصله ظاهر نمی شود. این به دلیل ویژگی به نام “بافر خروجی” است.

در این بایت، بافر خروجی را بررسی خواهیم کرد، چرا باید آن را شستشو داد و چگونه print کارکرد flush پارامتر می تواند به ما در کنترل این رفتار کمک کند.

بافر خروجی

بافر خروجی یک فضای ذخیره سازی موقت در حافظه رایانه شما است که در آن اطلاعات در انتظار خروجی به console برگزار می شود. بافر با کاهش تعداد عملیات I/O عملکرد را بهبود می بخشد. به جای نوشتن هر قطعه از داده ها در console به طور جداگانه، پایتون چندین تکه داده را جمع آوری می کند و همه آنها را یکجا می نویسد.

در اینجا یک تشبیه ساده وجود دارد: تصور کنید در حال ارسال نامه هستید. به جای اینکه هر بار که نامه ای را تمام می کنید به اداره پست بروید، با نوشتن چندین نامه در زمان زیادی صرفه جویی می کنید و سپس همه آنها را یکجا به اداره پست می برید. این در اصل کاری است که بافر خروجی انجام می دهد.

چرا باید بافر خروجی را شستشو دهیم؟

در حالی که بافر برای عملکرد عالی است، می تواند باعث سردرگمی در هنگام اشکال زدایی کدتان شود. اگر برنامه شما خراب شود، ممکن است تمام خروجی‌هایی که قبل از خرابی ایجاد شده است را نبینید زیرا ممکن است مقداری از آن همچنان در بافر باشد.

پیشنهاد می‌کنیم بخوانید:  روش ایجاد یک انیمیشن بارگیری در React از ابتدا هنگام ایجاد برنامه های React که محتوا را از منابع خارجی واکشی می کنند و بارگذاری آن مدتی طول می کشد، همیشه ایده خوبی است که با درگیر کردن کاربران و حفظ توجه آنها با لودر، تجربه ای دلپذیر برای کاربر فراهم کنید. این به کاربران کمک می کند تا بفهمند چه اتفاقی می افتد روی به جای رفتن...

هنگامی که بافر خروجی را شستشو می دهید، به پایتون می گویید که فوراً هر داده ای را که در حال حاضر در بافر ذخیره شده است، بنویسد، حتی اگر بافر پر نباشد.

این می تواند به ویژه در هنگام اشکال زدایی چاپ مفید باشد، زیرا تضمین می کند که تمام خروجی ها را تا نقطه خرابی مشاهده می کنید.

تابع چاپ و پارامتر Flush

پایتون print تابع دارای a flush پارامتری که می توانید برای کنترل اینکه آیا بافر خروجی باید شسته شود یا خیر استفاده کنید. به صورت پیش فرض، flush تنظیم شده است False، به این معنی که پس از هر تماس بافر بافر پاک نمی شود print.

اگر تنظیم کنید flush به True، پایتون بعد از هر بار بافر خروجی را پاک می کند print زنگ زدن. در اینجا یک مثال است:

print("Hello, World!", flush=True)

در این کد رشته “Hello, World!” به چاپ می رسد console، و سپس بافر خروجی بلافاصله شسته می شود. این تضمین می کند که “سلام، جهان!” ظاهر می شود روی را console بلافاصله، حتی اگر داده های بیشتری در انتظار چاپ باشد.

توجه داشته باشید: شستشوی بافر خروجی می تواند برنامه شما را کند کند، به خصوص اگر داده های زیادی را چاپ می کنید. بنابراین، به طور کلی ایده خوبی است که فقط از آن استفاده کنید flush=True زمانی که در حال رفع اشکال هستید و باید فورا خروجی خود را ببینید.

در بخش‌های بعدی این بایت، به روش استفاده از آن خواهیم پرداخت flush پارامتر و ارائه چند مثال

روش استفاده از پارامتر Flush

در تابع چاپ پایتون، پارامتری به نام وجود دارد flush. این پارامتر روی تنظیم شده است False به طور پیش فرض، به این معنی که بافر خروجی بلافاصله پس از اجرای عملکرد چاپ پاک نمی شود. اما اگر تنظیم کنید flush=True، پایتون فوراً بافر خروجی را پاک می کند.

پیشنهاد می‌کنیم بخوانید:  استفاده از کتابخانه Plotly برای تجسم داده های تعاملی در پایتون

در اینجا نحو استفاده از پارامتر flush آمده است:

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

در این نحو، *objects مقادیری هستند که می خواهید چاپ کنید، sep جداکننده است که به طور پیش فرض یک فاصله است، end کاراکتری است که در پایان چاپ می شود که به طور پیش فرض یک خط جدید است، file شیئی است که مقادیر در آن چاپ می شوند و flush پارامتری است که ما به آن علاقه مندیم.

برای استفاده از پارامتر flush، به سادگی وارد کنید flush=True در تابع چاپ شما:

print("Hello, rasanegar!", flush=True)

با این کار رشته “Hello, rasanegar!” و بلافاصله بافر خروجی را پاک کنید.

نمونه هایی از استفاده از پارامتر Flush

بیایید به چند نمونه از روش استفاده از پارامتر flush در سناریوهای دنیای واقعی نگاه کنیم.

چاپ در یک حلقه

هنگامی که در داخل یک حلقه چاپ می کنید، به خصوص یک حلقه طولانی، ممکن است بخواهید فوراً خروجی را ببینید. در اینجا روش انجام این کار آمده است:

import time

for i in range(10):
    print(i, flush=True)
    time.sleep(1)

در این کد اعداد 0 تا 9 هر بار با یک ثانیه تاخیر بین هر چاپ چاپ می شوند. چون ما تنظیم کردیم flush=True، هر شماره بلافاصله در console.

چاپ در یک فایل

اگر در حال نوشتن روی یک فایل با استفاده از print تابع، شما می توانید استفاده کنید flush=True برای اطمینان از اینکه خروجی بلافاصله در فایل نوشته می شود. در اینجا روش کار این است:

with open('output.txt', 'w') as f:
    print("Hello, rasanegar!", file=f, flush=True)

اکنون، رشته “Hello, rasanegar!” در فایل نوشته شده است output.txt بلافاصله. مستقیما.

نتیجه

در این بایت، روش استفاده از آن را بررسی کرده ایم flush پارامتر در تابع چاپ پایتون برای پاک کردن فوری بافر خروجی. این می تواند به ویژه زمانی مفید باشد که در حال چاپ در یک حلقه یا نوشتن روی یک فایل هستید و می خواهید فوراً خروجی را ببینید.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1402-12-28 22:27:04

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید