تابع format

آخرین به‌روزرسانی: ۲۴ اردیبهشت ۱۴۰۵

تابع format در پایتون یک تابع پیش‌ساخته (built-in) است که یک مقدار را با توجه به یک الگوی قالب‌بندی مشخص، به استرینگ تبدیل می‌کند. این تابع، ابزاری انعطاف‌پذیر برای نمایش اعداد، تاریخ‌ها و سایر داده‌ها در قالب‌های خوانا و استاندارد است.

سینتکس تابع format

سینتکس کلی تابع format به صورت زیر است:

format(value, format_spec="")

پارامترها یا آرگومان‌های این سینتکس عبارتند از:

  • آرگومان value مقداری است که می‌خواهیم قالب‌بندی شود؛ می‌تواند عدد صحیح، اعشاری، استرینگ یا هر آبجکتی باشد که متد __format__ را پیاده‌سازی کرده است.
  • آرگومان format_spec یک استرینگ اختیاری است که نحوه نمایش value را تعیین می‌کند. مقدار پیش‌فرض آن استرینگ خالی “” است که باعث می‌شود پایتون از رفتار پیش‌فرض قالب‌بندی آن نوع داده استفاده کند.

مقدار بازگشتی تابع format همیشه یک استرینگ است که نمایش قالب‌بندی‌شده value را در بر دارد.

کاربردهای تابع format

ساده‌ترین مثال از کاربرد این تابع می‌تواند حالت زیر باشد:

>>> format(3.14159, ".2f")
'3.14'
>>> format(1000000, ",")
'1,000,000'

یا می‌توان اعداد را در مبناهای مختلف نمایش داد:

>>> format(255, "b")
'11111111'
>>> format(255, "x")
'ff'
>>> format(255, "o")
'377'

در صورتی که format_spec خالی باشد، تابع پایتونی format رفتاری مشابه تابع ()str خواهد داشت:

>>> format(42)
'42'
>>> format(3.14)
'3.14'

رایج‌ترین کاربردهای تابع format عبارتند از:

  • نمایش اعداد اعشاری با تعداد رقم‌های اعشار مشخص،
  • اضافه کردن جداکننده هزارگان به اعداد بزرگ،
  • چیدمان متن به صورت چپ‌چین، راست‌چین یا وسط‌چین با عرض ثابت،
  • نمایش اعداد در مبناهای ۲، ۸ و ۱۶.

قالب‌بندی اعداد با تابع format

با استفاده از پسوند f می‌توانید تعداد رقم‌های اعشار را کنترل کنید. تعداد ارقام اعشاری مدنظر، قبل از کاراکتر f می‌آید:

>>> format(3.14159265, ".3f")
'3.142'
>>> format(0.5, ".0f")
'0'

استفاده از کاراکتر % در آرگومان دوم تابع، مقدار آرگومان اول را در ۱۰۰ ضرب کرده و علامت درصد اضافه می‌کند. تعداد ارقام اعشاری مدنظر، قبل از کاراکتر % می‌آید:

>>> format(0.75, ".1%")
'75.0%'
>>> format(1/3, ".2%")
'33.33%'

برای نمایش اعداد بزرگ به صورت خوانا می‌توانید از , به عنوان جداکننده هزارگان استفاده کنید:

>>> format(1234567, ",")
'1,234,567'
>>> format(9876543.21, ",.2f")
'9,876,543.21'

می‌توانید حداقل عرض نمایش را مشخص کنید؛ این قابلیت برای ساخت جدول‌های متنی بسیار مفید است:

>>> format(42, "10d")
'        42'
>>> format("Hello", "10")
'Hello      '

به جای فاصله خالی، می‌توانید هر کاراکتری را به عنوان پُرکننده (fill character) تعریف کنید:

>>> format(7, "0>5d")
'00007'
>>> format("python", "*^20")
'*******python*******'

مثال واقعی از تابع format

