قالببندی رشتهها (String Formatting) در پایتون
در پایتون، ترکیب متغیرها با رشتهها میتواند به روشهای مختلفی انجام شود. قالببندی رشته روشی قدرتمند، منعطف و خوانا برای قرار دادن مقادیر مختلف درون رشتههاست، بدون نیاز به تبدیل دستی آنها به رشته.
۱. استفاده از str.format()
روش format یکی از راههای کلاسیک برای قالببندی رشتههاست. در این روش، با استفاده از آکولاد {} جاهای خالی در متن مشخص میشود و مقادیر از طریق format() جایگزین میگردند.
nums = [4, 5, 6]
msg = "Numbers: {0} {1} {2}".format(nums[0], nums[1], nums[2])
print(msg)
خروجی:
Numbers: 4 5 6
همچنین میتوانید از پارامترهای نامگذاریشده استفاده کنید:
text = "{x}, {y}".format(x=5, y=12)
print(text)
5, 12
۲. قالببندی با f-strings (از پایتون 3.6 به بعد)
f-string یا formatted string literal راهی مدرن، سریع و خواناتر برای قالببندی رشتههاست. در این روش، متغیرها مستقیماً داخل رشته و داخل آکولاد استفاده میشوند، با پیشوند f در ابتدای رشته.
name = "Alice"
age = 30
msg = f"{name} is {age} years old."
print(msg)
Alice is 30 years old.
مزیت f-string: پشتیبانی از عبارات داخل آکولاد:
a = 10
b = 5
print(f"{a} + {b} = {a + b}")
10 + 5 = 15
۳. استفاده از عملگر % (روش قدیمی)
این روش که از زبان C الهام گرفته شده، در پایتون قدیمیتر استفاده میشد و هنوز هم پشتیبانی میشود، ولی پیشنهاد نمیشود مگر برای سازگاری با کدهای قدیمی.
name = "Bob"
age = 25
print("Name: %s, Age: %d" % (name, age))
Name: Bob, Age: 25
۴. قالببندی با مشخصات دقیقتر
در هر روش میتوان قالببندی عددی، اعشار، تراز، و پر کردن را نیز کنترل کرد. مثالها:
# تنظیم تعداد اعشار
pi = 3.14159265
print(f"π ≈ {pi:.2f}") # π ≈ 3.14
# تراز راست
print(f"{'Product':>10} | {'Price':>5}")
print(f"{'Apple':>10} | {5:>5.2f}")
# پر کردن با صفر
print(f"{42:04d}") # 0042
تغییرات در نسخههای جدید پایتون:
- پایتون 3.6: معرفی f-string به عنوان سریعترین و خواناترین روش.
- پایتون 3.8: پشتیبانی از عملگر
:=(walrus) در f-string برای تخصیص همزمان.
print(f"{(n := 10) * 2}") # 20
جدول تکمیلی عملیات های مبتنی بر f-string
| عملیات | کد فرمت | توضیح | مثال | خروجی نمونه |
|---|---|---|---|---|
| اعشاری (Float) | :.nf |
نمایش n رقم اعشار (گرد شده) | f"{3.1415:.2f}" |
3.14 |
| اعشاری (Float) | :.0f |
گرد کردن به عدد صحیح | f"{3.6:.0f}" |
4 |
| صحیح (Integer) | :0nd |
پر کردن با صفر تا عرض n | f"{5:03d}" |
005 |
| صحیح (Integer) | :,d |
جداکننده هزارگان | f"{1000000:,}" |
1,000,000 |
| درصد (Percentage) | :% |
تبدیل به درصد (×۱۰۰) | f"{0.85:%}" |
85.000000% |
| درصد (Percentage) | :.nf% |
درصد با n رقم اعشار | f"{0.856:.1%}" |
85.6% |
| نماد علمی | :e |
نماد علمی (پاییننویس e) | f"{1000:e}" |
1.000000e+03 |
| نماد علمی | :.nE |
نماد علمی با حرف بزرگ E | f"{1000:.2E}" |
1.00E+03 |
| علامت (Sign) | :+ |
نمایش علامت مثبت/منفی | f"{5:+}" |
+5 |
| فضای خالی | : n |
فاصله برای اعداد مثبت | f"{5: n}" |
5 |
| باینری (Binary) | :b |
مبنای ۲ (بدون پیشوند) | f"{5:b}" |
101 |
| باینری (Binary) | :#b |
مبنای ۲ (با پیشوند 0b) | f"{5:#b}" |
0b101 |
| اوکتال (Octal) | :o |
مبنای ۸ (بدون پیشوند) | f"{8:o}" |
10 |
| اوکتال (Octal) | :#o |
مبنای ۸ (با پیشوند 0o) | f"{8:#o}" |
0o10 |
| هگز (Hex) | :x |
مبنای ۱۶ (حروف کوچک) | f"{255:x}" |
ff |
| هگز (Hex) | :X |
مبنای ۱۶ (حروف بزرگ) | f"{255:X}" |
FF |
| هگز (Hex) | :#x |
مبنای ۱۶ (با پیشوند 0x) | f"{255:#x}" |
0xff |
| کامما (Comma) | , |
جداکننده هزارگان | f"{1000:,}" |
1,000 |
| دقت پویا | .{var}f |
تعیین اعشار با متغیر | f"{3.14:.{2}f}" |
3.14 |