وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

قالب بندی رشته ها با پایتون

0 11
زمان لازم برای مطالعه: 6 دقیقه


معرفی

دیر یا زود قالب بندی رشته برای اکثر برنامه نویسان به یک شر ضروری تبدیل می شود. بیشتر در گذشته قبل از دوره رابط کاربری گرافیکی مشتری ضخیم، اما نیاز به یک نمایش رشته خاص هنوز یک مورد استفاده معمول است. اولین مقدمه من در کالج بود، زمانی که یک مدرک قدیمی داشتم که عشق ناخالصی به وادار کردن ما به نوشتن جاوا داشت. console برنامه های کاربردی با مشخصات عصبی برای خروجی با printf(...) تابع. یکی از مواردی که در آن زمان صادق بود و اکنون نیز صادق است این است که اسناد قالب بندی رشته ای (عملاً برای همه زبان ها) چیزهای زیادی برای دلخواه باقی می گذارد. امیدوارم امروز با نوشتن در مورد روش انجام قالب بندی رشته در پایتون این درد را کاهش دهم.

در پایتون چندین تکنیک برای قالب بندی رشته ها وجود دارد، به طور دقیق چهار تکنیک. جالب است که این به نوعی مغایر با اصل ذهنیت پایتون است که به طور کلی باید بهترین راه روشن برای انجام یک کار وجود داشته باشد. با این حال، اگر زمان معقولی را با زبان سپری کرده باشید، احتمالاً این آرایه‌های متفاوت از تکنیک‌ها را دیده‌اید و از خود پرسیده‌اید که «تعریف همه این‌ها چیست؟».

اجرای چهار تکنیک قالب‌بندی رشته‌ای

بیایید با متداول ترین روشی که از آن استفاده می کند شروع کنیم % اپراتور. من متداول ترین را می گویم صرفاً به این دلیل که تقریباً طولانی ترین بوده است و شما آن را در همه جا می بینید (کتاب ها، پست های وبلاگ، Stack Overflow و غیره…). برای استفاده از این روش، یک مکان نگهدار در یک رشته با استفاده از آن مشخص می‌کنید %s برای رشته ها و %d برای اعداد

>>> "Hello reader, welcome to the %s form of string formatting." % 'modulus'
'Hello reader, welcome to the modulus form of string formatting.'
>>>
>>> "Formatting multiple (%d, %d, %d, ...) values requires a %s." % (1, 2, 3, 'tuple')
'Formatting multiple (1, 2, 3, ...) values requires a tuple.'
>>>
>>> print("""If you prefer named placeholders for values %(one)d, %(two)d,
... %(three)d ... you can use a dict""" % {'one':1, 'two':2, 'three':3})
If you prefer named placeholders for values 1, 2,
3 ... you can use a dict

تکنیک بعدی برای پوشش دادن است str.format(...) روش. این قرار بود جایگزینی برای % سبک قبلا نشان داده شده است. این تکنیک از براکت های فرفری استفاده می کند {} تعیین کننده برای تعیین مکان و روش قالب بندی یک مقدار به یک رشته.

>>> "Hello reader, welcome to the {} form of string formatting".format('str.format(...)')
'Hello reader, welcome to the str.format(...) form of string formatting'
>>>
>>> print("""Formatting multiple ({0}, {1}, {2}, ...) values requires  
... that you use multiple {3} brackets and optionally specify ordering
... values.""".format(1,2,3,'{}'))
Formatting multiple (1, 2, 3, ...) values requires  
that you use multiple {} brackets and optionally specify ordering
values.
>>>
>>> print("""The {language} str.format() method also allows you to use
... named parameters which help keep code {adjective}
... """.format(language='Python', adjective='concise'))
The Python str.format() method also allows you to use
named parameters which help keep code concise

سپس تکنیک String Template وجود دارد که یک کلاس در آن است ماژول رشته. این روش قالب بندی رشته ها کمی پرمخاطب تر است و بر خلاف دو روش قبلی از مشخص کننده های نوع (s، d، f، و غیره) پشتیبانی نمی کند. با استفاده از این تکنیک شما مکان نگهدارنده را در یک رشته با پیشوند مقدار مورد نظر با a مشخص می کنید $ در سازنده از Template(...) کلاس، سپس شما یک تماس بگیرید substitute(...) روش روی شیء نمونه سازی شده با یک پارامتر نامگذاری شده. این روش به دلیل کاهش قدرت و انعطاف پذیری بسیار کمتر رایج است.

>>> from string import Template
>>> tmpl = Template("Hello my name is $name")
>>> tmpl.substitute(name='Adam')
'Hello my name is Adam'

