Sokan Academy

سلام دوستان، در این قسمت قصد داریم با مفهوم String Formatting یا قالب‌بندی رشته‌ها در پایتون آشنا شویم، کاربرد آن را بررسی کنیم و ببینیم چگونه می‌توان آن را پیاده‌سازی کرد.

همان‌طور که به خاطر دارید، در گذشته زمانی که قصد داشتیم متنی تولید کنیم که شامل مقادیر متغیر باشد، معمولاً ناچار بودیم رشته‌ها را به‌صورت دستی به یکدیگر متصل کنیم. این روش که به آن رشته‌سازی دستی (Concatenation) گفته می‌شود، هم زمان‌بر بود و هم منجر به تولید کدی با خوانایی و قابلیت نگهداری پایین می‌شد.

برای مثال، فرض کنید متغیری به نام my_text داریم که حاوی متنی برای نمایش نمره‌ی یک فرد است. اگر بخواهیم مقدار عددی مانند «۱۵» را به‌صورت داینامیک  درون این متن قرار دهیم یعنی به‌گونه‌ای که در آینده قابل تغییر باشد و به‌صورت مقدار ثابت (هاردکد) نباشد ناچار بودیم ابتدا مقدار عددی را به رشته تبدیل کرده و سپس آن را به متن اصلی اضافه کنیم تا در خروجی ظاهر شود: 

grade = 15
my_text = "Your Grade is"

در گذشته، یکی از روش‌های رایج برای چاپ پیام این بود که از تابع ()print استفاده می‌کردیم و به‌جای نوشتن کل جمله به‌صورت یکپارچه، آن را به بخش‌های مختلف تقسیم می‌کردیم. به این صورت که ابتدا بخش ابتدایی متن، سپس مقدار عددی، و در نهایت ادامه‌ی جمله را به‌صورت جداگانه در تابع ()print قرار می‌دادیم:

print(my_text, grade)

در این حالت، پایتون ابتدا متن اول را چاپ می‌کرد، بعد مقدار عددی را، و سپس ادامه‌ی جمله را. در ظاهر، نتیجه‌ی نهایی قابل قبول به نظر می‌رسید.

در برخی موارد نیز تلاش می‌کردیم متنی را به‌عنوان قالب نگه‌داری کنیم و سپس مقدار متغیر (مانند ۱۵) را به‌صورت دستی به آن اضافه نماییم. این رویکرد موجب می‌شد که ناچار باشیم به‌طور مکرر بین متغیرها جابه‌جا شویم و در نتیجه، کدی تولید شود که خوانایی و نگهداری آن دشوار باشد.

print(my_text + str(grade))

اما این شیوه‌های نگارش چندان مناسب نیستند و ما جایگزینی به‌ مراتب بهتر به نام f-string در اختیار داریم.

تابع ()format در پایتون

از نسخه‌های قبل از پایتون ۳.۶، روشی بود که با استفاده از تابع ()format معرفی شد. این روش به ما امکان می‌دهد تا مقادیر دلخواه را دقیقاً در محل‌هایی مشخص داخل رشته قرار دهیم، بدون اینکه مجبور به اتصال دستی متون و متغیرها باشیم.
در این روش، کافی بود در متن اصلی، در جایی که قرار است مقدار متغیر درج شود، از یک جفت آکولاد باز و بسته {} استفاده کنیم. به این علامت‌ها placeholder یا جای‌نگهدار گفته می‌شود. سپس با فراخوانی متد ()format روی رشته، مقدار مورد نظر را به آن منتقل می‌کردیم.

print("Your Grade is {}")

پایتون به‌صورت خودکار مقدار داده‌شده را در محل {} قرار می‌داد. این باعث می‌شد متن نهایی هم دقیق‌تر و هم خواناتر باشد. به‌عنوان مثال:

print("Your Grade is {}".format(grade))

خروجی:

Your Grade is 15

و سپس ما میتوانستیم عدد 15 را فرمت کنیم:

grade = 15
print("Your Grade is {:.2f}".format(grade))

عدد 15 با دو رقم اعشار نمایش داده می‌شود. خروجی:

Your Grade is 15.00

یا اگر درصد بگذاریم و عدد 15 را به صورت اعشار بنویسیم:

grade = 0.15
print("Your Grade is {:%}".format(grade))

خروجی میشود:

Your Grade is 15.000000%

این روشی بود که در گذشته مورد استفاده قرار می‌گرفت، اما از نسخه‌ی ۳.۶ پایتون به بعد، معرفی مفهوم f-string باعث شد که انجام این کار بسیار ساده‌تر و کارآمدتر شود.

معرفی f-string در پایتون

برای استفاده از f-string در پایتون، کافی است قبل از یک رشته‌ی متنی (string literal) حرف f را قرار دهیم. به این ترتیب، می‌توانیم مستقیماً درون رشته از متغیرها یا حتی عبارات محاسباتی استفاده کنیم، بدون آن‌که نیاز باشد از متد ()format استفاده کنیم: 

my_str = f"Your Grade is {grade:%}"

برای جای‌گذاری متغیرها در یک رشته، از پیشوند f در ابتدای رشته‌ی متنی استفاده می‌کنیم.

نتیجه میشود:

my_str = f"Your Grade is {grade}"
print(my_str)

خروجی:

Your Grade is 15

