دعنا نستكشف دالة بايثون print()
بالتفصيل مع بعض الأمثلة. هناك ما هو أكثر مما تدرك!
هناك احتمال معقول أن تكون أول لقاءاتك مع بايثون تتضمن print()،
ربما في شكل “Hello, World!”. تعد دالة print()
دالة أساسية يمكنك فهمها والبدء في استخدامها بسرعة كبيرة.
ولكن هناك ما هو أكثر مما تراه العين. في هذه المقالة، نستكشف هذه الوظيفة بالتفصيل من خلال شرح كيفية عمل جميع الوسائط ونعرض لك بعض الأمثلة.
يوجد مرجع جيد لكيفية عمل دالة print() في الوثائق الرسمية. تقبل الدالة عدة وسائط كما هو موضح أدناه مع قيمها الافتراضية:
print(*objects, sep=' ', end= '\n', file=sys.stdout, flush=False)
سنستعرض الوسيطات واحدة تلو الأخرى ونعرض لك كل ما تحتاج إلى معرفته لاستخدام هذه الدالة إلى أقصى إمكاناتها.
objects*
يتم تمثيل الشيء المراد طباعته بالوسيطة الأولى *objects
ويمكن أن يكون في الأساس أي شيء. عادةً ما تكون سلسلة، ولكنها قد تكون عددًا صحيحًا، أو عددًا عشريًا، أو متغيرًا، أو قائمة، أو قاموسًا، من بين أشياء أخرى. يمكن أن تأخذ الدالة print()
أيضًا أكثر من كائن واحد.
نظرًا لأنه من الشائع طباعة السلاسل، فمن الجدير بالذكر أنه يمكن تعريف السلاسل باستخدام علامات الاقتباس المفردة (“سلسلة”) أو علامات الاقتباس المزدوجة (“سلسلة”). تحدد تفضيلاتك الشخصية وحالة الاستخدام ما يجب استخدامه. ولتوضيح ذلك خذ بعين الاعتبار المثالين التاليين:
>>> string = 'She asked "How do you print quotes?"'
>>> string = "It's about time to program something"
الاستخدام الأساسي لدالة print()
هو مجرد طباعة سلسلة:
>>> print("Hello, World!")
تأخذ الكلمات الرئيسية غير المحددة قيمها الافتراضية المذكورة أعلاه في المقدمة.
يمكن استخدام عمليات السلسلة العادية داخل الدالة. على سبيل المثال، يمكنك ضرب سلسلة بعدد صحيح كما هو موضح هنا:
>>> print("print this twice " * 2)
في هذه المرحلة، من المهم أن نتطرق إلى تنسيق السلسلة. طريقة المدرسة القديمة هي تنسيق %
؛ ومع ذلك، لا ينصح بهذا لأنه يصبح مرهقًا بعض الشيء مع السلاسل الأطول.
الطريقة الأفضل هي استخدام str.format()
، حيث تتم الإشارة إلى الحقول البديلة بأقواس متعرجة. دعونا نحدد بعض المتغيرات ونطبعها في سلسلة:
>>> name = "Kader"
>>> age = 20
>>> print("{} is {} years old".format(name, age))
Kader is 20 years old
لمزيد من الأمثلة على تنسيق السلسلة، تعد “الوثائق الرسمية” مرجعًا جيدًا. يمكنك أيضًا استخدام هذه الطريقة لطباعة البيانات الجدولية – لقد كتبنا مقالة منفصلة حول هذا الموضوع.
تُعرف طريقة التنسيق الأخرى بتنسيق f-string
. إنه مشابه للمثال أعلاه، لكنه أكثر إحكاما قليلا. وباستخدام نفس المتغيرات مما سبق يمكننا أن نكتب:
>>> print(f"{name} is {age} years old")
Kader is 20 years old
إذا كنت تريد طباعة كائن قابل للتكرار مثل قائمة أو مصفوفة، فإن استخدام التعبير المميز بنجمة يساعد في فك ضغط الكائن القابل للتكرار وطباعته بشكل جيد:
>>> print(*[1, 2, 3, 4])
1 2 3 4
حاول طباعة نفس القائمة بدون النجمة وشاهد ما ستحصل عليه. حاول أيضًا طباعة التسلسل المعطى بواسطة range()
مع النجمة وبدونها. سنرى المزيد من الأمثلة ذات التعبيرات المميزة بنجمة في القسم التالي.
sep
تحدد الوسيطة الثانية لدالة print ()
الفاصل. إذا تم إعطاء أكثر من كائن كوسيطة أولى، فسيحدد sep الفاصل الذي سيتم وضعه بينهما. بناءً على المثال السابق، نحدد الفاصل ليكون حرف السطر الجديد:
>>> print(*[1, 2, 3, 4], sep="\n")
1
2
3
4
حالة استخدام أخرى لهذه الوسيطة هي طباعة بعض النتائج بشكل جيد. يمكننا تحديد متغير وطباعة قيمته في جملة يمكن قراءتها بواسطة الإنسان :
>>> result = 10
>>> print("Result of experiment ", result, sep=" is ")
Result of experiment is 10
هنا، السلسلة “Result of experiment
” والمتغير result
معًا هما الوسيطة *objects
، وتتم طباعة قيمة sep بينهما.
end
تتيح لك الكلمة الأساسية end تحديد شيء سيتم طباعته تلقائيًا في نهاية الإخراج. يتم تعيينه افتراضيًا على حرف السطر الجديد (“\n”).
لا توجد أي وسيطات لدالة print()
مطلوبة، بالمعنى الدقيق للكلمة. إذا لم يتم تقديم أية وسائط، فستتم طباعة الكلمة الأساسية end، وهي حرف السطر الجديد افتراضيًا. إنه أمر واضح ومباشر، ولكن من أجل الاكتمال، دعونا نبني على المثال السابق بإضافة علامة تعجب في النهاية:
>>> print("Result of experiment", result, sep=" is ", end="!")
Result of experiment is 10!
file
عدم تحديد هذه الكلمة الأساسية يكتب إلى الطرفية في بايثون بشكل افتراضي. تقول الوثائق المرتبطة أعلاه أن القيمة الافتراضية هي sys.stdout
، والتي تعني “الكتابة إلى الإخراج القياسي” في بايثون. هذا كائن ملف مضمن يعرض أي شيء مكتوب له (باستخدام التابع .write()
) على وحدة التحكم. إذا كنت تريد الكتابة إلى ملف في بايثون، فحدد كائن الملف الخاص بك باستخدام الكلمة الأساسية file
.
تحسبًا للمثال الأخير، فلنحدد السلسلة التالية، ونحفظها في الملف “flush_demo.py” (لا تقلق – سيصبح كل هذا منطقيًا قريبًا):
>>> open_file = open('flush_demo.py', 'w')
>>> string = "import time\nfor num in range(10, 0, -1):\n\tprint(str(num)+' ', end='', flush=True)\n\ttime.sleep(1)\nprint('\\nCountdown finished!')"
>>> print(string, file=open_file)
>>> open_file.close()
انتقل الآن إلى دليل العمل الحالي الخاص بك، وسترى الملف الجديد الذي أنشأناه. السلسلة هي في الواقع برنامج سنستخدمه قريبًا.
من المهم ملاحظة أنك بحاجة إلى تحديد كائن الملف في وضع الكتابة ثم إغلاقه في النهاية.
flush
الكلمة الأساسية flush
هي إضافة حديثة إلى وظيفة print()
. فهو يقبل قيمة منطقية، سواء كانت صحيحة أو خاطئة.
عادةً، يتم تخزين الإخراج إلى ملف أو وحدة التحكم مؤقتًا. يتم “مسح” المخزن المؤقت (أو طباعته) فقط عندما يكون ممتلئًا أو عند الوصول إلى سطر جديد. يؤدي تعيين هذه الكلمة الأساسية إلى True إلى مسح المخزن المؤقت بالقوة قبل أن يمتلئ أو قبل مواجهة حرف السطر الجديد.
لرؤية ذلك عمليًا، نحتاج إلى استخدام الملف الذي أنشأناه للتو في المثال السابق. لتشغيل هذا البرنامج النصي، افتح الطرفية، وانتقل إلى الدليل الصحيح، ثم قم بتشغيل:
>>> python flush_demo.py
ترى أننا أنشأنا ساعة العد التنازلي. باستخدام Flush=True
، يتم مسح المخزن المؤقت بعد طباعة كل رقم فردي في الحلقة، ثم ينام البرنامج لمدة ثانية واحدة. باستخدام Flush=False
، ينام البرنامج لمدة 10 ثوانٍ ويتم مسح المخزن المؤقت فقط في نهاية البرنامج، مما يؤدي إلى طباعة تسلسل الأرقام مرة واحدة.
لاختتام هذه المقالة حول دالة print()
، إليك رسالة شكر مخصصة. ما عليك سوى نسخ هذا ولصقه في الطرفية:
>>> print(f"Thanks {input('Enter your name: ')}", end=", and Goodbye!")
اكتشاف المزيد من بايثون العربي
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.