آخرین تکنیک و جدیدترین پیاده سازی که فقط در پایتون 3.6 موجود است، به نام شناخته می شود درون یابی رشته ای. این شباهت هایی به رشته قالب جاوا اسکریپت ES6 دارد. درون یابی رشته ای مستلزم آن است که رشته لفظی با پیشوند an باشد f"" و اجازه می دهد تا هر دو عبارت و متغیرها به طور مستقیم در رشته مشخص شوند تا زمانی که توسط آنها احاطه شده باشد. {} براکت ها

>>> method="String Interpolation"
>>> f"Hello reader, I am the {method} of formatting"
'Hello reader, I am the String Interpolation of formatting'
>>>
>>> f"With this method you can have expressions like {{1 + 1}} = {1 + 1}"
'With this method you can have expressions like {1 + 1} = 2'

جستجوی عمیق تر در قالب بندی رشته ها

در بخش‌های بعدی بحث را فقط به این موضوع محدود می‌کنم str.format() روش و f"" تکنیک درون یابی چون روش های ترجیحی برای قالب بندی رشته ها هستند. موضوعاتی که می خواهم عمیق تر به آنها بپردازم عبارتند از:

  1. تراز متن
  2. قالب بندی اعداد
  3. تبدیل ها را تایپ کنید
پیشنهاد می‌کنیم بخوانید:  روش تقسیم رشته در جاوا اسکریپت جاوا اسکریپت متدهای داخلی بسیار مفیدی برای دستکاری رشته ها دارد، یکی از این روش ها متد split() است. در این مقاله نگاهی دقیق‌تر به متد split() خواهیم داشت و اینکه چگونه می‌توانیم از آن در ارتباط با عبارات منظم برای تقسیم یک رشته طولانی فقط ...

هر دو str.format() و تکنیک‌های درون‌یابی، نحو یکسانی را برای تعریف قالب‌بندی بین آن‌ها به اشتراک می‌گذارند {} براکت هایی که از : برای جدا کردن شناسه های نامدار یا ترتیبی در سمت چپ و مشخصات قالب بندی در سمت راست.

تراز متن

با استفاده از عبارت می توانید مقادیر را در طول مشخصی از متن تراز کنید <، >، یا ^ نمادهایی برای تعیین تراز چپ، تراز راست یا مرکز به ترتیب. سپس آن نمادها را با عرض کاراکتر مورد نظر دنبال می کنید.

پایتون > 2.6:

>>> left_aligned = "Left Align"
>>> center = "Centered"
>>> right_aligned = "Right Align"
>>> "{left_aligned:<15}{center:^10}{right_aligned:>15}".format(
...     left_aligned=left_aligned,
...     center=center,
...     right_aligned=right_aligned)
'Left Align      Centered     Right Align'

همچنین می توانید موقعیت های ترتیبی را به جای کلمات کلیدی مشخص کنید.

>>> "{1:<15}{0:^10}{2:>15}".format(center, left_aligned, right_aligned)
'Left Align      Centered     Right Align'

یا در صورت ترتیب پارامترها می توانید آنها را حذف کنید format(...) همان ترتیب از هستند {}.

>>> "{:<15}{:^10}{:>15}".format(left_aligned, center, right_aligned)
'Left Align      Centered     Right Align'

پایتون 3.6:

>>> f"{left_aligned:<15}{center:^10}{right_aligned:>15}"
'Left Align      Centered     Right Align'

در مثال های قبلی به طور ضمنی فضای خالی باقی مانده را با فضاهای خالی پر کردم که رفتار پیش فرض است. با این حال، اگر این چیزی نیست که شما می‌خواهید، می‌توانید با مشخص کردن یک کاراکتر بلافاصله بعد از کولون، آنها را با چیزی متفاوت پر کنید.

پایتون > 2.6:

>>> "{:><15}|{:-^10}|{:<>15}".format(left_aligned, center, right_aligned)
'Left Align>>>>>|-Centered-|<<<<Right Align'

پایتون 3.6:

>>> f"{left_aligned:><15}{center:-^10}{right_aligned:<>15}"
'Left Align>>>>>-Centered-<<<<Right Align'

شماره

قالب بندی اعداد ممیز شناور، آنهایی که حاوی اعداد اعشاری هستند، در پایتون یک سینچ است. تنها کاری که باید انجام دهید این است که کولون را با علامت دنبال کنید f.

پایتون > 2.6:

>>> rounded_pi = 3.14
>>> "A rounded representation of Pi {:f}".format(rounded_pi)
'A rounded representation of Pi 3.140000'

