از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
خروجی تابع print() را در پایتون شستشو دهید
سرفصلهای مطلب
معرفی
در پایتون، print
تابع یک ابزار اساسی برای خروجی داده ها به console (و برای بسیاری از ما، ابزار اصلی اشکال زدایی ماست). اما، همانطور که ممکن است با آن برخورد کرده باشید، گاهی اوقات خروجی این تابع بلافاصله ظاهر نمی شود. این به دلیل ویژگی به نام “بافر خروجی” است.
در این بایت، بافر خروجی را بررسی خواهیم کرد، چرا باید آن را شستشو داد و چگونه print
کارکرد flush
پارامتر می تواند به ما در کنترل این رفتار کمک کند.
بافر خروجی
بافر خروجی یک فضای ذخیره سازی موقت در حافظه رایانه شما است که در آن اطلاعات در انتظار خروجی به console برگزار می شود. بافر با کاهش تعداد عملیات I/O عملکرد را بهبود می بخشد. به جای نوشتن هر قطعه از داده ها در console به طور جداگانه، پایتون چندین تکه داده را جمع آوری می کند و همه آنها را یکجا می نویسد.
در اینجا یک تشبیه ساده وجود دارد: تصور کنید در حال ارسال نامه هستید. به جای اینکه هر بار که نامه ای را تمام می کنید به اداره پست بروید، با نوشتن چندین نامه در زمان زیادی صرفه جویی می کنید و سپس همه آنها را یکجا به اداره پست می برید. این در اصل کاری است که بافر خروجی انجام می دهد.
چرا باید بافر خروجی را شستشو دهیم؟
در حالی که بافر برای عملکرد عالی است، می تواند باعث سردرگمی در هنگام اشکال زدایی کدتان شود. اگر برنامه شما خراب شود، ممکن است تمام خروجیهایی که قبل از خرابی ایجاد شده است را نبینید زیرا ممکن است مقداری از آن همچنان در بافر باشد.
هنگامی که بافر خروجی را شستشو می دهید، به پایتون می گویید که فوراً هر داده ای را که در حال حاضر در بافر ذخیره شده است، بنویسد، حتی اگر بافر پر نباشد.
این می تواند به ویژه در هنگام اشکال زدایی چاپ مفید باشد، زیرا تضمین می کند که تمام خروجی ها را تا نقطه خرابی مشاهده می کنید.
تابع چاپ و پارامتر 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
، پایتون فوراً بافر خروجی را پاک می کند.
در اینجا نحو استفاده از پارامتر 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