قالب‌ بندی خروجی در پایتون - آموزش پایتون مقدماتی - قسمت هشتم

دسته بندی: پایتون
زمان مطالعه: 9 دقیقه
۲۶ فروردین ۱۳۹۹

قالب‌ بندی خروجی در پایتون:

در مقاله‌ی قبل از مجموعه آموزش‌های مقدماتی پایتون در خصوص دستورات ورودی و خروجی در پایتون توضیح داده شد. اما، به عنوان یک برنامه‌ نویس لحظات زیادی برای شما پیش خواهد آمد که می‌خواهید داده‌های حاصل از پردازش برنامه‌تان را در خروجی چاپ کنید. لازم به ذکر است که نمایش داده‌ها همیشه در صفحه نمایش نیست بلکه می‌تواند یک فایل، چاپگر یا صفحه‌ی وب باشد. صرف‌نظر از نوع خروجی آن‌چه برای برنامه‌ نویسان اهمیت خواهد داشت نمایشی خوانا و کاربر پسند (human-readable) از داده‌های پردازش شده است. در این مقاله با امکانات زبان برنامه‌ نویسی پایتون برای نمایش داده‌ها به شکلی خوانا و و کاربر پسند آشنا خواهید شد.

فهرست محتوای این مقاله

قالب‌ بندی خروجی در تابع ()print در پایتون

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

  • به‌کارگیری از اپراتور پیمانه‌ای رشته ٪: این اپراتور همراه با کاراکترهای مشخصی به عنوان یک نگهدارنده برای نمایش داده‌ها در خروجی در داخل علامت کوتیشن قرار داده می‌شود.
  • به‌کارگیری ()str.format: با استفاده از این روش می‌توان خروجی بسیار کاربر پسند ایجاد کرد.
  • به‌کارگیری متدهای رشته‌ای: در پایتون برای برش زدن و یا اتصال رشته، اپراتورهایی وجود دارد که توسط آن‌ها می‌توان خروجی کاربر پسند را ایجاد کرد. این اپراتورها padding یک رشته را تغییر می‌دهند تا در ستون‌ها با فواصل مختلف قرار گیرند.
  • به‌کارگیری f-string: رشته-اف یک نحو جدیدی است که در ساده‌سازی قالب بندی رشته‌ها نقش مهمی دارد.

قالب‌ بندی خروجی در پایتون با اپراتور پیمانه‌ای رشته‌ %

از اپراتور پیمانه‌ای رشته %‌ می‌توان برای قالب‌ بندی خروجی استفاده کرد. برخلاف سایر زبان‌های برنامه نویسی مانند ++C، C و جاوا که برای چاپ داده‌ها در خروجی از تابع ()printf برای طرح بندی خروجی استفاده می‌شود، در پایتون از اپراتور پیمانه‌ای % استفاده می‌شود. وقتی از این اپراتور استفاده می‌شود کلاس رشته در پایتون به منظور قالب بندی داده در خروجی بارگذاری می‌شود، تا داده به شکلی مناسب و مطابق دستور برنامه‌نویس در خروجی نمایش داده شود. به همین دلیل است که به  کاراکتر % در پایتون اپراتور پیمانه‌ای رشته ( string modulo operator ) می‌گویند. با فراخوانی این اپراتور می‌توان طرح مناسبی را برای داده‌ها در خروجی در نظر گرفت.

برای آشنایی و درک به‌کارگیری این اپراتور به مثال زیر توجه کنید:

# Python program showing how to use 
# string modulo operator(%) to print 
# fancier output 

# print integer and float value 
print("7learn: % 2d, Portal : % 5.2f" %(1, 05.333)) 

# print integer value 
print("Total students : % 3d, Boys : % 2d" %(2400, 1200)) 

# print octal value 
print("% 7.3o"% (25)) 

# print exponential value 
print("% 10.3E"% (356.08977)) 

7learn : 1, Portal : 5.33

Total students : 2400, Boys : 1200

031

3.561E+02

آن‌چه در این مثال بسیار اهمیت دارد نگهدارنده‌های طرح رشته توسط 2d% و 5.2f% است.

نگهدارنده‌ی طرح رشته

در پایتون داده ساختاری به نام tuple وجود دارد. هر مجموعه داده‌ای که در داخل پرانتز قرار گیرد پایتون آن را به عنوان داده از نوع tuple شناسایی می‌کند. در دستور ()print اپراتور پیمانه‌ای رشته شامل یک tuple است که داده‌ها و یا متغیرها در آن قرار می‌گیرند. اپراتور پیمانه‌ای اگر در داخل رشته قرار گیرد نگهدارنده طرح‌ یا قالب خروجی است. فرم کلی نگهدارنده‌ی طرح‌ بندی رشته به صورت زیر است:
%[flags][width][.precision]type

شرح اجزای نگهدارنده‌ی طرح رشته

