تحتوي لغة بايثون على العديد من الدوال المضمنة المفيدة التي يمكنك البدء في استخدامها فورًا. يمكنك الاطلاع على جميعها في وثائق بايثون الرسمية. إحدى أكثر الدوال فائدة هي دالة print()
، والتي يمكنك استخدامها لطباعة رسالة على الشاشة أو إلى ملف. هذه الدالة متعددة الاستخدامات ويمكنها على الأرجح القيام بأكثر مما تدرك. في هذه المقالة، سنلقي نظرة مفصلة على كل ما يمكن أن تفعله هذه الدالة. من المفيد أن تتعرف عليها، لأنك ستستخدمها طوال الوقت.
استخدام ()print مع Hello, World!
من المحتمل أن يكون برنامج “Hello, World!” هو أول تجربة لك مع البرمجة. يُستخدم هذا البرنامج لتوضيح قواعد اللغة الأساسية. في بعض اللغات (مثل C++)، يتطلب هذا البرنامج البسيط منك استيراد مكتبة، وتحديد دالة، وتنفيذ أمر طباعة. ومع ذلك، في بايثون، يكون البرنامج عبارة عن سطر واحد بسيط يوضح الاستخدام الأساسي لدالة print()
. ما عليك سوى فتح وحدة تحكم بايثون وتنفيذ الأمر التالي:
>>> print('Hello, World!')
Hello, World!
هذا هو أبسط ما يمكن أن يكون. ومع ذلك، هناك بعض الأشياء المثيرة للاهتمام التي يجب ملاحظتها حول هذا البرنامج. أولاً، إنه مثال جيد على مدى بساطة وبديهية بناء جملة بايثون. وهذا يجعل تعلم بايثون أسهل من العديد من لغات البرمجة الأخرى، كما ناقشنا في كم من الوقت يستغرق تعلم بايثون؟.
ثانيًا، تحتوي عبارة print()
على وسيطة مطلوبة واحدة فقط، والتي يتم تمثيلها بواسطة معلمة objects* في الوثائق. إنها عبارة عن سلسلة في المثال أعلاه، ولكنها يمكن أن تكون أشياء مختلفة عديدة.
كملاحظة جانبية، يمكنك كتابة سلاسلك باستخدام علامات اقتباس مفردة ('text'
) أو علامات اقتباس مزدوجة ("text"
). إذا كنت تريد تعريف سلسلة تحتوي على حرف علامة اقتباس مفردة، فستحتاج إلى علامات اقتباس مزدوجة ("who's there?"
). وإلا، فالاختيار متروك لك.
print(anything)
يمكن استخدام عبارة print()
لطباعة أي شيء تقريبًا. ولتوضيح ذلك، دعنا نحدد متغيرًا ونطبعه:
>>> anything = 3
>>> print(anything)
3
في هذا المثال، قمنا بتعريف المتغير anything ليكون عددًا صحيحًا. الآن، دعنا نحاول تعريفه كبنية بيانات، مثل القائمة:
>>> anything = [1, 2, 3]
>>> print(anything)
[1, 2, 3]
يمكنك أيضًا تعريف كائنات متعددة مفصولة بفاصلة، وقد يكون لكل منها نوع مختلف. يمكنك طباعة سلسلة مع القائمة التي حددناها أعلاه:
>>> print('List:', anything)
List: [1, 2, 3]
لفك القائمة وعرض البيانات بشكل جيد، يمكنك استخدام تعبير مميز:
>>> print('List:', *anything)
List: 1, 2, 3
حاول اللعب ببعض أنواع البيانات المختلفة كمتغير anything
. على سبيل المثال، حاول تعريف عدد عشري، أو قاموس، أو حتى رقم مركب.
يتم تحويل جميع الكائنات المراد طباعتها إلى سلاسل خلف الكواليس، مما يسمح لنا بإجراء هذا المزج بين أنواع البيانات. بالنسبة للمثال الأخير، سنقوم بتعريف دالة لإرجاع عدد صحيح، ثم طباعة النتيجة في سلسلة. ستضيف دالتنا البسيطة ببساطة عددين صحيحين:
>>> def add(a, b):
... return a + b
لا تحدد دالتنا أنواع البيانات المدخلة المسموح بها. على سبيل المثال، يمكنك استخدام السلاسل أو القوائم، ولكننا سنستخدم الأعداد الصحيحة فقط. وهذا يعني أن نتيجة الدالة add()
هي أيضًا عدد صحيح، ولكن يمكننا طباعتها بسهولة في سلسلة:
>>> result = add(1, 2)
>>> print('The result is {}'.format(result))
The result is 3
ملاحظة أخيرة لهذا القسم: تعيد دالة print()
نفسها القيمة None
. وهذا يعني أنه لا يمكنك حفظ عبارة print()
كمتغير. ومن الجيد أن تضع هذا في اعتبارك إذا كنت تحاول تصحيح أخطاء الكود الخاص بك باستخدام عبارة print()
. على سبيل المثال:
>>> print_me = print('Super important error message')
>>> print(print_me)
None
الوسائط الاختيارية
تحتوي دالة print()
في بايثون على أربعة وسيطات اختيارية تسمح لك بتخصيص كيفية عمل الدالة حقًا. الوسيطة الأولى التي سننظر فيها هي sep، والتي تحدد الفاصل الذي سيتم استخدامه إذا تم توفير أكثر من كائن واحد كوسيطة أولى. قيمتها الافتراضية هي مسافة، ويجب أن تكون القيمة سلسلة. بناءً على مثال من القسم السابق، يمكننا القيام بما يلي:
>>> anything = [1, 2, 3]
>>> print('List:', anything, sep='\n')
List:
[1, 2, 3]
هنا، قمنا بتعريف حرف السطر الجديد ('\n'
)، الذي يطبع الكائنين على سطرين مختلفين، كفاصل. يمكنك استخدام هذه الوسيطة لتنسيق نمط الناتج من عبارة print()
. حاول تعريف علامة التبويب ('\t'
) كفاصل وانظر ماذا ستحصل عليه.
بعد ذلك، لدينا وسيطة النهاية. تسمح لك هذه الوسيطة بتحديد شيء ما ليتم طباعته في نهاية السطر؛ والقيمة الافتراضية هي حرف السطر الجديد. مرة أخرى، لا يُسمح لهذه القيمة إلا بأن تكون سلسلة، ولكن يمكنك جعل السلسلة تقوم بعدة أشياء. على سبيل المثال:
>>> print('List:', anything, sep='\t', end='!\n\n')
List: [1, 2, 3]!
لقد قمنا بتغيير الفاصل إلى علامة تبويب وأضفنا علامة تعجب وحرفين جديدين للسطر في نهاية الناتج. إذا قمت بتشغيل هذا في وحدة التحكم الخاصة بـ Python، فستلاحظ مساحة إضافية مطبوعة أسفل الناتج. يمكن استخدام هذا مرة أخرى لتنسيق نمط الكائنات المطبوعة.
الوسيطة الاختيارية الثالثة في وظيفة طباعة Python هي file
. القيمة الافتراضية هي None
، والتي تطبع الكائنات على الشاشة. يتم ذلك عبر sys.stdout
، وهو كائن ملف يتوافق مع مجرى الإخراج القياسي. يمكنك توفير كائن ملف مختلف لتحديده في مكان آخر لكتابة الإخراج. على سبيل المثال:
>>> with open('data.csv', 'w') as open_file:
... print('Name', 'Age', 'Occupation', sep=',', file=open_file)
... print('Jon Anderson', 53, 'Pilot', sep=',', file=open_file)
يؤدي هذا إلى طباعة سطرين إلى كائن open_file
. يحتوي كل سطر على 3 كائنات للطباعة، ويفصل بين كل منها فاصلة. وبذلك نكون قد أنشأنا ملف CSV وحفظناه باسم data.csv
.
قبل أن ننتقل إلى الوسيطة النهائية، هناك حالة استخدام ثانية للوسيطة file
تستحق المناقشة. لقد ذكرنا مجرى الإخراج القياسي. وهو أحد المجاري الثلاثة القياسية التي تتحكم في كيفية تفاعل البرنامج مع بيئته. مجرى قياسي آخر هو الخطأ القياسي، أو stderr
. يمكنه طباعة رسالة على الشاشة أو على ملف؛ والأهم من ذلك، أنه مستقل عن مجرى الإخراج القياسي. وهذا يعني أنه يمكنك تسجيل الأخطاء بشكل أكثر موثوقية قبل تعطل برنامجك. للاستفادة من هذا عند تصحيح أخطاء برامجك، يمكنك القيام بما يلي:
>>> import sys
>>> print('A Custom Error Message', file=sys.stderr)
A Custom Error Message
هنا، استخدمنا وسيطة الملف لإعادة توجيه رسالة الخطأ إلى مجرى الخطأ القياسي. لا يزال هذا يؤدي إلى طباعة رسالة الخطأ على الشاشة، ولكنها طريقة أكثر موثوقية لتصحيح أخطاء برامجك، لأنها مستقلة عن الأشياء الأخرى التي تتم طباعتها عبر مجرى الإخراج القياسي.
الوسيطة النهائية هي Flush
، والتي لها القيمة الافتراضية false
. عادةً، يتم تخزين الناتج من عبارة الطباعة مؤقتًا. يتم تخزين المخزن المؤقت فقط عندما يمتلئ أو عند الوصول إلى حرف سطر جديد. يؤدي تعيين flush=True
إلى إجبار المخزن المؤقت على التخزين المؤقت قبل حدوث ذلك. لإثبات ذلك، قم بإنشاء البرنامج التالي وحفظه باسم flush_output.py
:
import time
for i in range(5, 0, -1):
print(i, end=' ', flush=False)
time.sleep(1)
print('\nFinished')
بعد تشغيل البرنامج من وحدة التحكم، ينتظر البرنامج 5 ثوانٍ ثم يطبع الأرقام من 5 إلى 1 على نفس السطر، متبوعًا بكلمة “Finished
” في سطر جديد. حاول ضبط flush=True
وانظر ماذا تحصل عليه. يجب أن يشبه ساعة العد التنازلي، حيث تُطبع الأرقام واحدة تلو الأخرى مع توقف لمدة ثانية واحدة بينها، متبوعة مرة أخرى بكلمة “Finished
” في سطر جديد. تذكر أن القيمة الافتراضية لوسيطة النهاية هي حرف السطر الجديد، الذي سيؤدي إلى مسح المخزن المؤقت افتراضيًا. لذلك، بعد ضبط end على شيء آخر وflush=True
، نحصل على ساعة العد التنازلي.
الآن تعرف على عبارة ()print في بايثون
هناك المزيد في عبارة print()
في بايثون أكثر مما تراه العين. الآن يجب أن تكون لديك الأدوات اللازمة للاستفادة من هذه الدالة الشائعة جدًا.
سواء كنت تريد طباعة النتائج على الشاشة أو تسجيل الأخطاء في سجل الأخطاء أو أخذ مدخلات المستخدم، فإن دالة الطباعة ()print
في بايثون متعددة الاستخدامات للغاية.
اكتشاف المزيد من بايثون العربي
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.