در یک سناریوی فرضی، شما می‌خواهید گزارش مالی ساده‌ای را به صورت جدول متنی چاپ کنید. با استفاده از تابع پایتونی format می‌توانید ستون‌ها را منظم تراز کنید:

products = [
    ("laptop", 45000000, 0.09),
    ("mouse", 850000, 0.18),
    ("keyboard", 1200000, 0.18),
]

print(format("product", "<15") + format("price", ">15") + format("tax", ">10"))
print("-" * 40)

for name, price, tax in products:
    print(
        format(name, "<15") +
        format(price, ">15,") +
        format(tax, ">10.0%")
    )

خروجی این کد به صورت زیر خواهد بود:

product                  price       tax
----------------------------------------
laptop              45,000,000        9%
mouse                  850,000       18%
keyboard             1,200,000       18%

در این مثال، تابع پایتونی format به شما امکان می‌دهد هر ستون را با عرض ثابت و تراز مشخص نمایش دهید و خروجی خوانایی داشته باشید.

تفاوت تابع format با f-string و متد format

در پایتون سه روش اصلی برای قالب‌بندی استرینگ‌ها وجود دارد که هر کدام کاربرد مشخصی دارند:

  • تابع format(value, spec) برای قالب‌بندی یک مقدار منفرد طراحی شده و مستقیماً متد __format__ آبجکت را فراخوانی می‌کند.
  • متد ()format. روی استرینگ‌های قالب (template strings) عمل می‌کند و امکان جایگذاری چند مقدار در یک استرینگ را فراهم می‌کند.
  • f-string ها (از پایتون 3.6 به بعد) خواناترین و سریع‌ترین روش برای قالب‌بندی استرینگ‌ها هستند.
>>> price = 1234567.89

>>> print(format(price, ",.2f"))
1,234,567.89

>>> print("Price: {:,.2f} Rials".format(price))
Price: 1,234,567.89 Rials

>>> print(f"Price: {price:,.2f} Rials")
Price: 1,234,567.89 Rials

توجه کنید که format_spec در هر سه روش یکسان است؛ تفاوت فقط در نحوه استفاده از آن‌هاست.

سوالات متداول

  1. تفاوت تابع format و متد ()format. چیست؟

    تابع format(value, spec) یک تابع مستقل است که برای قالب‌بندی یک مقدار منفرد استفاده می‌شود و مستقیماً متد __format__ آبجکت را فراخوانی می‌کند. اما متد ()format. روی یک استرینگ قالب فراخوانی می‌شود و امکان قرار دادن چندین مقدار در موقعیت‌های مختلف یک استرینگ را می‌دهد.

  2. آیا می‌توان از تابع format برای قالب‌بندی کلاس‌های دلخواه استفاده کرد؟

    بله. اگر در کلاس دلخواه خود متد __format__ را تعریف کنید، این تابع می‌تواند آبجکت‌های آن کلاس را نیز قالب‌بندی کند. این یکی از ویژگی‌های قدرتمند سیستم قالب‌بندی پایتون است.

  3. f-string بهتر است یا تابع format؟

    برای قالب‌بندی رشته‌های معمولی در کد، f-string خواناتر و سریع‌تر است. اما تابع پایتونی format زمانی مفیدتر است که بخواهید format_spec را به صورت پویا (در زمان اجرا) تعیین کنید یا یک مقدار منفرد را بدون نیاز به ساخت استرینگ قالب، قالب‌بندی کنید.

  4. اگر آرگومان دوم تابع format را خالی بگذارم چه اتفاقی می‌افتد؟

    اگر آرگومان دوم یا format_spec خالی باشد یا وارد نشود، این تابع خروجی‌ای مشابه str(value) تولید می‌کند؛ یعنی نمایش پیش‌فرض آن نوع داده را برمی‌گرداند.

جهت کسب اطلاعات بیشتر می‌توانید به مستندات رسمی پایتون برای تابع format مراجعه کنید.


دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

مشاوره رایگان

علاقمند به یادگیری طراحی سایت یا دنبال مشاوره در این زمینه هستی؟