در این فرم اجزای نگهدارنده‌‌ی قالب معرفی شده است که شامل
  • flags‌: نگهدارنده‌ی قالب علامت یک عدد است.
  • width: نگهدارنده‌ی طول کامل عددی شامل علامت، بخش صحیح و بخش اعشاری عددی است که باید در خروجی چاپ شود.
  • precision: نگهدارنده‌ی بخش اعشاری عددی است که قرار است در خروجی چاپ شود. توجه کنید این بخش از طول کامل کم می‌شود.
  • type: نگهدارنده‌ی نوع عددی است که باید در خروجی چاپ شود. برای مثال برای اعداد اعشاری f و برای اعداد صحیح d و برای رشته‌ی s قرار می‌گیرد.

توصیف نگهدارنده‌ی رشته با مثال

در مثال بالا دو عدد ۱ و ۰۵.۳۳ در تاپل  (tuple) قرار گرفته است. این اعداد به ترتیب در نگهدرانده‌ی قالب قرار می‌گیرند. عدد ۱ در نگهدارنده‌ی قالب 2d% و عدد ۰۵.۳۳ در نگهدارنده‌ی قالب 5.2f% قرار می‌گیرد.

  • نگهدارنده‌ی قالب عدد ۱ دارای طولی به اندازه‌ی ۲ کاراکتر است و بخش اعشاری ندارد و نوع آن عدد صحیح است. بدیهی است که چون طول نگهدارنده‌ی قالب از تعداد کاراکتر عدد بیشتر است و در نتیجه عدد یک در منتهی‌الیه سمت راست نگهدارنده قرار گرفته و به اندازه‌ی یک کاراکتر سمت چپ آن خالی می‌ماند. چنانچه طول نگهدارنده‌ی قالب کمتر از تعداد کاراکترهای عدد باشد پایتون به طور اتوماتیک طول نگهدارنده را افزایش می‌دهد.
  • نگهدارنده‌ی قالب عدد ۰۵.۳۳ دارای طول ۵، بخش اعشاری ۲ و نوع آن اعشاری است. عدد ۰۵.۳۳ در مجموع شامل ۵ کاراکتر است. بنابراین بخش اعشاری شامل دو کاراکتر ۳۳، یک کاراکتر برای نقطه اعشار و یک کاراکتر هم برای عدد ۵ یعنی بخش صحیح عدد اختصاص داده می‌شود.

قالب‌ بندی خروجی در پایتون با به‌کارگیری روش format

در پایتون متدی به نام ()format وجود دارد. این متد در پایتون ۲.۶ به بعد اضافه شده است. با به‌کارگیری این متد و استفاده از کروشه باز و بسته { } در ساختار رشته می‌توان مقادیر متغیر را در مکان‌های مورد نظر در رشته قرار داد.  با به‌کارگیری این متد می‌توان قالب بندی خروجی را بر اساس موقعیت‌هایی که توسط کروشه‌ها تعیین می‌شود در رشته‌ی خروجی نمایش داد. به مثال زیر توجه کنید:

# Python program showing 
# use of format() method 

# using format() method 
print('I love {} for "{}!"'.format('7learn', 'applied education')) 

# using format() method and refering 
# a position of the object 
print('{0} and {1}'.format('7learn', 'Portal')) 

print('{1} and {0}'.format('7learn', 'Portal')) 

 

I love 7learn for "applied education!"

7learn and Portal

Portal and 7learn

اشیا پاس داده شده توسط متد format در داخل کروشه‌ها (که اصطلاحا به آن‌ها فیلد نیز گفته می‌شود)  جایگزین شده و در رشته‌ی خروجی نمایش داده می‌شود. اعداد داخل کروشه‌ها به شماره‌ی شی پاس داده شده در متد format‌ اشاره می‌کند.
# Python program showing 
# a use of format() method 

# combining positional and keyword arguments 
print('Number one portal is {0}, {1}, and {other}.'
	.format('7learn', 'For', other ='https://7learn.ac')) 

# 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("7learn: {a:5d}, Portal: {p:8.2f}". 
	format(a = 453, p = 59.058)) 

Number one portal is 7learn, For, and htps://7learn.ac.

7learn :12, Portal : 0.55

Second argument: 11, first one: 47.42

7learn: 453, Portal: 59.06

شکل زیر نحوه‌ی عملکرد متد format را برای نمایش داده در خروجی نشان می‌دهد.
# Python program to 
# show format () is 
# used in dictionary 

tab = {'7learn': 4127, 'for': 4098, '7learn.ac': 8637678} 

# using format() in dictionary 
print('7learn: {0[7learn]:d}; For: {0[for]:d}; '
	'7learn: {0[7learn.ac]:d}'.format(tab)) 

data = dict(fun ="7learn", adj ="Portal") 

# using format() in dictionary 
print("I love {fun} computer {adj}".format(**data)) 

7learn: 4127; For: 4098; 7learn: 8637678

I love 7learn computer Portal

قالب‌ بندی خروجی در پایتون با به‌کارگیری متد string

در این روش طرح‌بندی، از اپراتور‌های برشی و اتصالی رشته‌ها استفاده می‌شود. نوع داده رشته‌ای دارای متدهایی است که از آن می‌توان برای زیباتر کردن نمایش رشته در خروجی استفاده کرد. که متدهای ()str.ljust و ()str.rjust و ()str.center را می‌توان نام برد. به مثال زیر توجه کنید:
# Python program to
# format a output using
# string() method