پایتون 3.6:

>>> f"A rounded representation of Pi {rounded_pi:f}"
'A rounded representation of Pi 3.140000'

توجه کنید که رشته دارای شش رقم اعشار است. این به این دلیل است که به طور پیش‌فرض به مشخص‌کننده شناور شش مکان داده می‌شود که یا با صفر پر می‌کند یا گرد می‌کند تا فقط شامل شش مکان باشد. روی ورودی. به عنوان مثال، اگر من import هرچه ثابت pi طولانی‌تر از ماژول ریاضی باشد، گرد کردن را در عمل خواهید دید.

پیشنهاد می‌کنیم بخوانید:  روش نصب پایتون 3.8 روی CentOS 8

پایتون > 2.6:

>>> from math import pi
>>> pi
3.141592653589793
>>> "A rounded representation of Pi {:f}".format(pi)
'A rounded representation of Pi 3.141593'

پایتون 3.6:

>>> f"A rounded representation of Pi {pi:f}"
'A rounded representation of Pi 3.141593'

برای تعیین دقت متفاوت (تعداد ارقام اعشار) کافی است قبل از آن قرار دهید f با تعداد ارقام اعشاری مورد نظر.

پایتون > 2.6:

>>> "A rounded representation of Pi {:.3f}".format(pi)
'A rounded representation of Pi 3.142'

پایتون 3.6:

>>> f"A rounded representation of Pi {pi:.3f}"
'A rounded representation of Pi 3.142'

یکی دیگر از موارد استفاده قالب بندی برای اعداد ممیز شناور، مشخص کننده درصد است. این با تبدیل نسبت یا نسبت (0-1) مورد انتظار به مقداری از 100 عمل می کند و بخش اعشاری باقیمانده را شبیه به f مشخص کننده با دقت پیش فرض شش.

پایتون > 2.6:

>>> receptions = 17
>>> passes = 29
>>> "The completion percentage is {:.2%}".format(receptions/passes)
'The completion percentage is 58.62%'

پایتون 3.6:

>>> f"The completion percentage is {receptions/passes:.2%}"
'The completion percentage is 58.62%'

بسیار خوب، بنابراین بیشتر موارد استفاده مربوط به اعداد ممیز شناور را بررسی می کند، اما در مورد اعداد بزرگ چطور؟ پایتون همچنین از قالب بندی آنها با قرار دادن کاما برای افزایش خوانایی اعداد بزرگ پشتیبانی می کند. برای استفاده از این به سادگی a , بعد از روده بزرگ

پایتون > 2.6:

>>> house_price = 299999.99
>>> "The price of the house is ${:,}".format(house_price)
'The price of the house is $299,999.99'

پایتون 3.6:

>>> f"The price of the house is ${house_price:,}"
'The price of the house is $299,999.99'

تبدیل نوع

تبدیل نوع کمی مورد استفاده کمتر رایج است، اما هر از گاهی مطرح می شود. تبدیل های نوع اصلی برای اعداد به شرح زیر است:

تبدیل شرح
ب دودویی
o هشتی
ایکس هگزادسیمال
د اعشاری

همانند سایر مشخص‌کننده‌های قالب، آنها با اضافه کردن آنها بعد از کولون کار می‌کنند. امیدواریم این الگوی کلی قالب بندی نحو برای شما روشن شود.

پایتون > 2.6:

>>> number = 157
>>> print("Binary: {:b}\nOctal {:o}\nHexadecimal: {:x}\nDecimal: {:d}".format(
...     number,
...     number,
...     number,
...     number))
Binary: 10011101
Octal 235
Hexadecimal: 9d
Decimal: 157

پایتون 3.6:

>>> print(f"Binary: {number:b}\nOctal {number:o}\nHexadecimal: {number:x}\nDecimal: {number:d}")
Binary: 10011101
Octal 235
Hexadecimal: 9d
Decimal: 157

نتیجه

در این آموزش مختصر روی قالب بندی رشته من به سختی سطح را خراشیده ام، اما امیدوارم که توانسته باشم چند نمونه عینی از موارد استفاده متداول که احتمالاً در برنامه های روزانه پایتون با آنها مواجه خواهید شد، ارائه دهم. هدف من ارائه یک توضیح اساسی از نحو قالب بندی رشته و تکنیک های پیاده سازی بوده است. از اینجا باید به درک کافی برای حفاری در جزئیات اسناد مجهز باشید. از اینکه همراهی کردید متشکریم و در زیر نظر دهید.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-28 18:55:03

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید