در پایتون، چندین روش برای ارائه خروجی برنامه وجود دارد. دادهها میتوانند به صورت متون قابل خواندن برای انسان نمایش داده شوند، یا برای استفاده در آینده در یک فایل نوشته شوند، یا حتی به شکل های مشخص دیگری نمایش داده شوند.
در نتیجه کاربران اغلب میخواهند کنترل بیشتری روی فرمتبندی خروجی داشته باشند، یعنی به دنبال چیزی بیشتر از فقط چاپ کردن مقادیری که با فاصله از هم جدا شده اند، هستند. همانطور که متوجه شده اید در درس چهاردهم از آموزش رایگان پایتون در سایت دیتایاد می خواهیم در مورد فرمت بندی خروجی در پایتون صحبت کنیم.
فرمتبندی خروجی در پایتون
چندین روش برای فرمتبندی خروجی با استفاده از متد رشته در پایتون وجود دارد.
- استفاده از عملگر رشته ماژول (String Modulo Operator) (%)
- استفاده از متد فرمت (Format)
- استفاده از متد رشته (String Method)
- قانون تبدیل فرمت پایتون (Python’s Format Conversion Rule)
فرمتبندی خروجی با استفاده از عملگر رشته ماژول (%)
عملگر ماژول % همچنین میتواند برای فرمتبندی رشته استفاده شود. این عملگر، آرگومان چپ را به شکلی مشابه فرمت printf در زبان C میتواند تفسیر کند و به آرگومان راست اعمال کند. در پایتون تابع printf وجود ندارد، اما عملکرد printf قدیمی در پایتون وجود دارد. به این منظور، از عملگر ماژول % موجود در کلاس رشته برای انجام این نوع از فرمتبندی رشتهای استفاده میشود.
بنابراین، اغلب به عنوان عملگر ماژول رشته (و البته بسته به مورد استفاده، عملگر باقیمانده) شناخته میشود. عملگر ماژول رشته (%) هنوز در پایتون 3.x موجود است و به طور گستردهای استفاده میشود. اما در حال حاضر سبک قدیمی فرمتبندی از این زبان حذف شده است.
# Python program showing how to use string modulo operator(%) print("Geeks : %2d, Portal : %5.2f" % (1, 05.333)) print("Total students : %3d, Boys : %2d" % (240, 120)) # print integer value print("%7.3o" % (25)) # print octal value print("%10.3E" % (356.08977)) # print exponential value
خروجی:
Geeks : 1, Portal : 5.33 Total students : 240, Boys : 120 031 3.561E+02
در مثال ما دو placeholder (نگهدارنده مکان) وجود دارند: “2d%” و “5.2f%”.
سینتکس صحیح برای این نوع placeholder به صورت زیر است:
%[flags][width][.precision]type
بیایید نگاهی به این placeholder در این مثال بیندازیم.
- نگهدارنده مکان اول “2d%” برای جزء اول تاپل ما، یعنی عدد صحیح 1، استفاده میشود. این عدد با 2 کاراکتر چاپ میشود و چون عدد 1 تنها از یک رقم تشکیل شده است، خروجی با یک فضای خالی ابتدایی پر میشود.
- نگهدارنده مکان دوم “5.2f%” برای یک عدد اعشاری استفاده میشود. مانند مکاننگهدارندههای دیگر، با کاراکتر % معرفی میشود. این مکاننگهدارنده تعداد کل رقمهایی را که رشته باید شامل شود را مشخص میکند، و این شامل نقطه اعشار و تمام رقمها، هم قبل و هم بعد از نقطه اعشار میشود.
- عدد اعشاری 05.333 با استفاده از 5 کاراکتر و دقت 2، که با عدد بعد از ‘.’ در مکاننگهدارنده مشخص میشود، فرمت دهی میشود. کاراکتر آخر ‘f’ نشان میدهد که مکاننگهدارنده مقدار عدد اعشاری را نمایش میدهد.
فرمت بندی خروجی با استفاده از متد فرمت
متد format در پایتون 2.6 به بعد معرفی شده است. این متد به ما اجازه میدهد که خروجی را با استفاده از روشهای فرمتبندی رشتهها به صورت دستی بیشتر کنترل کنیم. کاربران از \{\} برای نشان دادن جایی که یک متغیر جایگزین خواهد شد استفاده میکنند و میتوانند دستورات دقیق فرمتبندی را ارائه دهند، اما کاربر باید اطلاعاتی که برای فرمت لازم هستند را ارائه دهد.
این متد به ما امکان ادغام عناصر در داخل یک خروجی از طریق فرمتبندی موقعیتی را میدهد.
مثال 1: این کد به توضیح روشهای مختلف فرمتبندی رشته در پایتون میپردازد. مقادیر متغیرها یا به صورت صریح اعلام میشوند، یا با ارجاع به ترتیب ظاهر شدن آنها در متد format، بدر زمان چاپ استفاده میشوند.
روش f-string (یا همان رشته f) این امکان را فراهم میکند که از پرانتزهای نمادین و پیشوند f برای جاسازی متغیرها در درون رشتههای ثابت استفاده کنیم. در این روش، متغیرهای f-Strings ارزیابی میشوند و مقادیر مربوطه به جای آنها جایگزین میشوند.
print('I love {} and its "{}!"'.format('datayad', 'website')) # using format() method and referring a position of the object print('{0} and {1}'.format('datayad', 'Portal')) print('{1} and {0}'.format('datayad', 'Portal')) print(f"I love {'datayad'} and its \"{'website'}!\"") # using format() method and referring a position of the object print(f"{'datayad'} and {'Portal'}")
خروجی:
I love datayad and its "website!" datayad and Portal Portal and datayad I love datayad and its "website!" datayad and Portal
پرانتزها و کاراکترهای درون آنها (که فیلدهای فرمت نامیده میشوند) با اشیاءی که به متد format منتقل شدهاند جایگزین میشوند. با استفاده از یک عدد در درون پرانتزها میتوان به موقعیت شیء منتقل شده در متد format اشاره کرد.
مثال 2: با استفاده از پارامترهای موقعیتی و یک آرگومان به نام ‘other’ در خط اول، مقادیر ‘Geeks’، ‘For’ و ‘Geeks’ به قالب رشته اضافه میشوند.
عبارات ‘Geeks:12، Portal: 0.55’ چاپ میشود.
البته در حالی که عبارت اول به عنوان یک عدد دو رقمی و مقدار دوم دارای دو رقم اعشار و یک عرض 8 بیتی خواهد بود. در ادامه نیز، آرگومانهای نامگذاری شده متد format که با برچسبهای مشخص (‘a’ و ‘p’) برای اعداد ‘453’ و ‘59.058’ چاپ میشوند.
# combining positional and keyword arguments print('Number one portal is {0}, {1}, and {other}.' .format('Geeks', 'For', other ='Geeks')) # using format() method with number print("Geeks :{0:2d}, Portal :{1:8.2f}". format(12, 00.546)) # Changing positional argument print("Second argument: {1:3d}, first one: {0:7.2f}". format(47.42, 11)) print("Geeks: {a:5d}, Portal: {p:8.2f}". format(a = 453, p = 59.058))
خروجی:
Number one portal is Geeks, For, and Geeks. Geeks :12, Portal : 0.55 Second argument: 11, first one: 47.42 Geeks: 453, Portal: 59.06
نمودار زیر با یک مثال نشان میدهد که متد format در رابطه با پارامترهای موقعیتی چگونه عمل میکند:
مثال 3: این کد نشان میدهد چگونه از دیکشنریها با متد format در پایتون استفاده کنیم. در اولین مثال، دیکشنری با نام tab کلیدها و مقادیر مرتبط با خودش را دارد. متد format با کمک ایندکسگذاری مقادیر را درون قالب رشته قرار میدهد. در مثال دوم، کلیدهای نامگذاری شده در یک دیکشنری به عنوان “data1” و “data2” استفاده شده است.
tab = {'datayad': 4127, 'for': 4098, 'all': 8637678} # using format() in dictionary print('datayad: {0[geeks]:d}; For: {0[for]:d}; ' 'all: {0[geek]:d}'.format(tab)) data = dict(fun ="datayad", adj ="Portal") print("I love {fun} computer {adj}".format(**data))
خروجی:
datayad: 4127; For: 4098; all: 8637678 I love datayad computer Portal
فرمتبندی خروجی با استفاده از متد رشته
در این حالت، خروجی با استفاده از متد رشته فرمت بندی می شود، مثلاً از طریق عملیات برش و ادغام رشتهها انجام میشود.
نوع رشته دارای متدهایی هست که در قالببندی خروجی به شکل جالبی به ما کمک میکنند. برخی از متدهایی که در قالببندی خروجی کمک میکنند، عبارتند از: str.ljust ،str.rjust و str.center
cstr = "I love datayad" # Printing the center aligned string with fillchr print("Center aligned string with fillchr: ") print(cstr.center(40, '#')) # Printing the left aligned string with "-" padding print("The left aligned string is : ") print(cstr.ljust(40, '-')) # Printing the right aligned string with "-" padding print("The right aligned string is : ") print(cstr.rjust(40, '-'))
خروجی:
Center aligned string with fillchr: ##########I love datayad########## The left aligned string is : I love datayad-------------------- The right aligned string is : --------------------I love datayad
قانون تبدیل فرمت در پایتون
در جدول زیر راهنمای استفاده از “تبدیل فرمت استاندارد ” که توسط تابع format در پایتون استفاده میشود، آورده شده است.
Meaning | Conversion |
Decimal integer | d |
Binary format | b |
octal format | o |
Obsolete and equivalent to d | u |
Hexadecimal format | x or X |
Exponential notation | e or E |
Floating-point decimal | f or F |
General format | g or G |
Single Character | c |
String format(using repr()) | r |
String format(using str()) | s |
Percentage | % |