تابع 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 در هر سه روش یکسان است؛ تفاوت فقط در نحوه استفاده از آنهاست.
سوالات متداول
-
تفاوت تابع format و متد ()format. چیست؟
تابع
format(value, spec)یک تابع مستقل است که برای قالببندی یک مقدار منفرد استفاده میشود و مستقیماً متد__format__آبجکت را فراخوانی میکند. اما متد()format.روی یک استرینگ قالب فراخوانی میشود و امکان قرار دادن چندین مقدار در موقعیتهای مختلف یک استرینگ را میدهد. -
آیا میتوان از تابع format برای قالببندی کلاسهای دلخواه استفاده کرد؟
بله. اگر در کلاس دلخواه خود متد
__format__را تعریف کنید، این تابع میتواند آبجکتهای آن کلاس را نیز قالببندی کند. این یکی از ویژگیهای قدرتمند سیستم قالببندی پایتون است. -
f-string بهتر است یا تابع format؟
برای قالببندی رشتههای معمولی در کد، f-string خواناتر و سریعتر است. اما تابع پایتونی format زمانی مفیدتر است که بخواهید format_spec را به صورت پویا (در زمان اجرا) تعیین کنید یا یک مقدار منفرد را بدون نیاز به ساخت استرینگ قالب، قالببندی کنید.
-
اگر آرگومان دوم تابع format را خالی بگذارم چه اتفاقی میافتد؟
اگر آرگومان دوم یا format_spec خالی باشد یا وارد نشود، این تابع خروجیای مشابه str(value) تولید میکند؛ یعنی نمایش پیشفرض آن نوع داده را برمیگرداند.
جهت کسب اطلاعات بیشتر میتوانید به مستندات رسمی پایتون برای تابع format مراجعه کنید.