تنسيق النصوص في Python: شرح % Operator و str.format() و f-strings و Template Strings
مقدمة إلى تنسيق النصوص في Python
تُعد عملية تنسيق النصوص من المهارات الأساسية التي يحتاجها أي مطور يعمل بلغة Python، لأنها تساعد على بناء رسائل واضحة، وعرض البيانات بشكل منظم، ودمج المتغيرات داخل النصوص بسهولة. توفر Python أكثر من أسلوب لإنجاز هذه المهمة، بدءاً من الطريقة التقليدية باستخدام % operator، مروراً بالدالة str.format()، ووصولاً إلى f-strings الحديثة، بالإضافة إلى Template strings.
في هذا الدليل، ستتعرف على الفروقات بين هذه الأساليب، ومتى يُفضّل استخدام كل واحدة منها، مع أمثلة عملية تسهّل الفهم وتساعدك على كتابة كود أوضح وأكثر احترافية.

الطريقة التقليدية لتنسيق النصوص باستخدام % Operator
قبل ظهور الأساليب الأحدث في Python 3، كان % operator من أشهر الطرق المستخدمة لإدراج القيم داخل النصوص. يعتمد هذا الأسلوب على استخدام محددات مثل %s كعناصر نائبة placeholders داخل السلسلة النصية، ثم تمرير القيمة الفعلية بعد العامل %.
الصيغة الأساسية
"This is a string %s" % "string value goes here"
في المثال السابق، يعمل %s كمكان مخصص لاستقبال قيمة نصية يتم تمريرها لاحقاً.
مثال عملي
print("Hi, my name is %s" % "Jessica")

ورغم أن هذه الطريقة لا تزال مدعومة، فإنها تُعد أسلوباً أقدم مقارنة بالخيارات الحديثة التي تقدم مرونة ووضوحاً أكبر.
استخدام str.format() في Python
تُعتبر الدالة str.format() من الطرق الشائعة والمنظمة لتنسيق النصوص. وهي تتيح لك استخدام أقواس معقوفة {} كأماكن نائبة، ثم تمرير القيم داخل .format().
الصيغة الأساسية
"template string {}".format(arguments)
تمثل الأقواس {} حقول التنسيق format fields التي سيتم استبدالها بالقيم الممررة.
مثال مباشر على str.format()
print("Hello, my name is {}. I am a {} turned {}.".format("Jessica", "musician", "programmer"))

هذا الأسلوب مناسب عندما تريد التحكم في ترتيب القيم أو إعادة استخدام النصوص بصيغة أكثر مرونة من الطريقة التقليدية.
الوسائط الموضعية Positional Arguments في str.format()
يمكنك تحديد موضع كل قيمة داخل النص عبر استخدام أرقام فهرسية داخل الأقواس المعقوفة. هذا يمنحك تحكماً أكبر في ترتيب عرض القيم.
مثال على الترتيب المباشر
print("Steve plays {0} and {1}.".format("trumpet", "drums"))

تبديل ترتيب العناصر بسهولة
print("Steve plays {1} and {0}.".format("trumpet", "drums"))

الميزة هنا أنك تستطيع إعادة ترتيب القيم دون الحاجة إلى تغيير مواقعها عند تمريرها داخل .format().
الوسائط المسماة Keyword Arguments في str.format()
إذا كنت تفضّل كتابة كود أوضح وأسهل قراءة، فإن keyword arguments خيار ممتاز. في هذا الأسلوب، يتم تمرير القيم على هيئة أزواج key=value، ثم يتم استدعاء المفتاح نفسه داخل النص.
مثال تطبيقي
print("{organization} is {adjective}!".format(organization="freeCodeCamp", adjective="awesome"))

هذا الأسلوب مفيد بشكل خاص عندما يحتوي النص على عدة متغيرات، لأنه يجعل الكود أكثر وضوحاً وأقل عرضة للخطأ.
دمج Positional Arguments و Keyword Arguments
من ميزات str.format() أيضاً إمكانية الدمج بين الوسائط الموضعية والوسائط المسماة في المثال نفسه. هذا يتيح لك قدراً عالياً من المرونة عند بناء النصوص المعقدة.
مثال عملي كامل
name = "Sam"
adjective = "amazing"
number = 200
disney_ride = "Space Mountain"
print(
"I went to {0} with {name}.\nIt was {adjective}.\nWe waited for {hours} hours to ride {ride}.".format(
"Disneyland", name=name, adjective=adjective, hours=number, ride=disney_ride
)
)

