شرح Python f-Strings: تنسيق النصوص في Python مع أمثلة عملية
مقدمة إلى Python f-Strings
عند العمل على تنسيق النصوص في Python، يعتمد كثير من المطورين على format(). لكن ابتداءً من Python 3.6 أصبح بالإمكان استخدام f-Strings، وهي طريقة أكثر اختصاراً ووضوحاً لدمج القيم داخل النصوص.
تُعرف f-Strings أيضاً باسم formatted string literals، وتمتاز بسهولة القراءة ومرونة كتابة التعابير البرمجية مباشرة داخل النص. في هذا الدليل، ستتعرف إلى كيفية استخدامها عملياً، مع أمثلة توضح أهم السيناريوهات الشائعة.

ما هي f-Strings في Python؟
النصوص في Python تُكتب عادة بين علامتي اقتباس مزدوجتين "" أو مفردتين ''. ولتحويل النص إلى f-String يكفي إضافة الحرف f أو F قبل بداية النص.
على سبيل المثال:
"This" # string
f"This" # f-String
الفرق الأساسي هو أن f-String يسمح لك بإدراج متغيرات أو تعابير أو استدعاءات دوال مباشرة داخل الأقواس المعقوفة {}، ليتم تقييمها أثناء التنفيذ.
كيفية طباعة المتغيرات باستخدام Python f-Strings
إذا أردت عرض قيمة متغير داخل نص، فما عليك سوى كتابة اسم المتغير بين أقواس معقوفة داخل f-String. وعند تشغيل البرنامج، تستبدل Python اسم المتغير بقيمته الفعلية.
الصيغة العامة:
f"This is an f-string {var_name} and {another_var}."
مثال عملي:
language = "Python"
school = "freeCodeCamp"
print(f"I'm learning {language} from {school}.")
الناتج:
# Output
I'm learning Python from freeCodeCamp.
نلاحظ هنا أن Python استبدلت language بالقيمة Python، واستبدلت school بالقيمة freeCodeCamp.
تقييم التعابير داخل f-Strings
من أقوى مزايا f-Strings أنها لا تقتصر على المتغيرات فقط، بل يمكنها أيضاً تقييم التعابير البرمجية مباشرة داخل الأقواس المعقوفة.
مثال على حساب حاصل الضرب داخل النص:
num1 = 83
num2 = 9
print(f"The product of {num1} and {num2} is {num1 * num2}.")
الناتج:
# Output
The product of 83 and 9 is 747.
هذا يعني أن أي تعبير صالح في Python مثل {var_name} أو {expression} يمكن وضعه داخل f-String ليتم استبداله بالقيمة النهائية وقت التشغيل.
استخدام الشروط داخل Python f-Strings
يمكنك أيضاً كتابة الشروط المختصرة داخل f-Strings، وهو أمر مفيد عندما تحتاج إلى إظهار نتيجة تختلف بحسب حالة معينة.
مراجعة سريعة لصيغة if..else
الصيغة التقليدية في Python تكون كالتالي:
if condition:
<true_block>
else:
<false_block>
أما الصيغة المختصرة، والتي تُعرف غالباً باسم ternary operator، فتُكتب بهذه الصورة:
<true_block> if <condition> else <false_block>
مثال على شرط داخل f-String
لنفرض أنك تريد التحقق مما إذا كان العدد زوجياً:
num = 87
print(f"Is num even? {True if num % 2 == 0 else False}")
الناتج:
# Output
Is num even? False
بما أن العدد 87 فردي، فقد تم تقييم الشرط إلى False وطباعته داخل النص مباشرة.
استدعاء methods داخل f-Strings
لا تقتصر f-Strings على عرض المتغيرات والتعابير، بل يمكنك أيضاً استدعاء methods الخاصة بالكائنات داخل Python مباشرة داخل الأقواس.
لنأخذ هذا المثال:
author = "jane smith"
print(f"This is a book by {author}.")
الناتج سيعرض الاسم كما هو بحروف صغيرة. لكن إن أردت تنسيقه بشكل أفضل، فيمكنك استخدام title()، وهي method تُرجع النص بصيغة Title Case.
الطريقة التقليدية
author = "jane smith"
a_name = author.title()
print(f"This is a book by {a_name}.")
الناتج:
# Output
This is a book by Jane Smith.
الطريقة المختصرة داخل f-String
بدلاً من إنشاء متغير إضافي، يمكنك استدعاء title() مباشرة:
author = "jane smith"
print(f"This is a book by {author.title()}.")
الناتج:
# Output
This is a book by Jane Smith.
هذه الميزة تجعل الكود أكثر نظافة، خاصة عند الحاجة إلى تنسيق بسيط وسريع أثناء الطباعة.
استدعاء الدوال داخل Python f-Strings
كما يمكنك استدعاء methods، يمكنك أيضاً استدعاء functions داخل f-Strings. في هذه الحالة، تستبدل Python استدعاء الدالة بالقيمة التي تُرجعها.
تعريف دالة بسيطة
def choice(c):
if c % 2 == 0:
return "Learn Python!"
else:
return "Learn JavaScript!"
هذه الدالة تُرجع Learn Python! إذا كان الرقم زوجياً، وتُرجع Learn JavaScript! إذا كان الرقم فردياً.
استدعاء الدالة داخل f-String
print(f"Hello Python, tell me what I should learn. {choice(3)}")
الناتج:
# Output
Hello Python, tell me what I should learn. Learn JavaScript!
وبما أن 3 عدد فردي، كانت نتيجة الدالة هي Learn JavaScript!.
إذا استخدمت رقماً زوجياً:
print(f"Hello Python, tell me what I should learn. {choice(10)}")
الناتج:
# Output
Hello Python, tell me what I should learn. Learn Python!
متى تكون f-Strings خياراً أفضل؟
تُعد f-Strings خياراً ممتازاً في كثير من الحالات، خصوصاً عندما تحتاج إلى:
- كتابة كود مختصر وسهل القراءة.
- دمج المتغيرات داخل النصوص بسرعة.
- تنفيذ تعابير بسيطة أثناء إنشاء النص.
- استدعاء methods و functions دون خطوات إضافية.
ومقارنة بالأساليب الأقدم، فإنها تمنحك وضوحاً أكبر في الكود، وهو أمر مهم في المشاريع التعليمية والاحترافية على حد سواء.
أهم استخدامات Python f-Strings في تنسيق النصوص
| الاستخدام | الوصف |
|---|---|
| طباعة المتغيرات | إدراج قيم المتغيرات داخل النص مباشرة باستخدام {}. |
| تقييم التعابير | تنفيذ عمليات مثل الجمع والضرب والمقارنات داخل النص. |
| استخدام الشروط | كتابة شروط مختصرة مثل if...else داخل f-String. |
| استدعاء methods | تشغيل methods مثل title() و upper() على النصوص والكائنات. |
| استدعاء functions | إظهار القيم المرجعة من الدوال مباشرة داخل النص. |
أفضل الممارسات عند استخدام f-Strings
- استخدمها عندما يكون الهدف هو الوضوح والاختصار.
- تجنب وضع تعابير معقدة جداً داخل الأقواس حتى لا يصبح الكود صعب القراءة.
- احرص على أن تكون أسماء المتغيرات معبرة لتظهر النصوص الناتجة بشكل منطقي.
- استخدم methods داخل f-Strings فقط عندما يكون ذلك مفهوماً وواضحاً.
- إن كانت المعالجة طويلة أو معقدة، فمن الأفضل تنفيذها أولاً ثم تمرير النتيجة إلى النص.
الخلاصة التقنية
تُعد Python f-Strings من أفضل أساليب تنسيق النصوص في Python بفضل بساطتها وسرعتها ووضوحها. فهي لا تكتفي بطباعة المتغيرات، بل تسمح أيضاً بتقييم التعابير، واستخدام الشروط، واستدعاء methods و functions داخل النص نفسه. من الناحية العملية، أنصح باستخدامها في معظم حالات تنسيق النصوص في Python الحديثة، لأنها تجعل الكود أكثر قابلية للقراءة والصيانة، وهو ما ينعكس إيجاباً على جودة المشروع وتجربة المطور.