در یک f-string می‌توان از چندین جای‌نگهدار (Placeholder) به‌صورت هم‌زمان استفاده کرد و به‌این‌ترتیب، چند مقدار مختلف را به‌صورت پویا در متن جای داد. همچنین، درون این جای‌نگهدارها، صرفاً نام متغیرها قرار نمی‌گیرد؛ بلکه می‌توان از عبارت‌های ترکیبی شامل متغیرها، عملگرها، توابع و حتی فیلترها یا مبدل‌های قالب‌بندی نیز استفاده کرد.

به عنوان مثال:

my_str = f"Your Grade is {grade}, {grade/2:.2f}"
print(my_str)

و خروجی:

Your Grade is 15, 7.50

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

my_str = f"Your Grade is {grade}, {grade/2:.4f}, {int('20')}"
print(my_str)

و خروجی:

Your Grade is 15, 7.5000, 20

انواع فرمت‌دهی در f-string

در ادامه بحث f-string، می‌خواهیم با برخی از فرمت‌های رایج برای نوع داده‌ها (type formatting) در پایتون آشنا شویم. این فرمت‌ها به ما کمک می‌کنند تا نحوه‌ی نمایش خروجی را دقیق‌تر کنترل کنیم. در این‌جا چند نمونه از مهم‌ترین و پرکاربردترین مدیاهای فرمت‌دهی را معرفی می‌کنم. سایر موارد را می‌توانید از طریق منابع رسمی یا جستجوی ساده به‌راحتی بیابید و بررسی کنید.

یکی دیگر از انواع قالب‌بندی‌ها، نمایش عدد به صورت نوشتار علمی (Scientific Notation) است. برای مثال، وقتی می‌گوییم 5e2، منظور عدد ۵ ضربدر ۱۰ به توان ۲ است. اگر بخواهیم عددی را در رشته‌ی خود به این شکل نمایش دهیم، باید از یک placeholder استفاده کنیم و داخل آن، پس از علامت دو نقطه (:)، حرف e کوچک را قرار دهیم. این کار باعث می‌شود عدد به صورت نمایی و با نماد e کوچک نمایش داده شود:

print(f"{5000:e}")

و خروجی:

5.000000e+03

حال اگر عدد ما مقدار بزرگی مانند پنج هزار یا بیشتر داشته باشد و بخواهیم برای خوانایی بهتر، ارقام را هر سه رقم از یکدیگر جدا کنیم، می‌توانیم از جداساز استفاده کنیم. برای این منظور، در قالب‌بندی رشته‌ای، می‌توان از , (کاما) برای جداسازی هزارگان استفاده کرد. در این حالت، عدد به‌صورت سه‌رقم سه‌رقم از سمت راست، با کاما از هم جدا می‌شود به‌طور مشابه، اگر به‌جای کاما از _ (آندرلاین) استفاده کنیم، سیستم هزارگان با آندرلاین اعمال می‌شود. مثلاً اگر عددی مانند 5000 را با فرمت مناسب پرینت کنیم:

print(f"{5000:,}")
print(f"{5000:_}")

و خروجی:

5,000
5_000

قالب‌بندی‌های دیگری نیز وجود دارند که شما می‌توانید با جستجوی کلیدواژه‌هایی مانند "Python String Formatting" به تمام مباحثی که در اینجا توضیح داده‌ایم دسترسی پیدا کنید و در انتهای مقاله به موضوع "modifier" خواهید رسید.

خلاصه و جمع‌بندی

اگر بخواهید داخل رشته‌ای که نوشته‌اید، برخی مقادیر را از متغیرها جایگزین کنید، چه راهکارهایی دارید؟
 پیشتر در برخی مثال‌ها به این سوال برخوردید؛ مثلا وقتی می‌خواستید یک مقدار رشته‌ای را از یک متغیر با رشته نوشته شده خودمان ترکیب کنید، از عملگر + استفاده کرده و آن دو را  Concatenate می‌کردید. برای ترکیب مقادیر عددی با رشته‌ها باید راه طولانی‌تری را طی می‌کردید.

در این قسمت می‌خواهیم مفهوم  String Formatting را به شما آموزش دهیم که امروزه در پایتون با  F-string شناخته می‌شود. تا پیش از پایتون نسخه 3.6 برای جانمایی مقدار یک متغیر داخل یک رشته، از متد ()format استفاده می‌شد، اما بعد از آن ساختار  F-string معرفی شد که به مراتب کار را ساده‌تر کرد و اجازه داد برخی  Expression های پایتونی را داخل Placeholder های این ساختار بگنجانید؛ نظیر متغیرها، عملگرها و صدا کردن توابع. در مثال زیر شکل ساده استفاده از این دو روش و مقایسه آن‌ها را می بینید:

1. grade = 20
2. # شکل قدیم
3. my_string = “Your grade is {}”.format(grade)
4. # شیوه جدید
5. new_string = f”Your grade is {grade}” 

# output: Your grade is 20

در این قسمت به طور کامل با نحوه نوشتن F-string آشنا می‌شوید؛ اما برای آشنایی کامل با شیوه فرمت‌دهی سنتی رشته‌ها یعنی استفاده از متد ()format و دیدن لیست انواع  format type های قابل استفاده، به این منبع مراجعه کنید.

آموزش برنامه نویسیpythonآموزش پایتونرشته

sokan-academy-footer-logo
کلیه حقوق مادی و معنوی این وب‌سایت متعلق به سکان آکادمی می باشد.