لاحظ استخدام \n لإضافة سطر جديد بعد كل جملة، وهي طريقة شائعة لتحسين تنسيق الإخراج النصي في الطرفية أو السجل.
ما هي f-strings في Python؟
تُعد formatted string literals أو ما يُعرف اختصاراً بـ f-strings من أفضل وأسهل طرق تنسيق النصوص في Python الحديثة. تسمح لك هذه الطريقة بإدراج المتغيرات وحتى التعبيرات مباشرة داخل النص، مع الحفاظ على صياغة نظيفة وسهلة القراءة.
الصيغة الأساسية
variable = "some value"
f"this is a string {variable}"
كل ما عليك فعله هو وضع الحرف f أو F قبل بداية السلسلة النصية.
مثال بسيط على f-strings
name = "Jessica"
print(f"Maria and {name} have been friends since grade school.")
name = "Jessica"
print(F"Maria and {name} have been friends since grade school.")

يُفضّل كثير من المطورين f-strings لأنها مختصرة وواضحة، وتقلل من التعقيد مقارنة ببعض الأساليب الأخرى.
تنسيق القواميس باستخدام f-strings
لا يقتصر استخدام f-strings على المتغيرات البسيطة فقط، بل يمكن توظيفها أيضاً لعرض بيانات أكثر تنظيماً، مثل البيانات المخزنة داخل dictionary.
مثال على طباعة بيانات dictionary بتنسيق أعمدة
rankings = {
"Gonzaga": 31,
"Baylor": 28,
"Michigan": 25,
"Illinois": 24,
"Houston": 21
}
for team, score in rankings.items():
print(f"{team:10} ==> {score:10d}")

في هذا المثال:
{team:10}يعني تخصيص حقل بعرض 10 أحرف لاسم الفريق.{score:10d}يعني تخصيص حقل بعرض 10 خانات لقيمة عددية صحيحة من النوع العشريdecimal integer.
هذا النوع من التنسيق مفيد جداً عند عرض الجداول النصية أو تنظيم نتائج الطباعة في سطر الأوامر.
ما هي Template Strings في Python؟
توفر Template strings أسلوباً آخر لتنسيق النصوص باستخدام عناصر نائبة تبدأ بالرمز $. وغالباً ما يكون هذا الأسلوب مناسباً في بعض السيناريوهات التي تحتاج إلى قوالب بسيطة وواضحة.
الصيغة الأساسية
Template("$placeholder").substitute(placeholder="real value")
استخدام Template بعد الاستيراد
قبل استخدام Template، يجب استيرادها من مكتبة string القياسية:
from string import Template
مثال عملي كامل
from string import Template
print(Template("I love to learn with $name!").substitute(name="freeCodeCamp"))

تعتمد الفكرة هنا على إنشاء قالب نصي، ثم استبدال العناصر النائبة بالقيم الحقيقية عبر .substitute().
مقارنة سريعة بين أشهر طرق تنسيق النصوص في Python
| الأسلوب | مستوى الحداثة | سهولة القراءة | الاستخدام الأنسب |
|---|---|---|---|
% operator |
قديم | متوسطة | صيانة الأكواد القديمة |
str.format() |
حديث نسبياً | جيدة | التحكم في الترتيب والأسماء |
f-strings |
الأحدث والأكثر شيوعاً | ممتازة | الاستخدام اليومي وكتابة كود واضح |
Template strings |
مفيد في حالات محددة | جيدة | القوالب البسيطة والبدائل الآمنة |
متى تستخدم كل أسلوب؟
- استخدم
% operatorإذا كنت تتعامل مع كود قديم وتحتاج إلى فهمه أو صيانته. - استخدم
str.format()عندما تحتاج إلى مرونة في ترتيب الوسائط أو تسمية القيم بشكل واضح. - استخدم
f-stringsفي معظم المشاريع الحديثة، لأنها الأسرع قراءة والأبسط كتابة. - استخدم
Template stringsعندما تعمل مع قوالب نصية بسيطة أو ترغب في أسلوب استبدال مباشر وسهل.
الخلاصة التقنية
تدعم Python عدة أساليب فعالة لتنسيق النصوص، لكن الخيار الأفضل في المشاريع الحديثة غالباً هو f-strings لما توفره من وضوح وسرعة ومرونة. مع ذلك، تبقى str.format() مناسبة في بعض الحالات التي تتطلب إعادة ترتيب القيم أو العمل مع قوالب أكثر تنظيماً، بينما يظل % operator مهماً لفهم الأكواد القديمة. أما Template strings فهي حل عملي عندما تحتاج إلى قوالب نصية بسيطة ومباشرة. اختيار الأسلوب المناسب يجب أن يعتمد على قابلية قراءة الكود، وسهولة صيانته، وطبيعة المشروع نفسه.