cstr = "I love 7learn.ac"

# 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 7learn.ac############

The left aligned string is :

I love 7learn.ac------------------------

The right aligned string is :

------------------------I love 7learn.ac

قالب‌ بندی خروجی در پایتون با به‌کارگیری f-string

رشته-اف پایتون یک نحو جدید برای طرح‌بندی رشته در پایتون است که از پایتون ۳.۶ به این زبان اضافه شده است. رشته-اف پایتون سرعت، خوانایی، اختصار و حداقل خطا را در طرح‌بندی و نمایش رشته‌ها را در خروجی فراهم می‌کند. رشته-اف دارای یک پیشوند f همراه با کروشه { } است که مقادیر عددی یا مقادیر متغیرها پس از ارزیابی در آن قرار می‌گیرد. مشخصات قالب شامل نوع، اندازه و تراز  پس از علامت :‌ قرار می‌گیرند. برای مثال:
f'{price:.3}'
که در این مثال price‌ نام متغیر است.

عبارات در رشته-اف

یک عبارت را می‌توان در بین کروشه‌های { } قرار داد.
#!/usr/bin/env python3

bags = 3
apples_in_bag = 12

print(f'There are total of {bags * apples_in_bag} apples')
There are total of 36 apples
این مثال نشان می‌دهد که یک عبارت می‌تواند در داخل رشته-اف ارزیابی و مقدار آن تعیین شود.
tag = 'skills'
print(f"{val} is a portal for {tag}.")

name = 'Loghman'
age = 30
print(f"Hello, My name is {name} and I'm {age} years old.") 

7learn is a portal for skills.

Hello, My name is Loghman and I'm 30 years old.

رشته-اف چند خطی در پایتون

از رشته-اف می‌توان در رشته‌های چندخطی استفاده کرد. برای روشن شدن موضوع به مثال زیر توجه کنید:
name = 'John Doe'
age = 32
occupation = 'gardener'
msg = (
    f'Name: {name}\n'
    f'Age: {age}\n'
    f'Occupation: {occupation}'
)
print(msg)

Name: John Doe

Age: 32

Occupation: gardener

رشته-اف قالب بندی dattime

از رشته-اف می‌توان برای نمایش تاریخ در رشته استفاده کرد. به مثال زیر توجه کنید:
# Prints today's date with help 
# of datetime library 
import datetime 

today = datetime.datetime.today() 
print(f"{today:%B %d, %Y}") 
April 14, 2020
نکته :

رشته-اف نسبت به دو روش str.format و ٪ به لحاظ مکانیزم اجرا، سریعتر است.

نتیجه‌گیری:
برای قالب‌ بندی داده‌ها به منظور چاپ در خروجی پایتون روش‌های مختلفی دارد که در این مقاله به سه روش آن اشاره شد. پایتون یک اپراتور پیمانه‌ای رشته‌ دارد که برای به‌کارگیری آن از کاراکتر %‌ استفاده می‌شود. این اپراتور مانند یک نگهدارنده قالب مقادیر عددی صحیح یا اعشاری و همچنین رشته‌ای را تعیین می‌کند. در یک روش دیگر می‌توان از متد formt در پایتون برای قالب‌بندی خروجی استفاده کرد. در این متد نیز موقعیت قالب توسط کروشه مشخص می‌شود. رشته در پایتون متد‌های زیادی دارد که بخشی از آن‌ها برای مدیریت قالب‌ بندی نمایش داده‌ها در خروجی است. به عنوان روشی ساده، کارآمد با  سرعت، خوانایی، اختصار و حداقل خطا برای طرح‌بندی و نمایش رشته‌ها در خروجی رشته-اف را می‌توان استفاده کرد. در مقاله‌ی بعدی به ساختار داده در پایتون پرداخته خواهد شد.
یادگیری زبان پایتون بسیار ساده است. و با شرکت در دوره‌ی متخصص پایتون توسعه وب در آینده می‌تونی اپلیکیشن موبایل و دستکتاپ بسازی و وارد حوزه‌ی هوش مصنوعی هم بشوی.
چه امتیازی به این مقاله می دید؟
نویسنده حسین ملهم
هر کس تو دنیا به چیزی حریص است. وقتی به زندگی خودم توجه کردم برام جالب بود، چون متوجه شدم به دوچیز حریص هستم آموختن و آموزش دادن، اگر زندگی تکراری داشته باشد دوباره همین مسیر رو میرم. بهترین لذت دنیا آگاهی یافتن و آگاهی دادن است.

نظرات کاربران

محمد نقلانی

استاد ملهم عزیز ، مثل تدریس دوران دانشگاه عالی بود مطلب . فقط خدایی امتحان فیزیک ۱ رو تکرار نکنید 😂

ارسال دیدگاه
خوشحال میشیم دیدگاه و یا تجربیات خودتون رو با ما در میون بذارید :