تا اینجا دو روش برای نوشتن مقادیر را دیدهایم: عبارات اعلانی و تابع print(). (روش سوم استفاده از متد write() اشیاء فایل است؛ فایل خروجی استاندارد را میتوان به صورت sys.stdout مرجع داد. برای اطلاعات بیشتر به Library Reference مراجعه کنید.)
اغلب کنترل بیشتری روی قالببندی خروجی خود نسبت به فقط چاپ مقادیر جدا شده با فاصله میخواهید. چندین روش برای قالببندی خروجی وجود دارد.
f یا F قبل از علامت نقل قول اولیه شروع کنید. داخل این رشته، میتوانید یک عبارت پایتون بین کاراکترهای { و } بنویسید که به متغیرها یا مقادیر لیترال ارجاع دهد:>>> year = 2016
>>> event = 'Referendum'
>>> f'Results of the {year} {event}'
'Results of the 2016 Referendum'
متد str.format() رشتهها تلاش دستی بیشتری نیاز دارد. هنوز از { و } برای علامتگذاری محل جایگزینی متغیر استفاده میکنید و میتوانید دستورالعملهای قالببندی دقیق ارائه دهید، اما همچنین باید اطلاعاتی که باید قالببندی شوند را ارائه دهید:
>>> yes_votes = 42_572_654
>>> total_votes = 85_705_149
>>> percentage = yes_votes / total_votes
>>> '{:-9} YES votes {:2.2%}'.format(yes_votes, percentage)
' 42572654 YES votes 49.67%'
توجه کنید که yes_votes با فاصلهها و فقط برای اعداد منفی با علامت منفی پر شده. این مثال همچنین percentage ضرب در ۱۰۰ را با ۲ رقم اعشار و علامت درصد چاپ میکند.
در نهایت، میتوانید تمام مدیریت رشته را خودتان انجام دهید با استفاده از عملیات برش و ترکیب رشته برای ایجاد هر چیدمانی که تصور میکنید. نوع رشته برخی متدها دارد که عملیات مفیدی برای پر کردن رشتهها به عرض ستون داده شده انجام میدهند.
وقتی نیاز به خروجی خاصی ندارید و فقط نمایش سریع چند متغیر برای اهداف اشکالزدایی میخواهید، میتوانید هر مقداری را با توابع repr() یا str() به رشته تبدیل کنید.
تابع str() برای بازگرداندن نمایشهایی از مقادیر که نسبتاً خوانای انسانی هستند طراحی شده، در حالی که repr() برای تولید نمایشهایی طراحی شده که توسط مفسر قابل خواندن هستند (یا SyntaxError ایجاد میکند اگر نحو معادلی وجود نداشته باشد). برای اشیایی که نمایش خاصی برای مصرف انسان ندارند، str() مقداری برابر repr() برمیگرداند. بسیاری از مقادیر، مانند اعداد یا ساختارهایی مانند لیستها و دیکشنریها، با هر دو تابع نمایش یکسانی دارند. رشتهها به طور خاص دو نمایش متمایز دارند.
چند مثال:
>>> s = 'Hello, world.'
>>> str(s)
'Hello, world.'
>>> repr(s)
"'Hello, world.'"
>>> str(1/7)
'0.14285714285714285'
>>> x = 10 * 3.25
>>> y = 200 * 200
>>> s = 'The value of x is ' + repr(x) + ', and y is ' + repr(y) + '...'
>>> print(s)
The value of x is 32.5, and y is 40000...
>>> # repr() یک رشته علامت نقل quote و بکاسلش اضافه میکند:
>>> hello = 'hello, world\n'
>>> hellos = repr(hello)
>>> print(hellos)
'hello, world\n'
>>> # آرگومان repr() میتواند هر شیء پایتون باشد:
>>> repr((x, y, ('spam', 'eggs')))
"(32.5, 40000, ('spam', 'eggs'))"
ماژول string از یک روش قالببندی ساده بر پایه عبارات باقاعده پشتیبانی میکند، از طریق string.Template. این روش دیگری برای جایگزینی مقادیر در رشتهها فراهم میکند، با استفاده از نگهدارندههای مکانی مانند $x و جایگزینی آنها با مقادیر از یک دیکشنری. این نحو ساده است اما کنترل کمتری برای قالببندی ارائه میدهد.
لیترالهای رشته قالببندی شده (که به اختصار f-strings نیز نامیده میشوند) به شما اجازه میدهند مقدار عبارات پایتون را درون یک رشته با پیشوند f یا F و نوشتن عبارات به شکل {expression} درج کنید.
یک مشخصکننده قالب اختیاری میتواند بعد از عبارت بیاید. این کنترل بیشتری بر نحوه قالببندی مقدار فراهم میکند. مثال زیر pi را به سه رقم بعد از اعشار گرد میکند:
>>> import math
>>> print(f'The value of pi is approximately {math.pi:.3f}.')
The value of pi is approximately 3.142.
عبور دادن یک عدد صحیح بعد از ':' باعث میشود آن فیلد حداقل تعداد کاراکتر عرض داشته باشد. این برای مرتب کردن ستونها مفید است.
>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678}
>>> for name, phone in table.items():
... print(f'{name:10} ==> {phone:10d}')
...
Sjoerd ==> 4127
Jack ==> 4098
Dcab ==> 7678
تغییردهندههای دیگری وجود دارند که مقدار را قبل از قالببندی تبدیل میکنند. '!a' ascii() را اعمال میکند، '!s' str() را اعمال میکند و '!r' repr() را اعمال میکند:
>>> animals = 'eels'
>>> print(f'My hovercraft is full of {animals}.')
My hovercraft is full of eels.
>>> print(f'My hovercraft is full of {animals!r}.')
My hovercraft is full of 'eels'.
مشخصکننده = میتواند برای گسترش یک عبارت به متن عبارت، یک علامت مساوی و سپس نمایش عبارت ارزیابی شده استفاده شود:
>>> bugs = 'roaches'
>>> count = 13
>>> area = 'living room'
>>> print(f'Debugging {bugs=} {count=} {area=}')
Debugging bugs='roaches' count=13 area='living room'
برای اطلاعات بیشتر درباره مشخصکننده = به عبارات خودمستند مراجعه کنید. برای مرجع مشخصکنندههای قالببندی، راهنمای مرجع زبان کوچک مشخصکننده قالببندی را ببینید.
استفاده پایه از متد str.format() به این شکل است:
>>> print('We are the {} who say "{}"!'.format('knights', 'Ni!'))
We are the knights who say "Ni!"
براکتها و کاراکترهای داخل آنها (به نام فیلدهای قالب) با اشیایی که به متد str.format() منتقل میشوند جایگزین میشوند. عددی در براکتها میتواند برای ارجاع به موقعیت شیء منتقل شده استفاده شود.
>>> print('{0} and {1}'.format('spam', 'eggs'))
spam and eggs
>>> print('{1} and {0}'.format('spam', 'eggs'))
eggs and spam
اگر از آرگومانهای کلیدی در متد str.format() استفاده شود، مقادیر آنها با استفاده از نام آرگومان ارجاع داده میشوند.
>>> print('This {food} is {adjective}.'.format(
... food='spam', adjective='absolutely horrible'))
This spam is absolutely horrible.
آرگومانهای موقعیتی و کلیدی میتوانند به طور دلخواه ترکیب شوند:
>>> print('The story of {0}, {1}, and {other}.'.format('Bill', 'Manfred',
... other='Georg'))
The story of Bill, Manfred, and Georg.
اگر رشته قالب بسیار طولانی دارید که نمیخواهید آن را بشکنید، میتوانید به متغیرها به جای موقعیت با نام ارجاع دهید. این با انتقال دیکشنری و استفاده از براکتهای مربعی '[]' برای دسترسی به کلیدها انجام میشود:
>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
>>> print('Jack: {0[Jack]:d}; Sjoerd: {0[Sjoerd]:d}; '
... 'Dcab: {0[Dcab]:d}'.format(table))
Jack: 4098; Sjoerd: 4127; Dcab: 8637678
این همچنین میتواند با انتقال دیکشنری table به عنوان آرگومانهای کلیدی با نماد ** انجام شود:
>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
>>> print('Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}'.format(**table))
Jack: 4098; Sjoerd: 4127; Dcab: 8637678
این به طور خاص در ترکیب با تابع داخلی vars() مفید است که دیکشنری حاوی تمام متغیرهای محلی برمیگرداند:
>>> table = {k: str(v) for k, v in vars().items()}
>>> message = " ".join([f'{k}: ' + '{' + k + '};' for k in table.keys()])
>>> print(message.format(**table))
__name__: __main__; __doc__: None; __package__: None; __loader__: ...
به عنوان مثال، خطوط زیر مجموعهای از ستونهای مرتب را ایجاد میکنند که اعداد صحیح و مربع و مکعب آنها را نشان میدهد:
>>> for x in range(1, 11):
... print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x))
...
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
برای مرور کامل قالببندی رشته با str.format()، نحو قالببندی رشته را ببینید.
در اینجا همان جدول مربع و مکعب، قالببندی شده به صورت دستی:
>>> for x in range(1, 11): ... print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ') ... # توجه به استفاده از 'end' در خط قبلی ... print(repr(x*x*x).rjust(4)) ... 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 729 10 100 1000
(توجه کنید که یک فاصله بین هر ستون توسط نحو عملکرد print() اضافه شده: همیشه فاصلههایی بین آرگومانهایش اضافه میکند.)
متد str.rjust() اشیاء رشته، یک رشته را در یک فیلد با عرض داده شده به راست تراز میکند با پر کردن با فاصلهها در سمت چپ. متدهای مشابه str.ljust() و str.center() نیز وجود دارند. این متدها چیزی نمینویسند، فقط یک رشته جدید برمیگردانند. اگر رشته ورودی خیلی طولانی باشد، آن را کوتاه نمیکنند، بلکه بدون تغییر برمیگردانند. این چیدمان ستون شما را به هم میریزد اما معمولاً بهتر از جایگزین آن است که دروغ گفتن درباره یک مقدار است. (اگر واقعاً کوتاهسازی میخواهید، همیشه میتوانید یک عملیات برش اضافه کنید، مانند x.ljust(n)[:n].)
متد دیگری str.zfill() وجود دارد که یک رشته عددی را در سمت چپ با صفرها پر میکند. این از علامتهای مثبت و منفی آگاه است:
>>> '12'.zfill(5) '00012' >>> '-3.14'.zfill(7) '-003.14' >>> '3.14159265359'.zfill(5) '3.14159265359'
عملگر % (باقیمانده تقسیم) همچنین میتواند برای قالببندی رشته استفاده شود. با داشتن format % values (که در آن format یک رشته است)، مشخصکنندههای تبدیل % در format با صفر یا چند عنصر از values جایگزین میشوند. این عملیات معمولاً به عنوان درونریزی رشته (string interpolation) شناخته میشود. به عنوان مثال:
>>> import math
>>> print('The value of pi is approximately %5.3f.' % math.pi)
The value of pi is approximately 3.142.
اطلاعات بیشتر در بخش قالببندی رشته به سبک printf موجود است.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://docs.python.org/3/tutorial