بیایید تابع print() در پایتون را با چند مثال به تفصیل بررسی کنیم. تابع print() کار هایی بیش از چاپ ساده یک متن را انجام می دهد!
تابع print()
یک تابع اساسی در پایتون است که می توانید آن را خیلی سریع درک کنید و از آن استفاده کنید. احتمالاً در اولین کد هایی که از پایتون یاد گرفته اید، با این تابع آشنا شده اسد.
اما چیزهای بیشتر از آنچه به چشم می آید وجود دارد. در این مقاله، با توضیح نحوه کار همه آرگومانها و نشان دادن چند مثال، این تابع را به تفصیل بررسی میکنیم.
یک مرجع خوب برای عملکرد تابع print()
در پایتون در مستندات رسمی آن موجود است . این تابع چندین آرگومان را همانطور که در زیر نشان داده شده است با مقادیر پیش فرض آنها می پذیرد:
print(*objects, sep=' ', end= '\n', file=sys.stdout, flush=False)
در بخشهای زیر، آرگومانها را یکی از مرور میکنیم و هر آنچه را که برای استفاده از این تابع بهطور کامل نیاز دارید، به شما نشان میدهیم. برای کسانی از شما که هنوز با اصول اولیه پایتون آشنا نشدهاند، قبل از مطالعه این درس، نگاهی به دوره آموزش پایتون بیندازید، که علاوه بر تدریس زبان پایتون، شامل چالشهای کدگذاری تعاملی برای تسریع یادگیری شما میباشد.
*objects
چیزی که باید چاپ شود با آرگومان اول یعنی *objects
مشخص می شود و اساساً می تواند هر چیزی باشد. معمولاً یک رشته است اما ممکن است یک عدد صحیح، یک عدد اعشاری، یک متغیر، یک لیست، یک دیکشنری و … باشد. تابع print() همچنین می تواند بیش از یک شیء را بگیرد.
از آنجایی که چاپ رشته ها رایج است، لازم به ذکر است که رشته ها ممکن است با تک کوتیشن («رشته») یا دابل کوتیشن («رشته») تعریف شوند. ترجیح شخصی شما و کاربرد مورد نظرتان تعیین می کند که از کدام مورد استفاده کنید. برای اثبات این موضوع به دو مثال زیر توجه کنید:
string = 'She asked "How do you print quotes?"'
string = "It's about time to program something"
اساسی ترین استفاده از تابع print()
برای چاپ ساده یک رشته است:
print("Hello, World!")
پارامتر های دیگر که مقداری برای آنها مشخص نشده است، مقادیر پیش فرض خود را می گیرند که در بالا در مقدمه ذکر شده است.
عملیات رشته معمولی ممکن است در داخل تابع استفاده شود. به عنوان مثال، می توانید یک رشته را در یک عدد صحیح ضرب کنید، همانطور که در اینجا نشان داده شده است:
print("print this twice " * 2)
در این مرحله، مهم است که قالب بندی رشته را بلد باشید. روش قدیمی قالب بندی از طریق % است. با این حال توصیه نمی شود زیرا برای رشته های طولانی تر کمی دست و پا گیر می شود.
راه بهتر استفاده از str.format()
است که در آن فیلدهایی که باید جایگزین شوند درون آکولاد نشان داده می شوند. بیایید چند متغیر تعریف کنیم و آنها را در یک رشته چاپ کنیم:
name = "Mary"
age = 20
print("{} is {} years old".format(name, age))
#Mary is 20 years old
یکی دیگر از روش های قالب بندی به نام “قالب بندی رشته ای f” شناخته می شود. این شبیه به مثال بالا است، اما کمی جمع و جورتر. با استفاده از همان متغیرهای بالا می توانیم بنویسیم:
name = "Mary"
age = 20
print(f"{name} is {age} years old")
#Mary is 20 years old
اگر میخواهید یک شیء تکرارپذیر مانند یک فهرست یا یک آرایه را چاپ کنید، استفاده از عبارت ستارهدار به جداسازی اعضای لیست و چاپ زیبای آن کمک میکند:
print(*[1, 2, 3, 4])
#1 2 3 4
همان لیست را بدون ستاره چاپ می کنیم تا ببینید چه چیزی به دست می آید.
کد
همچنین، دنباله range()
که یک تابع داخلی پایتون است و لیستی در خروجی برمی گرداند را با و بدون ستاره چاپ می کنیم.
کد
در بخش بعدی چند نمونه دیگر را با عبارات ستاره دار خواهیم دید.
sep
آرگومان دوم تابع print()
جداکننده را تعریف می کند. اگر بیش از یک شیء به عنوان آرگومان اول داده شود، آرگومان sep تعیین می کند که چه جداکننده ای بین آنها قرار بگیرد. بر اساس مثال قبلی، جداکننده را به عنوان کاراکتر خط جدید تعریف می کنیم. در اینصورت هر شیء در یک خط چاپ می شود:
print(*[1, 2, 3, 4], sep="\n")
#1
#2
#3
#4
یکی دیگر از موارد استفاده از این آرگومان، چاپ زیبای برخی نتایج است. میتوانیم یک متغیر تعریف کنیم و مقدار آن را در یک جمله قابل خواندن برای انسان چاپ کنیم:
result = 10
print("Result of experiment ", result, sep=" is ")
#Result of experiment is 10
در اینجا رشته "Result of experiment"
و متغیر result
هر دو با هم آرگومان *objects
هستند و مقدار sep بین آنها چاپ می شود. به جای is می توانید : یا = یا … بگذارید.
end
کلمه کلیدی end به شما امکان می دهد چیزی را تعریف کنید که به طور خودکار در انتهای خروجی چاپ شود. به طور پیش فرض یک کاراکتر خط جدید (“\n”) تنظیم می شود.
به بیان دقیق تر، هیچ یک از آرگومان های تابع print()
الزامی نیست. اگر هیچ آرگومانی داده نشود، کلمه کلیدی end چاپ می شود که به طور پیش فرض کاراکتر خط جدید است. بیایید با اضافه کردن یک علامت تعجب در پایان، مثال قبلی را ادامه دهیم. در این صورت به جای کاراکتر خط جدید، علامت ! در پایان این عبارت چاپ می شود.
print("Result of experiment", result, sep=" is ", end="!")
#Result of experiment is 10!
اگر بعد از این print دستور print دیگری را چاپ کنیم در ادامه خروجی قبلی چاپ می شود و به خط جدید نمی رود.
file
در صورتی که مقداری برای این آرگومان مشخص نشود، به صورت پیش فرض خروجی در ترمینال پایتون چاپ می شود. مقدار پیشفرض این آرگومان، sys.stdout
است ، که به معنای «نوشتن در خروجی استاندارد» در پایتون است. این یک شیء فایل داخلی است که هر چیزی را که روی آن نوشته شود، در کنسول نمایش می دهد. اگر می خواهید خروجی را در فایلی در پایتون بنویسید، شیء فایل خود را با آرگومان file
مشخص کنید.
بیایید رشته ای را تعریف کنیم و آن را در فایل “flush_demo.py” ذخیره کنیم. (فعلاً به محتوای رشته توجه نکنید. در بخش بعد آن را توضیح خواهیم داد):
open_file = open('flush_demo.py', 'w')
string = "import time\nfor num in range(10, 0, -1):\n\tprint(str(num)+' ', end='', flush=True)\n\ttime.sleep(1)\nprint('\\nCountdown finished!')"
print(string, file=open_file)
open_file.close()
این کد را در یک دایرکتوری مشخص اجرا کنید. در بخش بعد با فایل flush_demo.py کار خواهیم داشت.
توجه داشته باشید که باید شیء فایل را در حالت نوشتن تعریف کنید و در پایان آن را ببندید. اگر جزئیات بیشتری در مورد نوشتن در فایل در پایتون میخواهید، مقالهای داریم که آن را پوشش میدهد.
flush
کلمه کلیدی flush
به تازگی به تابع print()
اضافه شده است. یک Boolean را می پذیرد، True
یا False
.
به طور معمول، خروجی یک فایل یا کنسول بافر می شود. بافر تنها زمانی که پر شده باشد یا به خط جدید رسیده باشد “فلاش” می شود (یعنی چاپ می شود). تنظیم این کلمه کلیدی روی True به اجبار بافر را قبل از پر شدن یا قبل از اینکه با یک کاراکتر خط جدید مواجه شود پاک می کند.
برای مشاهده عملی این موضوع، باید از فایلی که در مثال قبلی ایجاد کردیم استفاده کنیم. برای اجرای این اسکریپت، ترمینال را باز کنید، به دایرکتوری مورد نظر در کامپیوتر خود بروید و کد زیر اجرا کنید:
python flush_demo.py
می بینید که ما یک ساعت شمارش معکوس ایجاد کرده ایم. با flush=True
، بافر پس از چاپ هر عدد در حلقه پاک می شود، سپس برنامه به مدت 1 ثانیه می خوابد. با flush=False
، برنامه به مدت 10 ثانیه میخوابد و بافر فقط در پایان برنامه پاک میشود و دنباله اعداد را به یکباره چاپ میکند.
سلام وقت بخیر
تابعی بنویسید که دو عدد بگیره و اولی رو به توان دومی برسونه و چاپ کنه یا برگردونه
میشه بگین کد این چی میشه لطفا؟
سپاس
سلام. وقت بخیر
می تونید از این کد استفاده کنید: