Professional Documents
Culture Documents
Swaroop C H
ملخص
سيساعدك هذا الكتاب على تعلم لغة البرمجة بيثون ،سواء كنت
جديدا على الحواسيب أو مبرمجا متمرسا.
قائمة المحتويات
تمهيد
لمن هذا الكتاب؟ 09..............................................................................
تاريخ الكتاب 10 ................................................................................
حالة الكتاب 10 ..................................................................................
الموقع الرسمي 10 ..............................................................................
بنود الترخيص 11 .................. ...........................................................
القتراحات11 ....................................................................................
مسائل يجب التفكير فيها11 ....................................................................
مقدمــة .1
مقدمة 12 .....................................................................................
مميزات بيثون 12 .............................................................................
الخلصة 15 ......................................................................................
لماذا ليس بيرل؟ 15 ..........................................................................
ماذا يقول المبرمجون 16 .....................................................................
ثبيت بايثون .2
لمستخدمي لينكس/بيإسدي 17 ..............................................................
لمستخدمي ويندوز18 .........................................................................
الخلصة 18 .....................................................................................
الخطوات الولى .3
مقدمة 19 ......................................................................................
استخدام المحث 20 ...........................................................................
اختيار محرر 21 ............................................................................
استخدام ملف مصدري 21 ....................................................................
الخرْج 21 .....................................................................................
كيف يعمل 22 ...............................................................................
برامج بيثون تنفيذية 22 ....................................................................
الحصول على المساعدة 24 .................................................................
الخلصة 24 .................................................................................
الساسيات .4
الثوابت الحرفية 25 ..........................................................................
.7الدوال
مقدمة 50 .....................................................................................
تعريف دالة 50 ...............................................................................
معاملت الدالة 51 ...........................................................................
استخدام معاملت الدالة 50 ..................................................................
المتغيرات المحلية 52 ........................................................................
استخدام المتغيرات المحلية 52 ..............................................................
استخدام اللادة 53 ................................................................. global
القيم المبدئية للمعطيات 54 .................................................................
استخدام القيم المبدئية للمعطيات 55 .......................................................
معطيات الكلمات المفتاحية 56 ...............................................................
استخدام معطيات الكلمات المفتاحية 56
الفادة 57........................................................................... return
استخدام إفادة 57 ................................................................. return
جمل التوثيق 58 ..............................................................................
استخدام جمل التوثيق 58 ....................................................................
الخلصة 59 ...................................................................................
.8الوحدات
مقدمة 59 .....................................................................................
استخدام الوحدة 60 .................................................................... sys
ملفات البيتات المصرفة 62 ............................................................ pyc
الفادة 63 ...................................................... ........from .. import
خاصية __ __nameللوحدة 63 ...........................................................
استخدام __ __nameالوحدة 63 ..........................................................
عمل وحداتك الخاصة 64 ..................................................................
إنشاء وحداتك الخاصة 64 .................................................................
الدالة )(65 ............................................................................... dir
استخدام الدالة )(65 ................................ .................................. dir
الخلصة 66 ................................................................................
.9هياكل البيانات
مقدمة 67 ...................................................................................
القائمة 68 ...................................................................................
مقدمة سريعه إلى الكائنات والفئات 68 .....................................................
استخدام القوائم 68 .........................................................................
تمهيــــد
قائمة المحتويات
لمن هذا الكتاب؟
تاريخ الكتاب
حالة الكتاب
الموقع الرسمي
بنود الترخيص
القتراحات
مسائل يجب التفكير فيها
بيثون هي واحدة من تلك اللغات القليلة التي يمكننا الدعاء أنها تجمع بين البساطة والقوة .إنها لغة
جيدة للمبتدئين وللمحترفين على حد سواء ،والمر الهم المتعة في البرمجة بها .يهدف الكتاب إلى
مساعدتك في تعلم هذه اللغة الرائعه ويريك كيفية إنجاز المور بسرعة وسهولة – وفى الواقع هو
'الترياق المثالي لمشاكلك البرمجية'.
تاريخ الكتـاب
في أول المر بدأت مع بيثون عندما احتجت إلى برنامج تثبيت لبرمج يتي ،Diamondحتى
أجعل التثبيت سهل .وكان علي الختيار بين ارتباطات بيثون و بيرل مع مكتبة QTوبحثت في
شبكة النترنت حتى عثرت على مقالة لِريك إس .رايموند -ذلك الهاكر المبجل والمشهور -
يتكلم فيها عن كيف أصبحت بيثون هي لغة برمجته المفضلة .وكذلك اكتشفت أن ارتباطات
PyQtجيدة جدا بالمقارنة مع .Perl-Qtلذلك قررت أن بيثون هي لغتي.
بعدها بدأت البحث عن كتاب جيد في لغة بيثون .ولكني لم أجد أيا منها!! ،وقد وجدت بعض
كتب O'Reillyولكنها كانت إما باهظة الثمن للغاية ،أو أقرب إلى الكتيب المرجعي منها إلى
دليل .وبالتالي اتج هت إلى الوثائق التي جاءت مع بيثون ،لكنها كانت مختصرة جدا وصغيرة،
وقد أعطتني فكرة جيدة عن بيثون ،ولكنها لم تكن مكتملة .وقد أمكنني التعامل معها حيث كان
لدي خبرة مسبقة بالبرمجة ،ولكنها غير ملئمة للمبتدئين.
بعهد سهتة أ شهر مهن أول لقهاء لهي مهع بيثهون قمهت بتثهبيت آخهر توزيعهة )فهي وقتهها( من ردههات
،Red Hat 9وبهدأت ألعهب ببرنامهج ،KWordوكنهت أزداد إثهارة وفجهأة خطهرت لهي فكهرة
كتا بة مادة عن بي ثون .و قد بدأت الكتا بة بقل يل من ال صفحات ،ولكن ها سريعا أ صبحت ثلث ين
صفحة طويلة ،بعدها صبحت جادا في جعلها أكثر فائدة على شكل كتاب .وبعد الكثير من إعادة
الكتابهة ،أصهبح فهي مرحلهة كهونه مرجعها مفيهدا فهي تعلهم لغهة بيثهون ،وأنها أعتهبر ههذا الكتهاب
مساهمتي وتحيتي لمجتمع المصادر المفتوحة.
بدأ هذا الكتاب كملحظات شخصية عن بيثون وما زلت أنظر إليه نفس النظرة ،بالرغم من أني
بذلت فيه الكثير من الجهد ليكون أكثر قبول عند اﻵخرين (:
ومن خلل الروح الحقيقية لمجتمع المصادر المفتوحة ،تلقيت الكثير من القتراحات البناءة،
والنتقادات وردود فعل متحمسة من القراء مما ساعدني كثيرا على تحسين هذا الكتاب.
حالة الكتـاب
ما يزال هذا الكتاب قيد العمل .حيث الكثير من الفصول تتغير باستمرار وتتحسن ،ومع ذلك
فالكتاب قد نضج كثيرا ،وستكون مستعدا لتعلم بيثون بسهولة من هذا الكتاب .من فضلك
أخبرني إن وجدت أي جزء في هذا الكتاب غير صحيح أو غير مفهوم.
هناك خطط لمزيد من الفصول في المستقبل ،مثل فصل عن wxPython Twistedوربما
حتى .Boa Constructor
الموقع الرسمي
الموقع الرسمي لهذا الكتاب هو http://www.byteofpython.infoومن خلل الموقع يمكنك
قراءة الكتاب كامل بشكل مباشر أو تنزيل آخر إصدار من الكتاب ،وكذلك إرسال الملحظات
لي.
بنود الترخيص
هذا الكتاب مرخص بموجب رخصة البداع العامة غير التجارية المشاركة بالمثل .2.0
)Creative Commons Attribution-NonCommercial-ShareAlike
License (2.0
أساسا ؛ لك الحرية في نسخ وتوزيع ،وعرض الكتاب ،طالما أنك تنسب الفضل لي .القيود هي
أنه ل يمكنك استخدام الكتاب لغراض تجارية بدون إذن مني .لك الحرية في التعديل والبناء
على هذا العمل ،شريطة أن تقوم بوضع علمات واضحة لكل التغييرات وإصدار العمل المعدل
تحت نفس الرخصة كما هذا الكتاب.
من فضلك قم بزيارة موقع الرخصة لقراءة نصها كامل ،أو لصدارة سهلة الفهم ،إذ يوجد
حتى بالموقع قصة مصورة لشرح الرخصة.
القتراحات
لقد بذلت الكثير من الجهد لجعل هذا الكتاب مفيدا ومحكما على قدر المكان .ولكن ،إذا وجدت
بعض المواد غير متسقة أو غير صحيحة ،أو ببساطة بحاجة إلى تحسين ،رجاء أبلغني ،بحيث
أتمكن من عمل الصلحات المناسبة .يمكنك الوصول إليَّ عبر >
.<swaroop@byteofpython.info
فصل .1مقدمـــة
قائمة المحتويات
مقدمة
مميزات بيثون
الخلصة
لماذا ليس بيرل؟
ماذا يقول المبرمجون
مقدمــة
بيثون هي واحدة من تلك اللغات القليلة التي يمكن الدعاء أنها بسيطة و قوية على حد سواء.
ستتفاجأ كم هي سهلة وتركز على حل المشكلة وليس تراكيب وأساسيات لغة البرمجة التي
تبرمج بها.
المقدمة الرسمية لبايثون هي
بيثون هي لغة برمجة سهلة التعلم ،قوية .لها هيكلة بيانات عالية المستوى كفؤة ،وتوجه
بسيط لكن فعال نحو البرمجية الكائنية .حذاقة قواعد بيثون ودينامية تحديد النواع ،جنبا
إلى جنب مع طبيعتها التفسيرية ،تجعل من بيثون لغة مثالية لبرمجة السكربتات وتطوير
التطبيقات السريع في العديد من المجالت على معظم المنصات.
ملحظة
أطلق جويدو ڤان روسام )- (Guido van Rossumمؤلف لغة بيثون -عليها هذا
السم على اسم عرض هيئة الذاعة البريطانية "سيرك مونتي للثعابين الطائرة
") .(Monty Python's Flying Circusفهو ليس معجبا بالثعابين التي تقتل
الحيوانات لتتغذى عليها عن طريق تصفية جسدها باللتفاف حولها ثم سحقها.
مميزات بيثون
بسيطة
بيثون لغة بسيطة لبعد الحدود .قراءة برنامج بيثون جيد يكاد يشبه قراءة اللغة النكليزية على
الرغم من أنها إنجليزية صارمة!هذه الطبيعة الشبه رمزية ) (pseudo-codeلبايثون أحد
سهلة التعلم
كما سترون ،بيثون سهلة للغاية لتبدأ بها في تعلم البرمجة .بيثون تحتوي تراكيب سهلة بشكل
غير معتاد ،كما سبق ذكره.
بيثون هي مثال على البرمجيات الحرة مفتوحة المصدر .بعبارات بسيطة ،يمكنك بحرية توزيع
نسخ من هذه البرمجيات ،وقراءة كود المصدر ،و القيام ببعض التغييرات عليها واستخدام أجزاء
منها في برمجيات حرة جديدة ،وأنت تعرف أنه يمكنك أن تفعل هذه الشياء .البرمجيات الحرية
تقوم على مبدأ المجتمع الذي يتشارك في المعرفة .هذا واحد من أسباب كون بيثون جيدة جدا -
لنه قد تم إنشاؤها وتحسينها بشكل مستمر من خلل المجتمع الذي يريد فقط أن يرى بيثون
أفضل.
عندما تكتب البرامج في بيثون ،ل تحتاج للهتمام بالتفاصيل دقيقة المستوى مثل إدارة الذاكرة
التي يستخدمها برنامجك ،إلخ.
محمولة
نظرا لطبيعتها كبرمجية مفتوحة المصدر ،تم نقل بيثون إلى )أي تم جعلها تعمل على( العديد
من المنصات .كل ما تكتبه من برامج بيثون يمكن أن يعمل على أي من هذه المنصات دون أن
يتطلب ذلك أي تغييرات على الطلق إذا كنت دقيقا بما فيه الكفاية لتجنب أي خصائص تعتمد
على نظام بعينه.
يمكنك استخدام بيثون على لينكس ،ويندوز ،فري بيإسدي ،ماكينتوش ،سولريسOS/2، ،
Amiga، AROS، AS/400، BeOS، OS/390، z/OS، Palm OS، QNX، VMS،
Psion، Acorn RISC OS، VxWorks، PlayStation، Sharp Zaurus،
Windows CEوحتى الحاسوب الكفي.
مفسَّرة
بيثون -من ناحية أخرى -ل تحتاج التصريف إلى كود ثنائي .فقط شغل البرنامج مباشرة من
الكود المصدر .داخليا ،فإن بيثون يحول كود المصدر إلى شكل وسيط يسمى bytecodeثم
يترجم هذا إلى اللغة الصلية لجهازك ،ثم يشغله .كل هذا يجعل من السهل بكثير استخدام
بيثون حيث لست بحاجة للهتمام بتصريف البرنامج ،أو التأكد من صحة مكتبات الربط
وتحميلها ،الخ ،الخ .وهذا أيضا يجعل برامج بيثون الخاصة بك أكثر محمولية ،بحيث يمكنك
مجرد نسخ برنامج بيثون الخاص بك إلى حاسوب آخر ،وبعدها يعمل!
كائنيـة التوجـه
قابلة للمتداد
إذا كنت في حاجة لجعل جزء حيوي من الكود يعمل سريعا جدا أو تريد إخفاء بعض الخوازميات،
فيمكنك كتابة هذا الجزء من برنامجك بلغة سي أو سي ++وبعدها تستخدمه من برنامج
بيثون الخاص بك.
قابلة للتضمين
مكتبات شاملة
مكتبهة بيثهون القياسهية مكتبهة ضهخمة حقها .تسهاعدك علهى عمهل مختلهف الشهياء العاديهة بمها فيهها
بجانب المكتبات القياسية توجد العديد من المكتبات المتنوعة الخرى عالية الجودة مثل
،wxPythonو ،Twistedو Python Imaging Libraryوغيرها الكثير.
الخلصـة
بي ثون ل غة مثيرة وقو ية ح قا .ف هي مز يج من ح سن ا لداء والم يزات ا لتي تج عل كتا بة برا مج
بيثون خليطا من السهولة والمتعة.
أقترح ورشة هاك لنقل وحدات بيرل إلى بيثون في (: comp.lang.python
كهذلك؛ اﻵل ة الفتراضي ة الجديدةه Parrotمصهممة لتشهغيل كهل مهن لغهة بيهرل 6المعهاد
تصهميمها تمامها بالضهافة لبهايثون واللغهات المفسهرة الهخرى مثهل Rubyو PHPو .Tclمها
يعنيه هذا بالنسبة لك أنك ربما تكون قادرا على استخدام جميع وحدات بيرل من داخل بيثون
فهي المسهتقبل ،ولهذا سهيمنحك ذلهك الفضهل فهي كهل مهن أقهوى مكتبهة فهي العهالم CPAN
بالشتراك مع لغة بيثون القوية .على أية حال؛ علينا فقط أن ننتظر ونرى ما سيحدث.
ماذا يقول المبرمجون
ربما من المهم أن تقرأ ما يقوله عظماء الهاكر من أمثال إِريك س .رايموند.
إِر يك س .رايمو ند مؤلهف كتهاب 'الكاتدرائيهة والسهوق' )The Cathedral and the
(Bazaarو هو أي ضا واضهع م صطلح 'الم صادر المفتو حة' .يقهول لقد أصبحت بيثون هي لغة
برمجته المفضلة .وتعتبر هذه المقالة هي الملهم الحقيقي لي في أولى خطواتي مع بيثون.
بروس إيك ِل مؤلهف الكتهب الشههيرة 'التفكيهر بلغهة جافها' و 'التفكيهر بلغهة سهي '++يقهول أن
ليس هناك لغة قد جعلته أكثر إنتاجية من بيثون .ويقول أن بيثون ربما تكون اللغة الوحيدة
التي تركز على جعل المور أسهل بالنسبة للمبرمج .اقرأ المقابلة الكاملة لمزيد من التفاصيل.
ب يتر نور فج مؤ لف لي سب شهير و مدير جودة الب حث في جو جل ) شكرا لجو يدو ڤڤان رو سام
لشارته إلى ذلك( يقول أن بيثون كانت دائما جزءا أصيل من جوجل .يمكنك التحقق من هذا
التصهريح في الواقهع من خلل الن ظر فهي صفحة وظائف جوجل .والهتي وضهعت ل غة بي ثون فهي
قائمة المعارف المطلوبة من مهندسي البرمجيات.
بروس پ يرينههز أحههد مؤسسههي OpenSource.orgومشههروع .UserLinuxيهههدف
Userlinuxلعمهل توزيعهة قياسهية مهن لينكهس مدعومهة مهن منتجيهن متعهددين .وقهد ضهربت
بيثون المتنافسين مثل بيرل وروبي لتصبح لغة البرمجة الرئيسية التي ستكون مدعومة من قبل
.Userlinux
لمستخدمي لينكس/بيإسدي
إذا كنت تَستعملُ توزيعة لينكس مثل فيدورا أَو ماندريك أَو }ضع اختيارَكَ هنا{ ،أَو نظام
بيإسدي مثل فري بيإسدي ،فغالبا بيثون مثبتة على نظامك.
لختِبار ما إذا كانت بيثون موجودة بالفعل عندك على توزيعة لينكسَ ،افتح برنامج طرفية
)مثل konsoleأَو (gnome-terminalوأدخل المر python -Vكما موضح بأسفل.
$ python -V
Python 2. 3. 4
ملحظــة
$ههي علمهة المحهث فهي صهدفة النظهام وذلهك قهد تختلهف بالنسهبة لهك اعتمهادا علهى إعهدادات
نظامك .لذا سوف أشير إلى المحث بهذا الرمز فقط .$
إذا رأيت بعض المعلومات عن الصدارة مثل المعروض أعله ،فبايثون مثبتة بالفعل.
ولكن إذا حصلت على رسالة مثل هذه:
$ python -V
bash: python: command not found
فبايثون ليست مثبتة عندك .هذا من المستبعد جدًا لكنه ممكن.
في هذه الحالة ،هناك طريقتان لتثبيت بيثون على نظامِك :
تثبيت حزم ثنائية باستخدام برامجَ إدارةِ الحزم التي تَجيءُ مع النظام ،مثل yumفي لينكس
فيدورا ،و urpmiفي لينكس ماندراك ،و apt-getفي لينكس دبيان ،و pkg_addفي نظام
،FreeBSDإلخ .مُلحظة :ستحتاج اتصالًا بالنترنت لستعمال هذه الطريقة.
أوبديلًا عن ذلك ،يُمْكِنُك أَنْ تُحمّلَ الحزم الثنائية مِنْ مكان آخر وبعد ذلك انسخها إلى
جهازك وقم بتثبيتها.
يُمْكِنُ أَنْ تصرّف بيثون من الكود المصدري وتثبتها .تعليمات التصريف موجودة في موقع
بيثون.
لمستخدمي ويندوز
اذههب إلهى Python.org/downloadونهزّل آخهر إصهدارة بيثهون مِنهْ ههذا الموقهع .يبلهغ
حجمها 4 .9م .بايت فقط وهي مضغوطةُ جدًا بالمقارنة مع أكثر لغات البرمجة الخرى .و
التثبيت مثل أيّ برامج على بيئة ويندوز.
تحذيـر
عندما تَعطي خيارًا بعدم تثبيت أيّ مكوّنات اختيارية ،ل ترفع العلمة عن أيها ستكون
بعض هذه المكوّناتِ مفيدا لَك ،خصوصًا .IDLE
الحقيقهة المهثيرة أنهّ حهوالي %70ممهن قهام بتحميهل برامجهِ بيثهون مِهن مسهتعملي وينهدوز.
بالطبع ،هذه ل تَعطي صورةَ كاملةَ حيث أن كُلّ مستعملي لينكس تقريبا سَيكونُ عِنْدَهُمْ
بيثون مثبتا على أنظمتِهم بشكل مبدئي.
الخلصة
بالنسهبة لنظهام لينكهس غالبها بيثهون مثبّتهة علهى نظهامِكَ .وإل فيُمْكِنُهك أَنهْ تُثبتهها
با ستخدام برامجهَ إدارةِ الحهزم الهتي تَجيءُ مهع توزيع تك .بالنسهبة لنظهام وي ندوز ،ي تم
تثبيت بيثون بسهولة كذلك من خلل تَحميل ملف البرنامج وبالنقر مرتين عليه .ومن
اﻵن فصاعدًَا ،سنفترض أنّ بيثون مثبتة على نظامك.
الفصل القادم ،سَنَكْتبُ برنامجَنا الول على بيثون.
استخدام المحث
اختيار محرر
استخدام ملف مصدري
الخرْج
كيف يعمل
برامج بيثون تنفيذية
الحصول على المساعدة
الخلصةمقدمة
مقدمـــة
سهَنَرى اﻵهن كَيفهَ نشهغل البرنامهج التقليهدي ' 'Hello Worldفهي بيثهون .سهَيُعلّمُك ههذا
كَيفَ تَكْتبُ ،وتحفظ ،وتشغّل برامجَ بيثون.
هناك طريقتين لستخدام بيثون لتشغيل برنامجِكَ؛ استخدام محث المفسر التفاعلي )من خلل
أي طرفية( أو استخدام ملف مصدري .وسَنَرى اﻵن كَيفَ نَستعملُ كلتا الطريقتين.
استخدام المحـث
ابهدأ المفسهر فهي سهطر الهوامر بكتابهة كلمهة pythonفهي محهث الصهَّدَفة .واﻵهن اكتهب
'print 'Hello Worldمتبو عة بزر .Enterي فترض أن ترى الكل مات Hello World
كناتج.
لمسهتخدمي وينهدوز ،يُمْكنهك أن تشهغل المفسهر مهن سهطر الهوامر إذا ضهبطت دليهل المتغيّهر
PATHبشهكل ملئم .أو بهديلًا عهن ذلهك ،يُمْكِنُهك أَنهْ تَسهتعملَ برنهامجَ IDLE. IDLE
عبارة عن بيئةِ تطوير متكاملة .انقر على >Start -> Programs -> Python 2. 3 -
.(IDLE (Python GUIمستخدمي لينكسِ يمكنهم أن يستعملوا IDLEأيضًا.
لحظ أن هذه العلمة >>> هي محث إدخال إفادات بيثون.
مثال .3.1استعمال محث مفسر بيثون
$ python
)Python 2.3.4 (#1, Oct 26 2004, 16:42:40
لحظْ أنّ بيثون تعطيك ناتجَ السطر فورًا .ما أدخلته هو إفادة بيثون واحدة .نستخدم print
-ليست مفاجئة -لطبع أيّة قيمة نعطيها لها .هنا ،أعطيناها النَصَّ Hello Worldوقد طُبِع
فورًا على الشاشة.
كيفية الخروج من محث بيثون
للخُهرُوج مهن محهث البرنامهج اضهغط علهى مفتهاحي Ctrl+dإذا كنهت تَسهتعملُ IDLEأَو
تسهتخدم صهددَفَة لينكهس/بيإسهدي .فهي حالهة سهطر أوامهر وينهدوز ،اضهغط مفتهاح Ctrl+z
متبوعة بمفتاح .Enter
اختيـار محــرر
قَبْلَ أَنْ نَنتقل لكِتابة برامجِ بيثون في الملفاتِ المصدريةِ ،نَحتاجُ محرّرًا لكِتابَة الملفاتِ
الم صدريةِ .اخت يار المُ حرّرِ أ مر في غا ية الهم ية .يَجِ بُ أَ نْ تخ تارَ الم حررَ ك ما تَخ تارُ
سيارة تَشتريها .المحرّر الجيد يُساعدُك على كتابة برامج بيثون بسهولة ،ويَجْعلُ رحلتَك
مريحةً أكثرَ ويُساعدُك لتَصِلَ إلى غايتِكَ بطريقة أسرع بكثير وأكثر أمانًا.
إحهدى المتطلبهاتِ الساسهيةِ جهدًا ههي إبراز الهتركيب ) (syntax highlightingحيهث
تلون أجزاء برنامجِ بيثون المختلفة حتى يتسنى لك أن تَرى بر نامجَكَ وتَتصوّرُ كيفية
عمله.
إذا كنت تَستعملُ ويندوز ،أَقترحُ عليك استعمال .IDLEحيث إن IDLEيقوم بعمل بإبراز
الهتركيب وأكهثر مثهل تمكينهك مهن تشهغيل برامجِكهَ داخهل IDLEضهمن أشهياءِ أخهرى.
مُلحظة خاصّة :ل ت ستعملْ ،Notepadفهي اختيار سيئ لنها ل تقوم بإبراز التركيب
والههم مهن ذلهك أنهه ل تَهدْعمُ إزاحهة النَصهِّ ) ،indentationأي تنظيهم المسهافات البهادءة(
وهو مهمُ جدًا في حالتِنا كما سَنَرى لحقًا .المحرّرات الجيدة مثل ) IDLEوأيضًا (VIM
ستساعدك آليًا على عمَل ذلك.
إذا كنهت تَسهتعملُ لينكهس/بيإسهدي فلهديك الكهثير مِنهْ المحهرّرِات لتختهار منهها .وإذا كنهت
مبرمجا خبيرا ،فمن المؤكد أنك تستعمل VIMأو .Emacsول حاجة للقول بأنهما اثنان
مِنْ المحرّرات القوى و سَتَستفيدُ من استعمالهما لكِتابَة برامجِ بيثون .أنا شخصيًا أَستعملُ
VIMلغلب برامجِي .إذا كنت مبرمجِا مبتدئا ،حينئذ يُمْكِنُك أَنْ تَستعملَ ،Kateوهي
إحدى أدواتي المفضّلةِ .في حالة ما إذا كنت راغبا في قضاء وقت لتَعَلّم VIMأَو ،Emacs
فإني أَو صيك ب شدة أن تَتعل ّم ا سْتِعْمال أي منه ما ح يث سَيَكُونُ ذ لك مف يدا جدًا ل َك في
المدى البعيد.
إذا كنهت مها تهزال تُريهدُ اسْتِكْشهاف الخيهارات الهخرى مهن المحهررات ،انظهر القائمةَ الشاملةَ
لمحرّرات بيثون وحدد خيارك .يُمْكِنُك أَنْ تَختارَ أيضًا بيئة تطوير متكاملةِ لبايثون ،طالع
القائمةَ الشاملةَ لبيئات التطوير التي تدعمِ بيثون للمزيد من التفاصيل.
أُكرّرُ مرةً أخرى ،رجاءً اخترْ محرّرا جيدا ،فهو يَجْعلَ كتابة برامج بيثون أكثرَ مرحَا
وسهولة.
#!/usr/bin/python
# Filename : helloworld.py
'print 'Hello World
)الملف المصدر(code/helloworld.py:
شهغل ههذا البرنامهج عهن طريهق فتهح الصهدفة )طرفيهة لينكهس أو محهث دوس( ثهم كتابهة الهمر
.python helloworld.pyإذا كنهت تسهتخدم IDLEفاسهتخدم قائمهة Edit -> Run
Scriptأو اختصار لوحة المفاتيح .Ctrl+F5الخرْج مبين أدناه.
الخرْج
إذا حصلت على الناتج كما هو مبين أعله ،فتهانينا لك ،لقد نجحت في تشغيل أول برنامج لك
في بيثون.
وفي حال حصلت على خطأ ما ،يرجى كتابة البرنامج المذكور بالضبط كما هو مبين أعله
وتشهغيل البرنامهج مهرة أخهرى .لحهظ أن بيثهون حساسهة لحالهة الهحرف )التفريهق بيهن الهحرف
اللتينية الكبيرة والصغيرة( مثل كلمة printل تساوي - Printلحظ الحرف الصغير pفي
الكلمة الولى و الحرف الكبير Pفي الخيرة -أيضا ،تأكد من عدم وجود مسافات قبل الحرف
الول في كل سطر -سنرى لماذا هذا أمر مهم في وقت لحق.-
كيف يعمل
دعونها ننظهر فهي أول سهطرين مهن البرنامهج .تسهمى ههذه تعليقهات ) ،(commentsأي شهيء
مكتوب على يمين الرمز #هو تعليق و هو في الساس أمر مفيد لقارئ هذا البرنامج.
بيثهون ل تسهتخدم التعليقهات باسهتثناء السهطر الهول هنها وههو حالهة خاصهة .وههي تسهمى سهطر
شهابانغ ) (shebangعنهدما يكهون أول حرفيهن مهن الملهف المصهدري عبهارة عهن !#متبوعها
بمسهار برنا مج فهإن ههذا يخهبر لينكهس/يهونكس أن ههذا البرنا مج يجهب أن يعمهل مهع ههذا المفسهر
) (interpreterعنهد تنفيهذه .وسهوف يُشهرح ههذا بالتفصهيل فهي الفصله هالتالي .علمها بهأنه
يمكنك دائما تشغيل البرنامج على أي منصة من خلل تحديد المفسر مباشرة على سطر الوامر
مثل المر .python helloworld.py
ههام
استخدم التعليقات بحنكة في برنامجك لشرح بعض التفاصيل المهمة في البرنامج ،وهذا أمر
مفيد لقارئ برنامجك بحيث يمكن بسهولة فهم ما يقوم به البرنامج .تذكر ،إن هذا الشخص
يمكن أن يكون أنت نفسك بعد ستة أشهر!
التعليقات متبوعة بإفادة بيثون ،تقوم فقط بطباعة النص ' .'Hello Worldكلمة printهي
في الحقيقة عامل ) (operatorو ' 'Hello Worldيشار إليها باعتبارها سلسلة )،(string
ل تقلق ،سنبحث أمر هذه المصطلحات بالتفصيل لحقا.
$ ./helloworld.py
Hello World
أمر chmodيستخدم هنا لتغيير حالة تصاريح الملف لجعله قابل للتنفيذ باعطاء الصلحية
لجم يع م ستخدمي الن ظام .وب عدها فإن نا نن فذ البرنا مج مبا شرة عن طر يق تحد يد مو قع الم لف
المصدري .نستخدم / .لتشير إلى أن هذا البرنامج يقع في الدليل الحالي.
لجعل المور أ كثر متعة ،يمكنك فقط إعادة تسمية الم لف إلى helloworldوتشغيله على
النحهو helloworld / .وسهيعمل لهن النظهام يعهرف أن عليهه تشهغيل البرنامهج باسهتخدام
المفسر المحدد في السطر الول من الملف المصدر.
أنت اﻵن قادر على تشغيل البرنامج ما دمت تعرف بالضبط مسار البرنامج ،ولكن ماذا لو كنت
تريهد القهدرة علهى تشهغيل البرنامهج مهن أي مكهان؟ يمكنهك أن تفعهل ذلهك مهن خلل تخزيهن
البرنا مج في واحدة من الدله الواردة في م سار متغ ير ا لبيئة .PATHكل ما ق مت بت شغيل أي
برنامج ،فإن النظام يبحث عن هذا البرنامج في كل من الدلة الواردة في مسار متغير البيئة
PATHومن ثم يشغل هذا البرنامج .يمكننا أن نجعل هذا البرنامج متاحا في كل مكان وبكل
بساطة نسخ هذا الملف المصدر إلى واحد من الدله الواردة في المسار .PATH
تحـذيــر
في بيثون برنامج أو سكريبت أو تطبيق جميعها تعني نفس الشيء.
ملحظــة
اضغط qللخروج من المساعدة.
وبالمثل ،يمكنك الحصول على معلومات عن أي شيء تقريبا في بيثون .استخدم ()helpلمعرفة المزيد حول
استخدام المساعدة نفسها.
في حال كنت بحاجة إلى الحصول على مساعدة عن عامل مثل ،printفأنت بحاجة إلى تحديد متغير البيئة
PYTHONDOCSبشكل مناسب .ويمكن أن يتم ذلك بسهولة على لينكس/يونكس باستخدام المر .env
الخلصة
يجهب أن تكهون اﻵهن قهادرا علهى كتابهة ،وحفهظ ،وتشهغيل برامهج بيثهون بكهل سههولة .اﻵهن أنهت
مستخدم بيثون ،دعنا اﻵن نتعلم مفاهيم أكثر عن بيثون.
فصل .4الساسيات
قائمة المحتويات
الثوابت الحرفية
العداد
السلسل
المتغيرات
تسمية المعرف
أنواع البيانات
الكائنات
الخرْج
كيف يعمل
السطور المادية والمنطقية
الزاحة
الخلصة
مجهرد طباعهة ' 'Hello Worldفقهط ل يكفهي ،أليهس كهذلك؟ ههل تريهد أن تفعهل أكهثر مهن
ذلك؛ تريد أخذ بعض المدخلت ،و معالجتها والحصول على شيء منها .يمكننا أن نحقق هذا في
بيثون باستخدام الثوابت والمتغيرات.
الثوابت الحرفية
من المثلة على الثابت الحرفي العدد ،5أو ،23 .1أو ،25e-3 .9أو سلسلة مثل 'هذه سلسلة'
أو " ."!It's a stringوههذه تسهمى حرفيهة ) (literalلنهها حرفيهة ،وأنهت تسهتخدم قيمتهها
) (constantلن الحرفيهة .الرقهم 2يم ثل نف سه دائ ما ول شهيء آ خر؛ ف هو ثهابت
قيمتهه ل يمكهن أن تتغيهر .لهذلك ،فههذه كلهها يشهار إليهها بأنهها ثهوابت حرفيهة )lliteral
.(constants
العـــداد
العههداد فههي بيثههون أربعههة أنههواع -:أعههداد صههحيحة ) ،(integersأعههداد صههحيحة طويلههة
) ،(long integersوكسهههور عشهههرية ) (floating pointوأعهههداد مركّبهههة
).(complex numbers
العداد الصحيحة مثل 2التي هي عدد صحيح فقط.
السـلسـل
السلسلة ) (stringهي تتابع من المحارف .السلسل ببساطة مجرد مجموعة من الكلمات.
أكهاد أضهمن لهك أنهك ستسهتخدم السلسهل تقريبها فهي كهل برامهج بيثهون الهتي تكتبهها ،لهذلك
عليك النتباه إلى الجزء التالي .وإليك كيفية استخدام السلسل في بيثون:
•استخدام علمات التنصيص المفردة )'(
يمكنهك تحديهد سلسهلة بوضهعها بيهن علمهتي تنصهيص مثهل 'ههذه جملهة' جميهع الفراغهات مثهل
المسافات وعلمات التبويب تبقى كما هي.
استخدام علمات التنصيص المزدوجة )"(
الجمل ضمن علمات التنصيص المزدوجة تعمل تماما كما في علمات التنصيص المفردة .مثل
""?What's your name
•استخدام علمة التنصيص الثلثية )''' أو """(
يمكنك تحديد سلسل متعددة السطر باستخدام علمات التنصيص الثلثية .ويمكنك استخدام
علمة التنصيص المفردة والمزدوجة بحرية ضمن علمة التنصيص الثلثية .مثل
'''This is a multi-line string. This is the first line.
This is the second line.
"What's your name?," I asked.
He said ""Bond, James Bond.
'''
الولى( .يمكن إنجاز ذلك بمساعدة ما يسمى تتابع الخلوص ) .(escape sequenceاجعل
علمة القتباس المفردة هكذا \' -لحظ الشرطة الخلفية ) -(backslashاﻵن ،يمكنك تحديد
الجملة النصية بعلمة اقتباس مفردة هكذا '.'?What\'s your name
هناك طريقة أخرى لتحديد هذه السلسلة باستخدام " "?What's your nameأي باستخدام
علمهة تنصهيص مزدوجهة .وبالمثهل ،عليهك اسهتخدام تتهابع خلهوص مهن أجهل اسهتخدام علمهة
التنصهيص المزدوجهة داخهل جملهة محاطهة بعلمهة تنصهيص مزدوجهة .كهذلك ،عليهك تحديهد
الشرطة المائلة الخلفية ذاتها باستخدام تتابع الخلوص \\.
مهاذا لهو أردت اسهتخدام سلسهلة مهن سهطرين؟ يمكنهك إمها اسهتخدام علمهة تنصهيص ثلثيهة كمها
ذُكر سابقا أو يمكنك استخدام تتابع خلوص لمحرف السطر الجديد بكتابة \ nلتشير إلى بدء
سهطر جديهد .مثهال علهى ههذا .This is the first line\nThis is the second line
تتابع خلوص مفيد آخر؛ علمة التبويب \ .tهناك العديد من تتابعات الخلوص ولكني ذكرت هنا
أكثرها منفعة فقط.
شيء آخر علي نا ملحظ ته في السلسل ،هو أن ال شرطة الخلف ية في نها ية ال سطر تشير إ لى أن
السلسة مستمرة في السطر المقبل ،ولكن بدون إضافة سطر جديد .فمثل،
هو نفسه "" .This is the first sentence. This is the second sentence
السلسل الغفل
إذا كنت في حاجة إلى تحديد سلسل ل تريد أن يجري عليها أي معالجة خاصة مثل تتابعات
الخلوص ،فعليك تحديد سلسلة غفل ) (Raw Stringبتقديم الحرف rأو Rقبل السلسلة
مثل ."r"Newlines are indicated by \n
سلسل يونيكود
يونيكود هي طريقة معيارية لكتابة النصوص العالمية .فإذا أردت كتابة نص بلغتك القومية
مثل اللغة العربية أو الهندية ،فستحتاج إلى محرر نصوص يدعم يونيكود .وبالمثل ،فإن بيثون
تتيح لك التعامل مع نصوص يونيكود ،كل ما عليك فعله هو إضافة البادئة uأو Uقبل
النص .على سبيل المثال." .u"This is a Unicode string ،
تذكر أن تستخدم يونيكود عندما تريد التعامل مع الملفات النصية ،وخاصة تلك التي تحتوي
نصوصا بلغة غير النجليزية.
السلسل ثابتة
وهذا يعني أنه بعد إنشاء السلسلة ل يمكنك تغييرها .ورغم أن هذا قد يبدو أمرا سيئا ،إل أنه
ليس كذلك في الحقيقة .سنرى لم ليس هذا قيدا في مختلف البرامج التي سنراها في وقت
لحق.
تجميع نصوص السلسل
إذا كنت وضعت سلسلتين جنبا إلى جنب ،فستقوم بيثون تلقائيا بجمعهما .على سبيل المثال' ،
'?What\'s' 'your nameتُحول تلقائيا إلى "."?What's your name
المتغيرات
استخدام الثوابت الحرفية فقط يمكن أن يصبح سريعا أمرا مملًا ،ونحن بحاجة الى طريقة ما لتخزين
المعلومات ومعالجتها .هنا تظهر المتغيرات ) (Variablesفي الصورة .المتغيرات -كما يظهر من
اسمها -يمكن أن تتغير قيمتها ،أي يمكنك أن تخزن أي شيء باستخدام متغير .المتغيرات ليست سوى
أجزاء محجوزة من ذاكرة الحاسوب حيث تخزن بعض المعلومات .بعكس الثوابت الحرفية ،تحتاج إلى
طريقة ما للوصول إلى هذه المتغيرات ،ولذا نعطيها أسماء.
تسمية المعرف
المتغيرات هي أمثلة على المعرفات ) ،(Identifiersالمعرفات هي أسماء تعطى لتعريف شيء ما.
هناك بعض القواعد عليك اتباعها لتسمية المعرفات:
المحرف الول من المعرف يجب أن يكون حروفا من حروف الهجاء )ل تيني كبير أو صغير(
أو شرطة تحتية )'_'.(underscore ،
بقية اسم المعرف يمكن أن تتكون من الحروف )كبيرة أو صغيرة( ،أو الشرطة التحتية )'_'(،
أو الرقام ).(9-0
أسماء المعرف حساسة لحالة الحرف )سواء لتيني كبير أو صغير( على سبيل المثال
mynameو myNameل يتساويان .لحظ الحرف الصغير nفي الولى والكبير Nفي
الثانية.
أسماء المعرفات الصالحة مثل ،iو __ ،my_nameو name_23و .a1b2_c3
أسماء المعرفات غير الصالحة مثل ،2thingsو this is spaced outو .my-name
أنواع البيانات
يمكن أن تحمل المتغيرات أنواعا مختلفة من القيم تسمى أنواع البيانات .النواع الساسية هي العداد
والسلسل ،التي ناقشناها من قبل .وفي الفصول القادمة سنرى كيفية إنشاء أنواع خاصة بنا باستخدام
الصناف ).(classes
الكائنات
تهذكر أن بيثهون تشهير إلهى أي شهيء مسهتخدم فهي برنامهج علهى أنهه كهائن ) ،(objectوههذا
مقصود على وجه عام .فبدل من قول 'الشيء' نقول 'الكائن'.
الخــرْج
كيـف يعمــل
إليهك كيهف يعمهل ههذا البرنامهج .أول أسهندنا القيمهة الثابتهة الحرفيهة 5إلهى المتغيهر i
باستخدام المعامل )=( .هذا السطر يسمى إفادة ) (statementلنه يبين ويعين شيئا
ما ينبغي القيام به ،وفي حالتنا هذه ،ربطنا اسم المتغ ير iبالقيمه .5بعد ذلك طبعنا
قيمة iباستخدام جملة printالتي -كما هو متوقع -تطبع قيمة المتغير على الشاشة.
ثهم أضهفنا 1إلهى القيمهة المخزنهة فهي المتغيهر iثهم خزنهاه ثانيهة .ثهم طبعنهاه ،و -كمها
ومع ذلك ،فإنني أوصي بقوة أن تلتزم كتابة سطر منطقي واحد فقط في كل
سطر مادي وا حد .استخدم أكثر من سطر مادي لكل سطر منطقي إذا كان السطر
المنطقهي طهويل حقها .الفكهرة ههي تجنهب الفاصهلة المنقوطهة قهدر المكهان لهن ههذا يعنهي
كودا أسهل قراءة .في الحقيقة ،أنا لم أستخدم أبدا أو حتى أرى الفاصله المنقوطه في
برنامج بيثون.
فيما يلي مثال على كتابة سطر منطقي يمتد عبر عدة أسطر مادية .سمى هذا الو صل
العمدي للسطر ).(Explicit line joining
\ s = 'This is a string.
'This continues the string.
print s
وهذه تعطينا الناتج
This is a string. This continues the string.
وبالمثل:
\ print
i
print i
أحيانا يكون هناك افتراض ضمني بحيث ل تحتاج الى استخدام الشرطة العكسية المائلة
) .(backslashوهذا هو الحال عندما يستخدم السطر المنطقي القواس الهللية أو
المربعة أو المجعدة .وهذا يسمى الوصل الضمني للسطر .يمكنك أن ترى هذا
يعمل عندما نكتب برامج مستخدمين القوائم في الفصول القادمة.
الزاحههة
الفراغات البيضاء مهمة في بيثون وخاصة في بداية السطر .هذا ما يسمى الزاحة )
.(Indentationالفراغات البيضاء )المسافات وعلمات التبويب( في بداية السطور
المنطقية تستخدم لتحديد مستوى إزاحة السطر المنطقي ،والذي بدوره يستخدم لتحديد
تجميع من الفادات ).(Statements
وهذا يعني أن الفادات المرتبطة ببعضها يجب أن يكون لها نفس الزاحة .كل مجموعة
من هذه التصريحات تسمى لبنة ) .(blockوسنرى أمثلة على مدى أهمية اللبنات في
الفصول اللحقة.
أمر واحد عليك أن تتذكره وهو أن الزاحة الخاطئة يمكن أن تؤدي إلى أخطاء .فعلى
سبيل المثال:
i = 5
print 'Value is', i # Error! Notice a single space at the
start of the line
print 'I repeat, the value is', i
عند تشغيله يعطيك هذا الخطأ:
لحهظ أن ثمهة مسهافة فارغهة واحهدة فهي بدايهة السهطر الثهاني .الخطهأ الهذي أشهارت إليهه بيثهون
يخبرنا أن التركيب النحوي ) (syntaxلهذا البرنامج خطأ ،أي أن البرنامج غير مكتوب على
الوجه الصحيح .مع نى هذا أنك ل تستطيع بدء لبنة إفادات جديدة بصورة اعتباطية )باستثناء
اللبنة الرئيسية التي تستخدمها دائما ،بطبيعة الحال( .الحالت التي يمكنك فيها استخدام اللبنات
الجديدة سيتم تفصيلها في فصول لحقة مثل فصل التحكم في التدفق.
كيفية الزاحة
ل تستخدم خليطا من المسافات وعلمات التبويب للزاحة لنها ل تعمل على النحو الصحيح عبر
مختلهف المنصهات .وأوصهي بشهدة أن تسهتخدم علمهة تبهويب واحهدة أو مسهافتين أو أربهع لكهل
مستوى إزاحة.
اخهتر أيها مهن أسهاليب الزاحهة هذه .الههم أن تختهار واحهدة وتسهتخدمها بان ضباط ،أي اسهتخدم
أسلوب الزاحة هذا فقط.
الخلصة
اﻵن بعد أن مررنا على كثير من التفاصيل الدقيقة ،يمكننا النتقال إلى أشياء أكثر متعة مثل
التحكم في تدفق الفادات .تأكد من أن تعتاد على ما قرأته في هذا الفصل.
مقدمـــة
أغلهب الفهادات )) (statementsالسهطور المنطقيهة( الهتي سهتكتبها تحتهوي علهى تعهبيرات
) expressions). 2 + 3مثال بسيط على أحد التعبيرات.
تنقسم التعبيرات إلى عوامل ومعاملت:
العوامل ) (operatorsهي وظيفة تقوم بعمل شيء ما ويمكن تمثيلها برمز مثل +أو كلمة
مفتاحية خاصة .تحتاج العوامل لبيانات تعمل عليها وتسمى هذه المعاملت ) .(operandsففي
هذه الحالة تعتبر 2و 3معاملت.
العوامل
سنأخذ نظرة سريعة على العوامل واستخداماتها.
فكرة مفيدة
يمكنك حساب التعبير المعطى في المثال السابق باستخدام المفسر تفاعليا .مثل لختبار التعبير
3 + 2استخدم مؤشر مفسر بيثون التفاعلي:
>>> 2 + 3
5
>>> 3 * 5
15
>>>
أسبقية العوامل
إذا كهان لهديك عمليهة حسهابية مثهل 4 * 3 + 2ههل سهيتم الجمهع أول أم الضهرب ؟ رياضهيات
المدرسهة الثانويهة تخبرنها أن عمليهة الضهرب يجهب إجراؤهها أول؛ يعنهي ههذا أن لعمليهة الضهرب
أسبقية على عملية الجمع.
الجدول التالي يعطينا بيان بأسبقية العوامل في بيثون بدءا بالسبقية الدنى )أقل إلزاما( إلى
السهبقية الهعلى )أكهثر إلزامها( .معنهى ههذا أنهه بهداخل التعهبيرات المعطهاة فهإن بيثهون سهتقوم
بحساب قيمة العوامل الدنى في الجدول قبل العوامل العلى في الجدول.
الجدول التالي )نفس ذلك الموجود في مرجع بيثون( موجود من باب زيادة العلم .ومع هذا،
أنصحك باستخدم القواس ) ( لتجميع العوامل والمعاملت لتحديد السبقية بوضوح ولتجعل
برنامجهك أسههل فهي القهراءة قهدر المكهان .علهى سهبيل المثهال (4 * 3) + 2 ،بهالطبع أكهثر
و ضوحا من .4 * 3 + 2كأي شيء آ خر ،ي جب ا ستخدام ا لقواس بحك مة ول ينب غي أن ت كون
زائدة عن الحد) .مثل .((4 + 3) + 2
الوصف العامل
تعبير لمدا lambda
"أو" منطقية or
"و" منطقية and
"ليس" منطقية not x
اختبارات العضوية in, not in
اختبارات الهوية is, is not
المقارنات >== ,=! ,=< ,< ,=> ,
"أو" بتّية |
Bitwise XOR ^
"و" بتّية &
الزاحة >><< ,
الجمع والطرح - ,+
الضرب والقسمة والباقي *% ,/ ,
الموجب والسالب x, -x+
"ليس" بتّية ~x
الُس **
إخالة الخصائص x.attribute
الشتراك [x[index
الجز [x[index:index
استدعاء الدوال (... f(arguments
Binding or tuple display )(... ,expressions
عرض القوائم ][... ,expressions
عرض القواميس }{... ,key:datum
تحويل السلسل ``... ,expressions
ترتيب الحساب
مبهدئيا؛ يحهدد جهدول أسهبقية العوامهل أي عامهل لهه أسهبقية علهى اﻵهخر .لهذلك إذا أردت تغييهر
ترتيب حساب العمليات ،فعليك استخدام القواس ) ( ،على سبيل المثال إذا أردت أن تتم عملية
الجمع قبل عملية الضرب في أحد التعبيرات حينئذ يمكن استخدام القواس مثل ).4 * (3 + 2
الرتباطية
العوامل ترتبط عادة من اليسار إلى اليمين ،أي أن العوامل المشتركة في السبقية تحسب من
اليسهار إلهى اليميهن .علهى سهبيل المثهال 4 + 3 + 2تقيهم مثهل ) .4 + (3 + 2بعهض العوامهل
مثل عوامل السناد ترتبط من اليمين إلى اليسار ،أي أن a = b = cتعامل باعتبارها = a
.((b = c
التعبيرات
استخدام التعبيرات
مثال .5.1استخدام التعبيرات
#!/usr/bin/python
# Filename: expression.py
length = 5
breadth = 2
الخرْج
كيف يعمل
طهول وعهرض المسهتطيل تخهزن فهي المتغيهرات ) lengthو .(breadthونحهن نسهتخدمها لحسهاب
مساحة ومحيط المستطيل بمساعدة التعبيرات .نخزن نتيجة التعبير length * breadth
في المتغ ير في areaثم نطب عه با ستخدام ال فادة .printفي الحا لة الثان ية ،فإن نا ن ستخدم
مباشرة قيمة التعبير (length + breadth) * 2في الفادة .print
أيضها ،لحهظ كيهف تطبهع بيثهون النتيجهة بأناقهة .ورغهم أننها لهم نحهدد مسهافة بيهن 'Area
'isوالمتغيهر areaفقهد وضهعتها بيثهون لنها بحيهث نحصهل علهى ناتهج نظيهف ولطيهف ويصهبح
البرنامج أكثر مقروئية بهذه الطريقة )حيث أننا ل نحتاج للهتمام بالمسافات في الناتج( .هذا
مثال على كيف أن بيثون تجعل حياة المبرمج أسهل.
الخلصة
رأينا كيف نستخدم العوامل ) (operatorsو المعاملت ) (operandsوالتعبيرات )(expressions
وههي اللبنهات الساسهية لهي برنامهج .وفيمها يلهي سهنرى كيهف نقهوم باسهتخدامها فهي برامجنها
باستخدام الفادات.
مقدمـــة
في البرامج التي رأيناها حتى اﻵن كان هناك دائما تتابع من الفادات؛ وبايثون تنفذها محترمة
نفس الترتيب .ماذا لو أردت تغيير طريقة انسياب العمل؟ على سبيل المثال ،تريد من البرنامج
اتخاذ بعض القرارات والقيام بأشياء مختلفة تبعا للمواقف المختلفة مثل طباعة 'Good
'Morningأو ' 'Good Eveningمعتمدا على الوقت الحالي من اليوم؟
وكما خمنت ،فإن ذلك يتم عبر استخدام إفادات التحكم في التدفق .يوجد ثلث إفادات للتحكم
في التدفق قي بيثون؛ ،ifو ،forو .while
إفادة if
تستخدم إفادة ifللتحقق من حالة معينة و إذا كانت الحالة صحيحة ،نشغل لبنة من الفادات
)تسمى ،(if-blockوإل فإننا نعالج لبنة أخرى من الفادات )تسمى .(else-blockبند else
اختياري.
#!/usr/bin/python
# Filename: if.py
number = 23
guess = int(raw_input('Enter an integer : '))
if guess == number:
print 'Congratulations, you guessed it.' # New block
starts here
print "(but you do not win any prizes!)" # New block
ends here
elif guess < number:
print 'No, it is a little higher than that' # Another
block
# You can do whatever you want in a block ...
else:
print 'No, it is a little lower than that'
# you must have guess > number to reach here
print 'Done'
# This last statement is always executed, after the if statement is executed
الخرْج
$ python if.py
Enter an integer : 50
No, it is a little lower than that
Done
$ python if.py
Enter an integer : 22
No, it is a little higher than that
Done
$ python if.py
Enter an integer : 23
Congratulations, you guessed it.
(but you do not win any prizes!)
Done
كيف يعمل
في هذا البرنامج ،فإننا نأخذ تخمينات من المستخدم ونقارن بينه وبين العدد الذي لدينا .نسند
المتغير numberإلى أي عدد صحيح نريده ،مثل .23ثم ،أخذنا تخمين المستخدم باستخدام
الدالهة .()raw_inputالهدوال مها ههي إل أجهزاء مهن البرامهج يمكهن إعهادة اسهتخدامها .سهنقرأ
المزيد عنها في الفصل التالي.
أعطي نا سلسهلة للدا لة المدم جة raw_inputوالهتي ت قوم بطبا عة ال نص علهى الشا شة وتنتظهر
المهدخلت مهن المسهتخدم .وبمجهرد أن نهدخل أي شهيء ونضهغط علهى enterتعيهد الدالهة
المدخلت ،وهي في حالة raw_inputعبارة عن سلسلة نصية ،بعدها نحول هذا النص إلى عدد
صهحيح باسهتخدام intثهم نخزنهه فهي المتغيهر .guessفهي الحقيقهة intعبهارة عهن صهنف )
(classول كن كل ما تح تاج معرف ته ا ﻵن هو أ نك ت ستطيع ا ستخدامه لتحو يل السل سل إ لى
أعداد صحيحة )على فرض أن السلسلة تحتوي على عدد صحيح سليم داخل النص(.
بعد ذلك قارنا بين تخمين المستخدم وبين العدد الذي اخترناه .فإذا تساويا نطبع رسالة بنجاح
العمليهة .لحهظ أننها نسهتخدم مسهتويات الزاحهة لنخهبر بيثهون أي الفهادات تنتمهي إلهى أيهة لبنهة.
ذلهك يهبين سهبب أهميهة الزاحهة فهي بيثهون .أتمنهى أن تثبهت علهى قاعهدة 'علمهة تبهويب )(tab
واحدة لكل مستوى إزاحة' .فهل ستفعل؟
لحظ كيف أن إفادة ifتحتو ي على نقطتين رأسيتين ) (:في النهاية؛ نخبر بيثون بأن لبنة من
الفادات ستتبعها.
عهد ذلهك تحقهق مهن كهون التخميهن أقهل مهن ذلهك العهدد ،وإذا كهان كهذلك فإننها نطلهب مهن
المستخدم تخمين عدد أكبر قليل .ما استخدمناه هنا هو بند elifوالذي يدمج بين إفادتي if
else-if elseمتتهابعتين فهي إفهادة if-elif-elseواحهدة .يجعهل ههذا البرنامهج أسههل ويقلهل
مقدار الزاحات المطلوبة.
يجب أنت تحتوي إفادات elifو elseعلى ) (:في نهاية السطر المنطقي متبوعة بلبنة الفادات
المقابلة لها )مع الزاحة المناسبة بالطبع(
يمكن احتواء إفادة ifعلى إفادة ifأخرى وهكذا؛ يسمى هذا إفادات ifالمتتداخلة.
* تذكر ان الجزاء elifو elseاختيارية .أقل إفادة ifصحيحة هي
if True:
'print 'Yes, it is true
بعد انتهاء بيثون من تنفيذ إفادة ifكاملة بما فيها بنود elifو elseالمندرجة تحتها ،تنتقل
إلى الفادة التالية في اللبنة التي تحتوي إفادة .ifوهي في هذه الحالة لبنة البرنامج الرئيسة
حيهث يبهدأ تنفيهذ البرنامهج والفهادة التاليهة ههي .'print 'Doneبعهدها تهرى بيثهون نهايهة
البرنامج ومن ثم تنهيه ببساطة.
ور غم أن هذا البرنا مج ب سيط جدا ،ف قد أ شرت إ لى ال كثير من ال شياء ا لتي عل يك أن تلحظ ها
حهتى فهي ههذا البرنامهج البسهيط .وههذه كلهها أشهياء واضهحة )وبسهيطة بشهكل مفهاجئ لهولئك
القادمين بخلفية عن سي /سي (++ويتطلب منك أن تصبح مدركا لكل هذا في البداية ،ولكن
بعد ذلك ،ستصبح مرتاحا معها وستشعر بأنها 'طبيعية' بالنسبة لك.
إفادة while
إفهادة whileتسهمح لهك تكهرار تنفيهذ لبنهة مهن الفهادات مها دام الشهرط صهحيحا .إفهادة
whileمثهال لمها يسهمى الفهادات الحلقيهة ) .(loopingيمكهن أن تشهمل إفهادة while
على بند elseاختياري.
#!/usr/bin/python
# Filename: while.py
number = 23
running = True
while running:
))' guess = int(raw_input('Enter an integer :
'print 'Done
الخرْج
كيف يعمل
فهي ههذا البرنامهج ،مها زلنها نلعهب لعبهة التخميهن ،لكهن الميهزة هنها ههي أن المسهتخدم يسهمح لهه
بمواصلة التخمين حتى يصل للتخمين الصحيح؛ ل حاجة إلى تكرار تنفيذ البرنامج لكل تخمين -
كما فعلنا سابقا .-هذا يشرح بوضوح فائدة إفادة .while
نقل نا إ فادة raw_inputو ifإ لى دا خل حل قة .whileوجعل نا المتغ ير runningصحيح )
(Trueق بل حل قة .whileأول :نتح قق من كون المتغ ير runningصحيح وب عدها ننت قل
إلى تنفيذ while-blockالمناسبة .بعد تنفيذ هذه اللبنة ،تفحص الحالة ثانيا -وهي المتغير
runningهنا .-إذاكانت صحيحة ،ننفذ لبنة whileثانيا ،وإل فإننا ننتقل لتنفيذ لبنة else
الختيارية ،ثم ننتقل للفادة التالية.
يتهم تنفيهذ لبنهة elseعنهدمايكون الشهرط فهي الحلقهة whileخهاطئا وربمها تكهون ههذه المهرة
الهولى الهتي يتهم التحقهق فيهها مهن الشهرط .إذا كهان هنهاك بنهد elseللحلقهة ،whileفسهيتم
تنفيذه حتما إل إن كان لديك حلقة whileتدور إلى ما ل نهاية دون توقف.
تسهمى Trueو Falseأنواعها منطقيهة ) (Boolean typesويمكنهك أن تعتبرهها معهادل
لقي مة 1و 0ع لى ال توالي .و من الم هم ا ستعمالها حيث ما ي كون ال شرط أو التح قق مه ما ول يس
القيمه الفعليه .1
في الحقيقة لبنة elseتعد حشوا ،حيث يمكنك وضع الفادات التابعة لها في نفس اللبنة )مثل
إفادة (whileبعد whileللحصول على نفس التأثير.
الحلقة for
تعتبر for..inإفادة حلقية أخرى تَمُرّ على تتابع من الكائنات ،مثل مُرّ عبر كل عنصر في
ت تابع .و سنتعرف ع لى المز يد عن التتابعات في ف صول لح قة .كل ما عل يك معرف ته ا ﻵن أن
التتابع هو مجرد مجموعة من العناصر المرتّبة.
#!/usr/bin/python
# Filename: for.py
الخرْج
$ python for.py
1
2
3
4
كيف يعمل
فهي ههذا البرنامهج نطبهع تتابعها مهن العهداد .ولّهدنا تتهابع العهداد ههذا باسهتخدام الدالهة المدمجهة
.range
ما قمنا به هنا أننا أعطيناه عددين ثم rangeيعيد لنا تتابعا من العداد بداية من العدد الول
ثم تصاعديا حتى يصل إلى ما قبل العدد الخير .على سبيل المثال (range(1,5يعطي التتابع
] [4 ,3 ,2 ,1افتراضهيا ،يأخهذ rangeخطهوة بقيمهة .1إذا أعطيتهه عهددا ثالثها تكهون الخطهوة
بمقدار ذلك العدد ،على سبيل المثال (range(1,5,2 :تعطي ] .[1,3تذكر أن المدى يمتد
حتى ما قبل العدد الثاني-أي إنه ل يشمل العدد الثاني.
بعد ذلك تدور الحلقة forخلل ذلك المدى (for i in range(1,5-تعادل for i in [1,
-[2, 3, 4والتي تشبه إسناد كل عدد )أو كائن( إلى المتغير iواحدا في كل مرة ،بعدها يتم
تنفيذ لبنة الفادات لكل قيمة .iفي حالتنا هذه نقوم فقط بطباعة القيمة في لبنة الفادات.
تذكر أن الجزء elseاختياري .وعندما يضاف ،فإنه يُنفذ مرة واحدة بعد انتهاء الحلقة for
إل إذا قابل إفادة .break
تذكر أن الحلقة for..inتعمل مع أي تتابع .هنا لدينا قائمة من العداد تم توليدها باستخدام
الدالة المدمجة ،rangeولكن على العموم يمكننا استخدام أي تتابع لي كائنات .وسنشرح هذه
الفكرة بالتفصيل في الفصول القادمة.
الفادة break
إفادة breakتستخدم لكسر الحلقة التكرارية ،بعبارة أخرى :وقف تنفيذ الحلقة حتى ولو لم
يصبح شرط الحلقة خاطئا أو لم تمر على تتابع العناصر كله.
من المهم ملحظة أن كسر حلقة forأو whileسيؤدي إلى عدم تنفيذ لبنة إفادات .else
#!/usr/bin/python
# Filename: break.py
while True:
s = raw_input('Enter something : ')
if s == 'quit':
break
print 'Length of the string is', len(s)
print 'Done'
الخرْج
$ python break.py
Enter something : Programming is fun
Length of the string is 18
Enter something : When the work is done
Length of the string is 21
Enter something : if you wanna make your work also fun:
Length of the string is 37
Enter something : use Python!
Length of the string is 12
Enter something : quit
Done
كيف يعمل
.في هذا البرنامج كررنا أخذ المدخلت من المستخدم ثم طبعنا طول كل مدخلة في كل مرة
' وقد وفر نا شرط خاص لوقف البرنا مج من خلل ف حص ما إذا كانت مدخ لة الم ستخدم هي
.' وأوقفنا عمل البرنامج عن طريق كسر الحلقة والوصول إلى نهاية البرنامجquit
.len يمكن معرفة طول السلسلة المدخلة باستخدام الدالة المدمجة
. أيضاfor يمكن استخدامها مع الحلقةbreak تذكر أن إفادة
continue الفادة
تسهتخدم لنطلهب مهن بيثهون تخطهي بقيهة مها ورد فهي لبنهة الحلقهة الحاليهةcontinue الفهادة
.ومواصلة تكرار الحلقة
#!/usr/bin/python
# Filename: continue.py
while True:
s = raw_input('Enter something : ')
if s == 'quit':
break
if len(s) < 3:
continue
print 'Input is of sufficient length'
# Do other kinds of processing here...
الخرْج
$ python continue.py
كيف يعمل
في هذا البرنامج نقبل مدخلت المستخدم ،ولكن نعالجها فقط عندما يكون طولها 3خانات على
القل .لذا نستخدم الدالة المدمجة lenللحصول على طول العبارة ،فإذا كان الطول أقل من 3
خانات نتخ طي بق ية الفادات الموجود في اللب نة باستخدام الفادة continueوإل نننفذ بقية
الفادات في الحلقة ،ويمكننا القيام بأي معالجة نريدها هنا.
لحظ أن الفادة continueتعمل مع الحلقة forأيضا.
الخلصة
رأي نا كيف ية ا ستخدام ثلث أدوات للتح كم في تدفق البيا نات if:و whileو forمع ال فادات
breakو continueالمرتبطهة بهها .وتلهك بعهض مهن أكهثر الهجزاء المسهتخدمة عهادة فهي
بيثون؛ ولذا تعودك عليها أمر ضروري.
وفيما يلي سنرى كيف ننشئ ونستخدم الدوال.
فصل .7الدوال
قائمة المحتويات
مقدمة
تعريف دالة
معاملت الدالة
استخدام معاملت الدالة
المتغيرات المحلية
استخدام المتغيرات المحلية
استخدام الفادة global
القيم المبدئية للمعطيات
استخدام القيم المبدئية للمعطيات
معطيات الكلمات المفتاحية
استخدام معطيات الكلمات المفتاحية
الفادة return
استخدام الفادة return
جمل التوثيق
استخدام جمل التوثيق
الخلصة
مقدمة
الهدوال ههي أجهزاء مهن البرامهج يمكهن إعهادة اسهتخدامها .تسهمح لهك بإعطهاء اسهم مها للبنهة مهن
الفادات ،ويمك نك تشغيل هذه اللب نة في أي مكان من برنام جك ،وأي عدد من ال مرات .ي سمى
هذا ا ستدعاء الدا لة .و قد ا ستخدمنا بالف عل بع ضا من ا لدوال المدم جة م ثل الدا لة lenوالدا لة
.range
تُعَهرَّف الدالهة بالكلمهة المفتاحيهة defمتبوعهة باسهم المعهرف للدالهة ثهم زوجيهن مهن الهقواس
الهللية )( التي قد تحوي بعض أسماء المتغيرات وينتهي السطر بنقطتين ) .(:يعقب ذلك لبنة
من الفادات التي تشكل هذه الدالة .وهذا المثال يوضح مدى بساطتها:
تعريف دالة
مثال .7.1تعريف دالة
#!/usr/bin/python
def sayHello():
print 'Hello World!' # block belonging to the function
# End of function
الخرْج
كيف يعمل
نُعهرِّف دالهة اسهمها sayHelloباسهتخدام الهتركيب الموضهح أعله .ههذه الدالهة ل تأخهذ أي
معاملت ،وبالتالي لم يُعلن عن أي متغيرات بين القوسين .معاملت الدالة هي مجرد مدخلت
للدالة حتى نتمكن من تمرير قيم مختلفة لها ونحصل على النتائج المقابلة.
معاملت الدالة
يمكن أن تأخذ الدالة معاملت ،والتي ليست سوى قيم تعطيها لهذه الدالة لتتمكن من عمل شيئ
مها .ههذه المعهاملت تشهبه المتغيهرات غيهر أن قيهم ههذه المتغيهرات يتهم تحديهدها عنهدما نسهتدعي
الدالة ،ول يسند لها قيم داخل الدالة نفسها.
تحهدد المعهاملت داخهل زوج مهن الهقواس )( فهي تعريهف الدالهة ،ومفصهولة بنقطهتين ) .(:عنهدما
ن ستدعي الدا لة نعطي ها الق يم بن فس الطري قة .ل حظ الم صطلحات الم ستخدمة؛ السماء المع طاة
في تعريف الدالة تدعى ) parametersمعاملت( ،بينما القيم التي تعطى عند استدعاء الدالة
تدعى ) argumentsمعطيات(.
x=5
y=7
الخرْج
$ python func_param.py
4 is maximum
7 is maximum
كيف يعمل
هنها ،عرفنها دالهة باسهم printMaxحيهث نأخهذ اثنيهن مهن المعهاملت تسهمى aو .bواسهتنتجنا
العدد الكبر باستخدام بسيط للفادة if..elseثم طبعنا العدد الكبر.
فهي أول اسهتخدام للدالهة ،printMaxنعطهي العهداد؛ أي المعطيهات .فهي السهتخدام الثهاني،
نستدعي الدالة باستخدام المتغيرات (printMax(x, y .تؤدي إلى إسناد قيمة المعطى xإلى
المعا مل aو قي مة المع طى yت سند إ لى المعا مل .bالدا لة printMaxتع مل بن فس الطري قة
في الحالتين.
المتغيرات المحلية
عنهدما تقهوم بالهعلن عهن المتغيهرات داخهل تعريهف الدالهة ،فهإنه ل تكهون مرتبطهة بهأي حهال مهن
ا لحوال مع المتغ يرات ا لخرى ا لتي تح مل ن فس ال سم خارج تعر يف الدا لة .أ سماء المتغ يرات
تعتهبر محليهة ) (localداخهل الدالهة ،وههذا مها يسهمى نطهاق مهدى ) (scopeالمتغيهر .جميهع
المتغيرات محدودة بمدى اللبنة التي أُعان عنها فيها ،بداية من نقطة تعريف السم.
def func(x):
print 'x is', x
x=2
print 'Changed local x to', x
x = 50
)func(x
print 'x is still', x
الخرْج
python func_local.py $
x is 50
Changed local x to 2
x is still 50
كيف يعمل
فهي ههذه الدالهة ،المهرة الهولى الهتي تسهتخدم فيهها قيمهة السهم xتسهتخدم بيثهون قيمهة المعامهل
المعلن عنه في الدالة.
بعد ذلك أسندناالقيمة 2إلى .xالسم xيعتبر محليا داخل الدالة التي لدينا؛ لذا عندما نغير
قيمة xفي الدالة ،تظل xالمعرفة في اللبنة الرئيسة كما هي.
في إفادة printالخيرة نتأكد من أن قيمة xفي اللبنة الرئيسة لم تُمس بالفعل.
#!/usr/bin/python
def func():
global x
x = 50
)(func
print 'Value of x is', x
الخرْج
كيف يعمل
تسهتخدم الفهادة globalلهعلن أن xمتغيهر عمهومي ،ولههذا؛ عنهدما نسهند قيمهة إلهى xداخهل
الدالة ،فإن هذا التغيير يظهر عندما نستخدم قيمة xفي اللبنة الرئيسة.
يمكنهك تحديهد أكهثر مهن متغيهر globalواحهد باسهتخدام نفهس الفهادة .globalعلهى سهبيل
المثال .global x, y, z :
)'say('Hello
)say('World', 5
الخرْج
كيف يعمل
تستخدم الدالة المسماة sayلطباعة سلسلة ما عددا من المرات حسبمانريد .وإذا لم نعطها أية
قيمهة ،فالوضهع الفتراضهي ههو طباعهة الجملهة لمهرة واحهدة فقهط .نحقهق ذلهك عن طريهق جعهل
قيمة المعطى المبدئية للمعامل timesتساوي .1
فهي أول اسهتخدام للدالهة ،sayنعطهي النهص فقهط فتقهوم ههي بطباعهة الجملهة مهرة واحهدة .فهي
المرة الثانية نعطيها كل من النص والمعطى 5والذي يعني أننا نريد قول الجملة خمس مرات.
هام
المعهاملت الهتي فهي نهايهة قائمهة المعهاملت فقهط يمكهن أن تُعطهى قيهم معطيهات مبدئيهة؛
بعبارة أخرى ل يمكن إعطاء قيمة معطى مبدئية لمعامل قبل معامل بدون قيمة معطى
مبدئية.
وذلهك بسهبب أن القيهم تسهند إلهى المعهاملت حسهب وضهعيتها .علهى سهبيل المثهالdef :
(func(a, b=5صالحة بينما (def func(a=5, bغير صالحة.
)func(3, 7
)func(25, c=24
)func(c=50, a=100
الخرْج
$ python func_key.py
a is 3 and b is 7 and c is 10
a is 25 and b is 5 and c is 24
a is 100 and b is 5 and c is 50
كيف يعمل
الدا لة الم سماه funcتح توي ع لى معا مل وا حد بدون ق يم مبدئ ية لمعط ياته ،يل يه م عاملن مع
قيم مبدئية لمعطياتهما.
فهي السهتخدام الهول ،(func(3, 7المعامهل aيأخهذ القيمهة ،3والمعامهل bيأخهذ القيمهة 5
والمعامل cيأخذ القيمة المبدئية .10
في ال ستخدام ال ثاني (func(25, c=24المتغ ير aيأ خذ القي مة 25ب سبب موضع المع طى.
بعدها المعامل cيحصل على القيمة 24بينما المتغير bيحصل على قيمته المبدئية .5
فهي السهتخدام الثهالث (func(c=50, a=100؛ اسهتخدمنا بشهكل كامهل معطيهات بكلمهات
مفتاحيهة لتحديهد القيهم .لحهظ أن القيمهة المحهددة للمعامهل cموضهوعة قبهل aعلهى رغهم أننها
حددنا aقبل cأثناء تعريف الدالة.
الفادة return
تستخدم الفادة returnفي الرجوع من دالة ،بعبارة أخرى الخروج من الدالة .يمكننا اختياريا
إرجاع قيمة من الدالة أيضا.
كيف يعمل
الدالة maximumترجع لنا الحد الكبر من المعاملت ،وهي في هذه الحالة العداد المعطاة
للدالة .وهي تستعمل إفادة if..elseبسيطة للعثور على قيمة العدد الكبر وبعدها ترجع لنا
تلك القيمة.
ملحظة :عندما تكون إفادة returnبدون أية قيمة فإنها تساوي .Noneتعتبر Noneنوعا
خا صا في بي ثون يم ثل ل شيء .ف هي ع لى سبيل الم ثال ت ستخدم لتع ني أن المتغ ير ل يح مل أي
قيمة إذا كانت قيمته .None
كهل دالهة تحتهوي ضهمنيا علهى إفهادة return Noneفهي نهايتهها مها لهم تكتهب إفهادة return
الخاصة بك .ويمكنك رؤية ذلك بتنفيذ ()literal>print someFunction
def someFunction():
pass
إفادة pass
جمل التوثيق
بيثون لديها ميزة أنيقة تدعى جمل )سلسل( التوثيق ) (documentation stringsوالتي
يشار إليها عادة من خلل اسمها المختصر .docstringsجمل التوثيق أداة هامة يجب عليك
أن تستفيد منها حيث إنها تساعد على توثيق البرنامج بشكل أفضل ،وتجعله أكثر سهولة للفهم.
يمكننها حهتى -ويها للعجهب -من الحصهول علهى جمهل التوثيهق من دالهة مثل بينمها يعمهل البرنامهج
بالفعل!
)printMax(3, 5
__print printMax.__doc
الخرْج
5 is maximum
Prints the maximum of two numbers.
كيف يعمل
الجملة النصية في السطر المنطقي الول من الدالة هي جملة توثيق هذه الدالة .لحظ أن جمل
التوثيق تنطبق أيضا على الوحدات و الصناف والتي سوف نقوم بشرحها في فصولها الخاصة.
العادة المتبعة في جما التوثيق هي استخدام سلسلة نصية متعددة السطر حيث أول سطر يبدأ
بحرف كبير وينتهي بنقطة .بعد ذلك السطر الثاني فارغ متبوعا بجملة من الشرح المفصل
يبدأ في السطر الثالث .ينصح بشدة أن تتبع هذا النظام في كل جمل التوثيق لكل دوالك غير
البديهية.
يمكننها الوصهول إلهى جملهة توثيهق الدالهة printMaxباسهتخدام خاصهية __) __docلحهظ
الشرطة المنخفضة المزدوجة( الخاصة بالدالة .فقط تذكر أن بيثون تعامل كل شيء على أنه
كائن ،وهذا يشمل الدوال أيضا .وسوف نتعلم المزيد عن الكائنات في الفصل المتعلق بالطبقات.
اذا كنهت قهد اسهتخدمت ()helpفهي بيثهون ،فلبهد أ نك رأيهت بالفعهل اسهتخدام ج مل التوثيهق.
كل ما تفع له هو ج لب خا صية __ __docالمنتم ية ل هذه الدا لة وتعر ضها لك بأ سلوب أن يق.
يمكنههك تجربههة ذلههك علههى الدالههة المبينههة أعله -فقههط أضههِف (help(printMaxفههي
برنامجك .وتذكر أن تضغط مفتاح qللخروج من المساعدة.
توجد الدوات مأتمتة يمكنها استحضار وثائق برنامجك بذات الطريقة .لذا ،فإنني أنصح بشدة
أن تسهتخدم جمهل توثيهق لهي دالهة غيهر بديهيهة تكتبهها .الهمر pydocالهذي يهأتي مهع توزيعهة
بيثون يعمل كمثل ()helpمستخدما جمل التوثيق.
الخلصة
لقد رأينا الكثير من الجوانب المتعلقة بالدوال ،ولكن لحظ أننا لم نغطي كافة جوانبها .ورغم
ذلك فقد قمنا بالفعل بتغطية معظم المور التي ستستخدمها كل يوم من ناحية دوال بيثون.
وفيما يلي؛ سوف نرى كيف نقوم باستخدام وإنشاء وحدات بيثون.
فصل .8الوحدات
قائمة المحتويات
مقدمة
استخدام الوحدة sys
ملفات البيتات المصرّفة pyc.
الفادة from..import
خاصية __ __nameللوحدة
استخدام __ __nameالوحدة
عمل وحداتك الخاصة
إنشاء وحداتك الخاصة
from..import
الدالة )(dir
استخدام الدالة dir
الخلصة
مقدمة
قهد رأيهت كيهف يمكنهك إعهادة اسهتخدام الكهود فهي برنامجهك عهن طريهق تعريهف الهدوال مهرة
واحدة .ماذا لو أردت إعادة استخدام عدد من الدوال في البرامج الخرى التي تكتبها؟ نعم كما
قد خمنت ،الجواب هو الوحدات ) .(modulesالوحدة ببساطة هي ملف يحتوي جميع الدوال
والمتغيرات التي قمت بتعريفها .ولعادة استخدام هذه الوحدة في برامج أخرى ،يجب أن يكون
اسم ملف الوحدة بامتداد .py.
يمكن للبرامج الخرى استيراد الوحدة للستفادة من وظيفتها .وهي نفس الطريقة التي أمكننا
بها استخدام مكتبة بيثون القياسية .أول ،سوف نرى كيفية استخدام وحدات المكتبة القياسيه.
استخدام الوحدة sys
إفادة sys
مثال .8.1استخدام الوحدة sys
#!/usr/bin/python
# Filename: using_sys.py
import sys
'print 'The command line arguments are:
for i in sys.argv:
print i
'print '\n\nThe PYTHONPATH is', sys.path, '\n
الخرْج
$python using_sys.py we are arguments
The command line arguments are:
using_sys.py
we
are
arguments
كيف يعمل
في البداية قمنا باستيراد الوحدة sysباستخدام الفادة .importمبدئيا ،يعني هذا إخبار بيثون
أننا نريد استخدام تلك الوحدة .الوحدة sysتحتوي على وظائف ترتبط بمفسر بيثون والبيئة
الخاصة به.
عنهدما تنفهذ بيثهون إفهادة ،import sysفإنهها تبحهث عهن الوحهدة sys.pyفهي أحهد الدلهة
المسهرودة فهي المتغيهر .sys.pathفهإذا وجهد الملهف يتهم تشهغيل الفهادات الموجهودة فهي اللبنهة
الرئيسة الخاصة بالوحدة وبعدها تصبح الوحدة متاحة للستعمال .لحظ أن هذا الستبداء يتم
فقط عند أول مرة تستدعى فيها الوحدة .كذلك اعلم أن ' 'sysاختصار ') 'systemنظام(.
المتغير argvفي الوحدة sysيشار إليه باستخدام الترقيم النقطي -sys.argv-أحد مميزات
هذا ال سلوب أن ال سم ل ي شتبه مع أ ية متغ ير argvآ خر م ستخدم في برنام جك .و كذلك
فإنه يدل بوضوح على كون ذلك السم جزءا من الوحدة .sys
المتغير sys.argvعبارة عن قائمة من السلسل )ستشرح القوائم بالتفصيل في أقسام لحقة(.
وب شكل أ كثر تحد يدا فإن sys.argvيح توي ع لى قائ مةمعطيات سطر ا لوامر بع بارة أ خرى،
المعطيات الممررة إلى برنامجك في سطر الوامر.
إذا كنهت تسهتخدم بيئة تطهوير لكتابهة وتشهغيل برامجهك فهابحث عهن طريقهة لتحديهد معطيهات
سطر الوامر لبرنامجك في قوائم بيئة التطوير.
وهنا؛ عندما ننفذ ،python using_sys.py we are argumentsنقوم بتشغيل الوحدة
الفادة from..import
إذا أردت اسهتيراد المتغيهر argvداخهل برنامجهك )لتجنهب كتابهة .sysكهل مهرة ت ريهده(،
فيمكنههك اسههتخدام إفههادة .from sys import argvإذا أردت اسههتيراد كههل السههماء
الم ستخدمة في الو حدة sysيمك نك ا ستخدام إ فادة .* from sys importو هذا يع مل مع
أي وحهدة .وبهوجه عهام تجنهب اسهتخدام عبهارة from..importواسهتخدم بهدل منهها عبهارة
،importحيث أن البرنامج سيكون بهذه الطريقة أكثر سهولة في قراءته ،وسوف تتجنب أي
اشتباه في السماء بهذه الطريقة.
خاصية __ __nameللوحدة
كل نموذج له اسم وإفادات في الوحدة يمكن اكتشاف اسم الوحدة الخاص بها .وذلك أمر
متيسر بصفة خاصة في حالة بعينها -كما ذكر سابقا ،عندما ويتم استيراد الوحدة لول مرة ،
يتم تشغيل اللبنة الرئيسة في تلك الوحدة .ماذا لو كنا
نريد تشغيل اللبنة فقط إذا كان البرنامج نفسه مستخدما وليس عند استيراده من وحدة
أخرى؟ ويمكن تحقيق ذلك باستخدام السمة __ __nameمن الوحدة.
usr/bin/python/!#
else:
الخــرج
$ python
كيف يعمل
كل وحدة في بيثون لها _ _nameمعرف ،فإن كان ذلك هو __ __mainفذلك يعني أن
الوحدة ستعمل بذاتها من قِبل المستخدم ويمكننا أن نقوم بما يناسب ذلك من أحداث.
def sayhi():
'print 'Hi, this is mymodule speaking.
'version = '0.1
#!/usr/bin/python
# Filename: mymodule_demo.py
import mymodule
)(mymodule.sayhi
print 'Version', mymodule.version
الخرْج
$ python mymodule_demo.py
Hi, this is mymodule speaking.
Version 0.1
كيف يعمل
لحظ أننا نستخدم نفس الترقيم النقطي للوصول إلى عناصر الوحدة .تجيد بيثون إعادة
استخدم نفس الترقيم لضفاء الشعور 'البايثوني' المميز ،لذا ل يجب علينا أن نظل نتعلم طرقًا
جديدة لعمل الشياء.
إفادة from..import
ههنا نسخة تستخدم الصيغة from..import
#!/usr/bin/python
# Filename: mymodule_demo2.py
from mymodule import sayhi, version
# Alternative:
* # from mymodule import
)(sayhi
print 'Version', version
الدالة )(dir
يمكنك استخدام الدالة المدمجة dirلسرد المعرفات تحددها الوحدة .هذه المعرفات هي
الدوال ،والمتغيرات ،والصناف المعرفة في الوحدة.
عند إعطاء اسم وحدة للدالة ،()dirفإنها تعيد لنا قائمة السماء المعرفة في تلك الوحدة.
وعند عدم إعطائها أية معطيات فإنها تعيد لنا قائمة بالسماء المعرفة في الوحدة الحالية.
$ python
>>> import sys
>>> dir(sys) # get list of attributes for sys module
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__',
'__stdin__', '__stdout__', '_getframe', 'api_version', 'argv',
'builtin_module_names', 'byteorder', 'call_tracing', 'callstats',
'copyright', 'displayhook', 'exc_clear', 'exc_info', 'exc_type',
'excepthook', 'exec_prefix', 'executable', 'exit', 'getcheckinterval',
الخلصة
الوحدات مفيدة لنها تمدك بخدمات ووظائف يمكننا إعادة استخدامها في البرامج الخرى.
والمكتبة القياسية التي تأتي مع بيثون تعتبر مثال على الوحدات .وقد رأينا كيف نستخدم هذه
الوحدات وإنشاء الوحدات الخاصة بنا أيضا.
وفيما يلي سوف نتعلم بعض المفاهيم المهمة والتي تدعى هياكل البيانات.
القائمة
القائمة أحد هياكل البيانات التي تحمل مجموعة من العناصر المرتّبة ،بعبارة أخرى يمكنك أن
تخزن تتابعا من العناصر في قائمة .سيسهل عليك تصور هذا أن تفكر في قائمة التسوق حيث
لديك عناصر تعدها للشراء ،فيما عدا أنك ربما تضع كل عنصر في سطر منفصل في قائمة
التسوق ،في حين أن بيثون تضع فاصلة فيما بينها.
قائمهة العناصهر ينبغهي أن تكهون بيهن قوسهين مربعيهن ] [ حهتى تفههم بيثهون أنهك تريهد تحديهد
قائ مة .بمجرد إنشاء قائ مة ،يمكنك إضافة أو إزالة أو البحث عن العناصر في القائمة .وح يث
أن نا ن ستطيع إ ضافة و حذف العنا صر ،ن قول أن القائ مة هي نوع بيا نات متغ ير أي أن هذا ال نوع
يمكن تغييره.
استخدام القوائم
print 'These items are:', # Notice the comma at end of the line
for item in shoplist:
print item,
الخرْج
$ python using_list.py
I have 4 items to purchase.
These items are: apple mango carrot banana
I also have to buy rice.
My shopping list is now ['apple', 'mango', 'carrot', 'banana', 'rice']
I will sort my list now
Sorted shopping list is ['apple', 'banana', 'carrot', 'mango', 'rice']
The first item I will buy is apple
I bought the apple
My shopping list is now ['banana', 'carrot', 'mango', 'rice']
كيف يعمل
نقهومshoplist فهي. عبهارة عهن قائمهة تسهوق لشهخص ذاههب إلهى السهوقshoplist المتغيهر
لكن تذكر أن بإمكانك إضافة أي نوع،بتخزين سلسل النصية بأسماء العناصر التي سيشتريها
.من الكائنات إلى القائمة بما في ذلك العداد وحتى القوائم الخرى
لبد أنك أدركت أن، اﻵن. للتنقل خلل عناصر القائمةfor..in كما استخدمنا أيضا الحلقة
. وسوف نناقش خصوصية التتابعات في قسم لحق.القائمة هي تتابع أيضا
لمنع الطباعة التلقائية لفاصل السطر بعدprint " في نهاية إفادة," لحظ أننا نستخدم فاصلة
. ولكنها بسيطة وتنجز المهمة، قد تعتبر هذه طريقة سيئة لفعل ذلك.print كل إفادة
بعدها ،أضفنا عنصرا إلى القائمة باستخدام طريقة الرفاق appendفي الكائنات من فئة ،list
كما سبق أن ناقشنا من قبل .ثم ،نتحقق من أن العنصر قد تم إضافته إلى القائمة عن طريق
طبع محتويات القائمة بتمريرها ببساطة إلى إفادة printالتي تطبعها لنا بطريقه أنيقة.
ثم ن قوم بترتيب القائ مة با ستخدام الطري قة .sortل حظ أن هذه الطري قة تؤثر ع لى القائ مة
نفسها ول تعيد قائمة معدلة --وهذا يختلف عن طريقة عمل السلسل النصية .وهذا ما نعنيه
بقولنا إن القوائم متغيرة والسلسل النصية ثابتة.
ثهم ،عنهدما ننتههي مهن شهراء بنهد مهن السهوق ،نريهد إزالتهه مهن القائمهة .نحقهق ذلهك عهن طريهق
استخدام الفادة .delهنا ،نحدد عنصر القائمة الذي نريد إزالته وتقوم إفادة delبحذفه لنا.
نحدد أننا نريد إزالة البند الول من القائمة ،وبالتالي نستخدم ) [del shoplist[0تذكر أن
بيثون تبدأ العد من .(0
إذا أردت معرفهة كهل الطهرق الهتي يُعرّفهها كهائن القائمهة فطهالع ) help(listلهترى التفاصهيل
الكاملة.
الصف
الصهفوف ) (Tuplesمثهل القهوائم إل أنهها ثابتهة مثهل السلسهل النصهية؛ أي ل يمكنهك تغييهر
ال صفوف .تُ عرّف ال صفوف عن طريق تحديد عناصر مفصولة بفاصلة دا خل زوج من ا لقواس
) ( .تسهتخدم الصهفوف عهادة فهي الحهالت الهتي تسهتطيع فيهها الفهادة أو الدالهة الهتي يُعرّفهها
المستخدم أن تفترض بأمان أن مجموعة القيم -صف القيم -المستخدمة لن تتغير.
استخدام الصفوف
مثال .9.2استخدام الصفوف
#!/usr/bin/python
# Filename: using_tuple.py
الخرْج
كيف يعمل
المتغير zooيشير إلى صف من العناصر .نرى أن الدالة lenيمكن استخدامها للحصول على
طول الصف .وهذا يدل أيضا على أن الصفوف هي تتابعات أيضا.
اﻵن ننقل هذه الحيوانات إلى حديقة حيوانات جديدة ) (new_zooحيث إن الحديقة القديمة
) (zooيتهم إغلقهها .لهذا يحتهوي الصهف الجديهد new_zooعلهى بعهض الحيوانهات الموجهودة
بالفعل جنبا إلى جنب مع الحيوانات التي جلبت من الحديقة القديمة .عودة إلى الواقع ،نلحظ
أن الصف داخل صف آخر ل يفقد هويته
يمكننا الوصول إلى العناصر في الصف عن طريق تحديد موضع العنصر داخل زوج من القواس
المربعة ] [ مثل ما فعلنا مع القوائم .وهذا ما يسمى عامل الفهرسة
) .(indexing operatorنستطيع الوصول إلى البند الثالث في new_zooبتحديد
] ، new_zoo [2ويمكن الوصول إلى البند الثالث في الصف new_zooبتحديد
] .new_zoo [2] [2هذا واضح جدا ،بمجرد أن تفهم الطريقة.
صف بدون عناصر أو عنصر واحد .يُنشأ صف فارغ عن طريق زوج من القواس الخالية
)( مثل )(= . myemptyلكن تحديد صف ذي عنصر واحد ليس بهذه البساطة .عليك أن
تحدده مستخدما فاصلة " ",بعد العنصر الول )والوحيد(؛حتى تستطيع بيثون التفرقة بين صف
وبين زوج من القواس المحيطة بكائن داخل تعبير .أي عليك أن تحدد
) singleton = (2 ,إذا كنت تعني أنك تريد صفا يحتوي العنصر .2
age = 22
'name = 'Swaroop
الخرج
$ python print_tuple.py
Swaroop is 22 years old
?Why is Swaroop playing with that python
القاموس
القاموس هو بمثابة كتاب عنونة حيث يمكنك أن تجد عنوانا أو تفاصيل للتصال مع شخص
عن طريق معرفه اسمه /اسمها .مثل ؛ نحن نتشارك المفاتيح )السم( مع القيم )التفاصيل(.
علما بأن المفتاح يجب أن يكون فريدا uniqueحيث أنه ل يمكنك الحصول على معلومات
صحيحة إذا كان لديك شخصان بنفس السم بالضبط .
علما بأنه يمكنك استخدام كائنات ثابتة فقط )مثل السلسل النصية( لمفاتيح القاموس ولكن
يمكنك استخدام كائنات ثابتة أو قابلة للتغيير لقيم القاموس يمكننا أن نترجم ذلك بقولنا
أنه ينبغي أن ل تستخدم سوى أشياء بسيطة للمفاتيح.
استخدام القواميس
مثال 9.4استخدام القواميس
#!/usr/bin/python
# Filename: using_dict.py
ab = { 'Swaroop' : 'swaroopch@byteofpython.info',
'Larry' : 'larry@wall.org',
'Matsumoto' : 'matz@ruby-lang.org',
'Spammer' : 'spammer@hotmail.com'
}
الخرج
$ python using_dict.py
Swaroop's address is swaroopch@byteofpython.info
ويمكننا أن نضيف أزواج جديدة من مفتاح/قيمة ببساطة عن طريق استخدام عامل الفهرسة
.في الحالة المذكورة أعله Guidoللوصول إلى مفتاح وإسناد قيمة إليه ،كما فعلنا ل
نحن ببساطة نحدد del.يمكننا حذف أزواج المفتاح/القيمة باستخدام صديقنا القديم الفادة
لزالة المفتاح وتمرير ذلك إلى الفادة indexing operatorالقاموس و عامل الفهرسة
.ليست هناك حاجة لمعرفة القيمة المقابلة للمفتاح في هذه العملية del.
من itemsفي القاموس باستخدام طريقة key/valueبعد ذلك نصل إلى كل زوج من
القاموس التي تعيد قائمة من الصف حيث كل صف يحتوي زوجا من البنود – والمفتاح
متبوعا بقيمة .نسحب هذا الزوج ونسنده إلى اسم المتغيرات والعنوان المقابل لكل زوج
for.ثم نطبع هذه القيم في اللبنة for..in ،باستخدام الحلقة
أو حتى طريقة inموجود باستخدام العامل key/valueيمكننا معرفة ما اذا كان زوج
تستطيع أن ترى الوثائق للطلع على القائمة الكاملة للطرق من dictمن الفئة has_key
(help(dictباستخدام dictالفئة
المتسلسلت
ولكن ما، Sequences الصفوف والقوائم والسلسل النصية هي أمثلة على المتسلسلت
وماذا فيها من الخصوصية ؟ اثنان من السمات الرئيسية للمتسلسلة هي عملية، هي المتسلسلة
وعملية التقطيع الذي يتيح لنا أن، الفهرسة التي تتيح لنا جلب بند بعينه في المتسلسلة مباشرة
.نستعيد شريحة من المتسلسلة أي جزءا من المتسلسلة
استخدام المتسلسلت
استخدام المتسلسلت9.5 مثال
#!/usr/bin/python
# Filename: seq.py
# Slicing on a list
print 'Item 1 to 3 is', shoplist[1:3]
print 'Item 2 to end is', shoplist[2:]
print 'Item 1 to -1 is', shoplist[1:-1]
print 'Item start to end is', shoplist[:]
# Slicing on a string
name = 'swaroop'
الخرج
$ python seq.py
Item 0 is apple
Item 1 is mango
Item 2 is carrot
Item 3 is banana
Item -1 is banana
Item -2 is carrot
Item 1 to 3 is ['mango', 'carrot']
Item 2 to end is ['carrot', 'banana']
Item 1 to -1 is ['mango', 'carrot']
Item start to end is ['apple', 'mango', 'carrot', 'banana']
characters 1 to 3 is wa
characters 2 to end is aroop
characters 1 to -1 is waroo
يمكن للفهرس أيضا أن يكون عددا سلبيا ،في هذه الحالة ،يحسب من نهاية المتسلسلة .لذا فإن
] shoplist [-1يشير إلى البند الخير في المتسلسلة و] shoplist [-2يجلب ثاني آخر بند
في المتسلسلة.
الرقم الول ) قبل النقطتين ( في عملية التقطيع يشير إلى الموضع الذي تبدأ منه الشريحة ،
والعدد الثاني )بعد النقطتين( يشير فيها للموضع الذي تتوقف عنده الشريحة .إذا كان اول عدد
غير محدد ،فإن بيثون ستبدأ من بداية المتسلسلة .وإذا كان الرقم الثاني متروكا فإن بيثون
ستتوقف في نهاية المتسلسلة .علما أن الشريحة تعاود البدء عند موضع البداية ،وستنتهي قبل
موضع النتهاء .مثل؛ موضع البداية يضاف و أما موضع النتهاء فهو مستبعد من شريحة
المتسلسلة.
وهكذا ] shoplist [1:3تعيد قطعة من المتسلسلة بدءا من الموضع 1بالضافة إلى موضع
، 2ولكن يتوقف عند الموضع ، 3وبالتالي فإن هناك قطعة من هذين البندين يعود .وبالمثل ،
] shoplist [:تعيد نسخة من المتسلسلة بأكملها.
يمكنك أيضا التقطيع مع المواضع السالبة .وتستخدم الرقام السالبة للمواضع من نهاية
المتسلسلة .على سبيل المثال shoplist [: -1]،سيعيد قطعة من المتسلسلة التي تستثني البند
الخير في المتسلسلة ،ولكنه ل يتضمن أي شيء آخر.
جرب توليفات مختلفة من مواصفات هذه الشريحة باستخدام مفسر بيثون التفاعلي .أي المحث
الفوري بحيث يمكنك أن ترى النتائج فورا .والشيء العظيم في المتسلسلت هو أنك يمكنك
تشغيل الصفوف ،و القوائم و النصوص ،الجميع بنفس الطريقة!
References
عندما تصنع كائنا ويسند إلى أحد المتغيرات ،ل تشير المتغير إل إلى كائن ول يمثل كائنا
في حد ذاته! وهذا هو المعنى المراد ،أي أن اسم المتغير يشير إلى ذلك الجزء من ذاكرة
الكمبيوتر حيث تخزن فيه الكائنات .وهذا ما يسمى ربط bindingالسم بالكائن .
ولكن ثمة تأثير رقيق بسبب، لست بحاجة إلى أن تشعر بالقلق إزاء هذا المر، عموما
: ويتضح ذلك من المثال التالي. التي تحتاج إلى أن تكون على علم بهاreferences
Objects and References
Example 9.6. Objects and References
#!/usr/bin/python
# Filename: reference.py
del shoplist[0] # I purchased the first item, so I remove it from the list
الخرج
$ python reference.py
Simple Assignment
السلسل النصية التي تستخدمها في البرنامج هي جميع الكائن من الفئة ) (strبعض من الطرق
المفيدة لهذه الفئة تتجلى في المثال التالي .وللحصول على قائمة كاملة من هذه الطرق ،انظر
).help(str
مثال 9.7طرق السلسل النصية
#!/usr/bin/python
# Filename: str_methods.py
if name.startswith('Swa'):
'"print 'Yes, the string starts with "Swa
'_*_' = delimiter
]'mylist = ['Brazil', 'Russia', 'India', 'China
)print delimiter.join(mylist
الخرج
Brazil_*_Russia_*_India_*_China
طريقة findتستخدم ليجاد موضع النص المعطى في stringأو إعادة -1اذا لم يتم النجاح
في العثور على النص الثانوي .الفئة strلها أيضا طريقه بارعة في ربط بنود من المتسلسلة
مع السلسلة النصية stringبصفتها محدد بين كل بند من المتسلسلة sequenceوتعيد
الخلصة
لقد قمنا باستكشاف هياكل البيانات المدمجة في بيثون بالتفصيل .هياكل البيانات هذه ستكون
أساسية عند كتابة برامج بحجم معقول.
واﻵن لدينا الكثير من أساسيات بيثون في مكان واحد ،و سوف نرى فيما يلي كيفية تصميم
وكتابة برنامج في العالم الحقيقي لبايثون
المشكلة
المشكلة هي أنني أريد برنامجا يقوم بعمل نسخة احتياطية من جميع ملفاتي ورغم أن هذا
بمثابة مشكلة بسيطة ،ليست هناك معلومات كافية بالنسبة لنا لنبدأ عملية الحل .نحتاج مزيدا
من التحليل .على سبيل المثال ،كيف يمكننا أن نحدد الملفات التي سيتم نسخها احتياطيا ؟
أين ستوضع النسخة الحتياطية المخزنة ؟ كيف يتم تخزينها في النسخة الحتياطية؟
بعد تحليل المشكلة بشكل صحيح ،نصمم برنامجنا .نقوم بتجهيز قائمة من المور حول كيفية
عمل برنامجنا .وفي هذه الحالة ،قمت بإنشاء القائمة التالية بشأن كيفية قيامها بالعمل .إذا
قمت بعمل التصميم ،لعلك ل تواجه نفس النوع من المشاكل --كل شخص له طريقته
الخاصة لتسيير المور ،وهذا أمر طيب.
:الحـل
. يمكننا أن نكتب الكود الذي يُعتبر أداتنا لتنفيذ الحل، وبما أن تصميم برنامجنا اﻵن مستقر
الصدار الول
سكربت النسخ الحتياطي – الصدار الول10.1 مثال
#!/usr/bin/python
# Filename: backup_ver1.py
import os
import time
# 5. We use the zip command (in Unix/Linux) to put the files in a zip archive
zip_command = "zip -qr '%s' %s" % (target, ' '.join(source))
الخرج
$ python backup_ver1.py
Successful backup to /mnt/e/backup/20041208073244.zip
نحن اﻵن في مرحلة الختبار ؛ حيث إننا نختبر كون برنامجنا يعمل بشكل سليم .فإذا لم
يتصرف كما هو متوقع ،فسيكون علينا النتقال إلى مرحلة تصحيح debug/برنامجنا ؛ أي إزالة
الخطاء bugsمن البرنامج.
كيف يعمل
ستلحظ كيف قمنا بتحويل ما لدينا من تصميم إلى شفرة خطوة فخطوة .ونحن نستخدم
الوحدة osو timeولذا قمنا باستيرادها .ثم ،نحدد الملفات والدلة التي سيتم نسخها
احتياطيا في قائمة " .“ sourceالدليل الوجهة يعني مكان تخزين جميع الملفات الحتياطية ،
وهذا هو المحدد في المتغير" "target_dirاسم الرشيف المضغوط الذي سنقوم بإنشائه هو
التاريخ الحالي والوقت الذي يجلب لنا باستخدام الدالة )( . time.strftimeوسوف يكون
أيضا .بامتداد zip.وسيخزن في الدليل target_dir
الدالة )( time.strftimeتأخذ مواصفات مثل التي استخدمناها في البرنامج المذكور أعله.
الصفة Y%سيحل محلها السنة بدون القرن ،والصفة m%سيحل محلها الشهر بوصفها رقم
عشري بين 01و 12وهلم جرا .والقائمة الكاملة لهذه المواصفات يمكن العثور عليها في
]الدليل المرجعي لبايثون[ ] [Python Reference Manualالذي يأتي مع بيثون في
التوزيعة الخاصة بك .لحظ أن هذا مشابه )ولكن ليس على النحو نفسه( للمواصفات
المستخدمة في إفادة ) printباستخدام ٪متبوعة بصف( tuple -
قمنا بعمل اسم الدليل المضغوط targetباستخدام عامل الضافة الذي يشبك الجمل أي يربط
بين اثنين معا ويعيدها إلينا واحدة جديدة .ثم ،ننشئ سلسلة نصية ، zip_command :
والتي تتضمن المر الذي سنقوم بتنفيذه .يمكنك معرفة ما إذا كان هذا المر يعمل عن طريق
تشغيله في الصدفة )طرفية لينكس أو محث دوس (
المر zipالذي نستخدمه يحتوي بعض الخيارات والمعاملت الممررة – الخيار qيستخدم
للشارة إلى أن المر zipينبغي أن يعمل بهدوء تماما – الخيار rيحدد أن المر zipيجب
أن يعمل بشكل تتابعيا ) (recursivelyفي الدلة أي ينبغي أن تشمل الدلة الفرعية والملفات
داخل الدلة الفرعية كذلك .وقد تم الجمع بين خيارين ل ثالث لهما بشكل مختصروهما – qr
هذه الخيارات متبوعة باسم الرشيف المضغوط المراد إنشاؤه متبوعا بقائمة الملفات والدلة
التي سنقوم بنسخها احتياطيا .نحن نحول قائمة sourceداخل الجملة باستخدام طريقة
joinلضم الجمل والتي شاهدنا بالفعل كيفية استخدامها.
وأخيرا نشغل المر باستخدام الدالة os.systemالتي تشغل المر كما لو كان يعمل من
داخل النظام في الصدفة – وهو يعيد لنا 0إذا تمت العملية بنجاح ،وإل فانه يعيد إلينا رقم
الخطأ.
واعتمادا على نتيجة المر ،نقوم بطباعة رسالة مناسبة بأن النسخة الحتياطية فشلت أو نجحت
،وهذا هو كل ما في الموضوع ،لقد قمنا بإنشاء سكربت لعمل نسخة احتياطية من الملفات
المهمة!
ملحظة لمستخدمي ويندوز :
يمكنك أن تحدد القائمة sourceوالدليل targetلي اسم ملف أو دليل ،ولكن يجب أن
تكون حذرا قليل في ويندوز .والمشكلة هي أن ويندوز يستخدم )\\( الشرطة المائلة الخلفية
كفاصل الدلة ،ولكن بيثون تستخدم الشرطة المائلة الخلفية لتمثيل تتابعات الخلوص
).(escape sequences
لذلك ،عليك أن تمثل الشرطة الخلفية ذاتهاباستخدام تتابع خلوص أو عليك أن تستخدم raw
.stringsعلى سبيل المثال ،استخدم' 'C:\\Documentsأو 'r'C:\Documentsولكن ل
تستخدم ' 'C:\Documentsفأنت هكذا تستخدم تتابع خلوص مجهول \.D
اﻵهن ،وحيهث أننها قمنها بعمهل سهكربت للنسهخ الحتيهاطي ،يمكننها اسهتخدامه حينمها نريهد أن نأخهذ
نسهخة احتياطيهة مهن الملفهات .وينصهح مسهتخدمو لينكهس/يهونكس باسهتخدام طريقةه هالملف
التنفيذي على النحو الذي سبق مناقشته ،حتى يتمكنوا من تشغيل برنامج النسخ الحتياطي في
أي وقت وفي أي مكان .وهذا ما يسمى مرحلة التشغيل أو مرحلة نشر البرمجيات.
يعمل البرنامج أعله بشكل صحيح ،ولكن )عادة( البرامج الولى ل تعمل تماما كما كنت تتوقع .على
سبيل المثال ،قد تكون هناك مشاكل إذا كنت لم تصمم البرنامج بشكل صحيح ،أو إذا كنت قد أخطأت
في كتابه الكود ،إلخ .سيتعين عليك العودة إلى مرحلة التصميم أو ستضطر لتتبع علل برنامجك.
باستخدام- أحد هذه التحسينات التي شعرت بفائدتها هي ميكانيكية أفضل لتسمية الملفات
كدليل ضمن دليل النسخةdate كاسم للملف بداخل دليل يحمل التاريخ الحاليtime
ولذا، أحد الميزات هي أن نسخك الحتياطية سيتم تخزينها بطريقة هرمية.الحتياطية الرئيس
وهناك ميزة أخرى وهي أن طول أسماء الملفات أقصر بكثير بهذه.سيكون من السهل إدارتها
وأيضا هناك ميزة أخرى هي أن الدلة المنفصلة ستساعدك أن تعرف بسهولة إذا ما.الطريقة
كنت قد قمت بعمل نسخة احتياطية عن كل يوم حيث لن ينشأ الدليل إل إذا كنت قد أخذت
.نسخة احتياطية لذلك اليوم
الصدار الثاني- سكربت النسخ الحتياطي10.2 مثال
#!/usr/bin/python
# Filename: backup_ver2.py
import os
import time
# 5. We use the zip command (in Unix/Linux) to put the files in a zip archive
zip_command = "zip -qr '%s' %s" % (target, ' '.join(source))
الخرج
$ python backup_ver2.py
Successfully created directory /mnt/e/backup/20041208
Successful backup to /mnt/e/backup/20041208/080020.zip
$ python backup_ver2.py
كيف يعمل
والتغيرات هي أننا نتحقق إذا كان هناك دليل.معظم أجزاء هذا البرنامج لم يعترها التغيير
فإذا.os.exists باسم اليوم الحالي داخل الدليل الرئيس للنسخة الحتياطية باستخدام الدالة
.os.mkdir فنحن ننشئه مستخدمين الدالة، لم يكن موجودا
فهو يعطيفاصل للدلة وفقا لنظام التشغيل الخاص بك أي- os.sep لحظ استخدام المتغير
' في نظام تشغيل:' وسيكون '\ \' في ويندوز و، ويونيكس، ' في لينكس/' انه سيكون
بدل من هذه الحروف بشكل مباشر ستجعل برنامجنا محمولOs.sep استخدام.ماكنتوش
.ويعمل عبر هذه النظم
: الصدار الثالث
ول كن ع ندما ت كون،الن سخة الثان ية تع مل ج يدا ع ندما أ قوم بع مل ال كثير من الن سخ الحتياط ية
وجدت صعوبة في التفريق بين الغرض من كل نسخة،هناك كم كبير من النسخ الحتياطية
فأريهد، إذا قمهت بعهض التغييهرات الرئيسهة علهى برنامهج أو عهرض، فعلهى سهبيل المثهال،احتياطيهة
وهذا يمكن تحقيقه بسهولة عن طريق إرفاق تعليق.ربط هذه التغييرات باسم الملف المضغوط
..من المستخدم باسم الرشيف المضغوط
( سكربت النسخ الحتياطي )ل يعمل10.3 مثال
#!/usr/bin/python
# Filename: backup_ver2.py
import os
import time
# Take a comment from the user to create the name of the zip file
comment = raw_input('Enter a comment --> ')
if len(comment) == 0: # check if a comment was entered
# 5. We use the zip command (in Unix/Linux) to put the files in a zip archive
zip_command = "zip -qr '%s' %s" % (target, ' '.join(source))
الخرج
$ python backup_ver3.py
File "backup_ver3.py", line 25
target = today + os.sep + now + '_' +
^
SyntaxError: invalid syntax
كيف لم يعمل البرنامج ؟
بيثون تقول إن ثمة خطأ صياغي مما يعني أن البرنامج ل يوفي.!هذا البرنامج ل يعمل
كذلك تخبرنا عن، عندما نلحظ الخطأ الذي قدمته بيثون. التركيب الذي تتوقعه بيثون
. لذا ستبدأ تتبع الخطأ من هذا السطر. المكان الذي اكتشفت الخطأ
ولكننا لم نوضح أن، نرى أن سطرا منطقيا قد انقسم الى سطرين ماديين،وبالملحظة الدقيقة
( بدون حدود+) فقد وجدت بيثون أن عامل الضافة، ببساطة.هذين السطرين الماديين معا
تذكر أننا يمكن أن. وبالتالي ل تعرف كيف تواصل العمل، في هذا السطرoperand حسابية
نحدد أن السطر المنطقي ل يزال متواصل في السطر المادي القادم باستخدام الشرطة المائلة
وهذا. لذا نقوم بهذا التصحيح في برنامجنا.( في نهاية السطر الماديbackslash) الخلفية
.(bug fixing ) ما يسمى إصلح الخطأ
الصدار الرابع
سكربت النسخ الحتياطي10.4 مثال
#!/usr/bin/python
# Filename: backup_ver2.py
# Take a comment from the user to create the name of the zip file
comment = raw_input('Enter a comment --> ')
if len(comment) == 0: # check if a comment was entered
target = today + os.sep + now + '.zip'
else:
target = today + os.sep + now + '_' + \
comment.replace(' ', '_') + '.zip'
# Notice the backslash!
# 5. We use the zip command (in Unix/Linux) to put the files in a zip archive
zip_command = "zip -qr '%s' %s" % (target, ' '.join(source))
$ python backup_ver4.py
مزيد من التحسينات
الصدارة الرابعة هي سكربت يعمل بصورة مُرضية لمعظم المستخدمين ،ولكن هناك دائما مجال
للتحسين .مثل ،يمكنك إضافة مستوى من الستفاضة للبرنامج ،حيث يمكنك تحديد الخيار v-
لجعل برنامجك يصبح أكثر تكلما.
من التحسينات الممكنة الخرى أن تسمح بتمرير الملفات والدلة الضافية إلى البرنامج في
سطر الوامر .وسنتوصل إلى ذلك من قائمة sys.argvونستطيع أن نضيفها إلى قائمة
sourceالتي لدينا باستخدام طريقة extendالتي يوفرها الصنف .list
من التحسينات التي أحبذها استخدام المر tarبدل من المر .zipأحد مزايا ذلك المر أنه
عند استخدامك tarجنبا إلى جنب مع gzipيصبح النسخ الحتياطي أكثر سرعة والنسخة
الحتياطية تكون أقل حجما .وإذا أردت استخدام هذا الرشيف في ويندوز فإن WinZipيتعامل
مع ملفات tar.gz.أيضاً بسهولة .والمر tarمتاح بشكل افتراضي في معظم أنظمة
لينكس/يونكس .ويمكن لمستخدمي ويندوز أيضا تنزيله من النترنت وتثبيته.
-vيشير إلى verboseأي أن المر يجب ان تكون اكثر تكلما وثرثرة .talkative
-fيشير إلى forceأي الجبار في إنشاء الرشيف أي إنه ينبغي أن يحل محل ملف آخر إذا كان
يحمل نفس السم بالفعل.
-xيشير إلى الملف الذي يتضمن قائمة أسماء الملفات التي يجب استبعادها excludedمن النسخة
الحتياطية .على سبيل المثال ،يمكنك تحديد ~* في هذا الملف لعدم إدراج أي أسماء للملفات
المنتهية ب ~ في النسخة الحتياطية
*مهم *
أكثر الطرق المفضلة لنشاء مثل هذا النوع من الرشيف سيكون باستخدام الوحدة zipfile
أو tarfileعلى التوالي .إنها تشكل جزءا من مكتبة بيثون القياسية والمتاح لك استخدامها
بالفعل .باستخدام هذه المكتبات أيضا تتجنب استخدام os.systemوالتي ل ينصح
باستخدامها على وجه العموم ،لنها من السهل أن تكلفك أخطاء باهظة باستخدامها.
ومع ذلك ،فقد كنت أستخدم طريقة os.systemلعمل نسخ احتياطية لغراض تعليمية
بحتة ،لذا يعتبر ذلك مثال بسيط بشكل كاف ليكون مفهوما من قبل الجميع ،ولكنها حقيقية
أيضا بما يكفي.
الطريقة الموصى بها لكتابة البرامج هي الجراء الذي اتبعناه في برنامج عمل النسخ الحتياطية
– قم بالتحليل ثم التصميم .ابدأ بتنفيذ صيغة بسيطة للبرنامج .الختبار والتصحيح .استخدام
البرنامج للتأكد من أنه يعمل كما هو متوقع .واﻵن ،أضف أية ميزات تريدها واستمر في
تكرار هذه الدورة " :افعل-جرب-استخدم" " "Do It-Test-Useلي عدد من المرات على
النحو المطلوب .وتذكر ؛ البرمجيات تنمو كالزرع ،ول تبنى ! " Software is grown,
" not built
الخلصة
ولقد رأينا كيفية عمل البرامج الخاصة في بيثون والمراحل المختلفة التي تشارك في كتابة
مثل هذه البرامج .وربما تجد أنه من المفيد إنشاء برامجك بنفسك مثلما فعلنا في هذا
الفصل حتى تصبح مرتاحا مع بيثون فضل عن القدرة على حل المشاكل .وفيما يلي؛سوف
نناقش البرمجة الكائنية " ”object-oriented
The self
هناك فارق واحد محدد لطرق الفئة يخالف الدوال العادية،وذلك انها يجب أن تكون لها اسم
أول إضافي يضاف إلى بداية باراميتر القائمة ،ولكنك لتعطي قيمة لهذا الباراميتر عندما
تستدعي ال ،methodوبيثون سوف تزودنا به .هذا المتغير المحدد يشير إلى الكائن ذاته،
وحسب التفاق ،فإنها تحظى باسم الذات .self
ورغم انه يمكنك إعطاء أي اسم لهذه الباراميتر ،يوصى بشدة ان تستخدم اسم -selfاي اسم
آخر هو بالتأكيد يؤدي إلى العبوس .وهناك العديد من المزايا لستخدام اسم معياري -وأي
قارئ لبرنامجك سوف يعترف به فورا وحتى برامج المخصصة ل )بيئة التطوير
المتكامله(يمكن ان تساعدك اذا كنت تستخدم .self
#C++/Java/Cملحظة لمبرمجي
الفادة selfفي بيثون تعادل المؤشر selfفي لغة ++Cو الشارة thisفي جافا و سي#
عليك أن تكون مندهشا؛ كيف أن بيثون تعطي قيمة ل ،selfولماذا لست بحاجة إلى إعطاء
قيمة لها ؟.أحد المثلة سيجعل هذا المر واضحا .لنقل مثل أن لديك فئة تدعى
MyClassومثال هذه الفئة يسمى .MyObjectفعندما تستدعي ال methodلهذا الكائن
كهما يلي ،(MyObject.method(arg1, arg2 :فإنه يتم تحويلها تلقائيا عن طريق
بيثون إلى ،(MyClass.method(MyObject, arg1, arg2وهذا كل ما يخص .self
وهذا يعني أيضا انه إذا كان لديك methodل تأخذ أي ،argumentفإنك ل تزال بحاجة
إلى تحديد طريقة للحصول على قيمة .self
الفئات
أبسط صورة للفئة يمكن رؤيتها منن خلل المثال التالي:
إنشاء الفئة
#!/usr/bin/python
class Person:
)(p = Person
print p
الخرج
كيف يعمل
قمنا بإنشاء فئة جديدة باستخدام الفادة classمتبوعة باسم الفئة .وتلك تتبع لبنة مزاحة من
الفادات التي تصوغ هيكل الفئة .وفي هذه الحالة لدينا لبنة فارغة من الفادات يشار إليها
باستخدام الفادة .pass
ثم قمنا بإنشاء كائن/مثال لهذه الفئة باستخدام اسم الفئة متبوعا بزوج من القواس الهللية.
وسوف نتعلم المزيد عن instantiationفي القسم التالي .ومن أجل التحقق ،نقوم بفحص
نوع المتغير ببساطة بمجرد طباعته .وهو يخبرنا أن لدينا مثال من الفئة personفي
الوحدة __. __main
لحظ أن عنوان ذاكرة الحاسب عند تخزينك للكائن يتم كتابته أيضاً .وقيمة هذا العنوان
سيكون لها قيمة مختلفة على حاسبك حيث إن بيثون تستطيع تخزين الكائن حالما تجد مساحة
فارغة.
طرق الكائن
لقد ناقشنا بالفعل أن الفئات/الكائنات يمكنها أن تحتوي طرقا تشبه الدوال إل إذا كان لدينا
متغير selfإضافي .واﻵن سوف نرى مثال على ذلك .
class Person:
def sayHi(self):
'?print 'Hello, how are you
)(p = Person
)(p.sayHi
الخرج
$ python method.py
class Person:
def __init__(self, name):
self.name = name
def sayHi(self):
print 'Hello, my name is', self.name
)'p = Person('Swaroop
)(p.sayHi
الخرج
$ python class_init.py
وهناك نوعان من الحقول --متغيرات الفئة class variablesو متغيرات الكائن object
variablesوالتي تصنف تبعا لما إذا كانت الفئة أو الكائن -على التوالي -تمتلك
للمتغيرات .
متغيرات الفئة تشترك في معنى أنها تعمل من خلل جميع الكائنات )العناصر( لهذه الفئة .ل
يوجد سوى نسخة من متغير الفئة وعندما يقوم الكائن بعمل ما على متغير الفئة ،ينعكس هذا
التغيير في جميع الحالت )الكائنات( الخرى أيضا.
تختص متغيرات الكائن بكل كائن على حدة في العنصر الخاص بالفئة .فمثل هم ل
يشتركون ول يرتبطون بأي طريقة بنفس السم في عنصر مختلف في نفس الفئة .ورؤية
مثال واحد سيجعل المر سهل الفهماستخدام متغيرات الفئة والكائن
def __del__(self):
'''I am dying.'''
print '%s says bye.' % self.name
Person.population -= 1
if Person.population == 0:
print 'I am the last one.'
else:
print 'There are still %d people left.' % Person.population
def sayHi(self):
'''Greeting by the person.
def howMany(self):
'''Prints the current population.'''
if Person.population == 1:
print 'I am the only person here.'
else:
print 'We have %d persons here.' % Person.population
swaroop = Person('Swaroop')
swaroop.sayHi()
swaroop.howMany()
swaroop.sayHi()
swaroop.howMany()
الخرج
$ python objvar.py
(Initializing Swaroop)
Hi, my name is Swaroop.
I am the only person here.
طريقة__ __delتعمل حين ل يكون الكائن مستخدما ،وليس هناك ضمان متىستعمل هذه
الطريقة .وإذا أردت عمل ذلك بوضوح عليك فقط أن تستخدم إفادة delالتي استعملناها في
المثلة السابقة.
ملحظة لمبرمجي : C++/Java/C
جميع عناصر الفئة)إضافة إلى عناصر البيانات( تعتبر عمومية وجميع الطرق تعتبر تخيلية في
بيثون.
وهناك استثناء واحد؛ إذا كنت تستخدم عناصر البيانات مع السماء باستخدام بادئة الشرطتين
السفليتين مثل __privatevar؛ تستخدم بيثون صقل السم بفاعلية ليجعل لها قيمة منفردة.
هكذا فإن التفاقية المتبعة هي أن كل متغير يستعمل فقط داخل الفئة أو الكائن يجب أن يصبح
بشرطة سفلية ،وجميع السماء الخرى عامة public-ويمكن أن تستخدم من قبل أي
فئات/كائنات .تذكر أن هذه اتفاقية فحسب وليست إجبارية من بيثون )ما عدا بادئة الشرطة
السفلية المزدوجة(.
لحظ أيضاً أن الطريقة __ __delتماثل مفهوم .destructor
التوارث
أحد المنافع الرئيسة للبرمجة الكائنية الموجهة هو إ عادة استعمالالشفرة ،وأحد وسائل ذلك
يتم عمله من خلل آلية التوارث .التوارث يمكن تخيله بشكل افضل على أنه تطبيق علقة بين
نوع رئيس ونوع فرعي subtypeبين الفئات .
لنفترض انك تريد كتابة برنامج يقوم بمتابعة المعلمين والطلب في كلية .ولديهم بعض
الخصائص المشتركة مثل السم والسن والعنوان .ولديهم كذلك خصائص معينة مثل الراتب
والدورات العلمية ،وإجازات للمعلمين ،ودرجات ومصاريف للطلبة.
يمكنك أن تنشئ نوعين مستقلين من الفئات لكل نوع وتعالجهما ،ولكن بإضافة خاصية
مشتركة جديدة ،معناها إضافتها إلى كل فئة على حدة .وسريعا يصبح هذا المر ثقيل جدا .
والطريقة الفضل يمكن ان تكون بإنشاء فئة مشتركة تسمى ،SchoolMemberوبعدها
تجعل فئة teacherوفئة studentترث من هذه الفئة الولى .وبمعنى آخر سيصبحان
أنواع فرعية لهذا النوع )الفئة( .وبعد ذلك يمكننا أن نحدد خصائص هذه النواع الفرعية.
هناك عدة مميزات في هذه الطريقة.إذا أضفت/غيرت اي وظيفة في ،SchoolMember
سوف ينعكس هذا تلقائيًا على النواع الفرعية كذلك .على سبيل المثال؛ يمكنك ان تضيف
حقل بطاقة هوية جديدا field card IDلكل من المعلمين والطلب ببساطة عن طريق إضافة
الفئة .classname>SchoolMember ،وعلى أية حال التغيرات الحادثة في النواع
الفرعية ل تؤثر في النواع الفرعية الخرى .والميزة الخرى انه يمكنك أن تشير إلى كائنات
المعلمين أو الطلبة باعتبارها كائن SchoolMemberوالذي يمكن أن يكون مفيدا في بعض
الحالت ،مثل حساب عدد أعضاء المدرسة .وذلك يسمى تعدد الوجه تعدد الوجه؛ حيث ان
النوع الفرعي يمكن أن يستبدل في أي حالة عندما يكون النوع الصل متوقعا .فمثل الكائن
يمكن تكراره بصفته حالة من الفئة الصلية.
ونلحظ كذلك أننا نعيد استخدام شفرة الفئة الصل ،ولسنا بحاجة إلى تكرارها في فئات
مختلفة ،كما كان واجبا في حالة ما استخدمنا فئات مستقلة .
الفئة SchoolMemberفي هذه الحالة تعرف بأنها الفئة الساسية أو ،superclassوفئة
Teacherوفئة Studentتسمى derived classesأو . subclasses
وسنرى اﻵن هذا المثال التالي في صورة برنامج.
استخدام التوارث
مثال 11.5استخدام التوارث
#!/usr/bin/python
# Filename: inherit.py
class SchoolMember:
''''''Represents any school member.
def __init__(self, name, age):
self.name = name
self.age = age
print '(Initialized SchoolMember: %s)' % self.name
def tell(self):
''''''Tell my details.
print 'Name:"%s" Age:"%s"' % (self.name, self.age),
class Teacher(SchoolMember):
''''''Represents a teacher.
def tell(self):
SchoolMember.tell(self)
print 'Salary: "%d"' % self.salary
class Student(SchoolMember):
'''Represents a student.'''
SchoolMember.__init__(self, name, age)
self.marks = marks
print '(Initialized Student: %s)' % self.name
def tell(self):
SchoolMember.tell(self)
print 'Marks: "%d"' % self.marks
الخرج
$ python inherit.py
(Initialized SchoolMember: Mrs. Shrividya)
الخلصـة
لقد قمنا اﻵن باستكشاف الجوانب المختلفة للفئات والكائنات فضل عن مختلف المصطلحات
المرتبطة بها .وقد شاهدنا أيضا فوائد ومتطلبات البرمجة الكائنية الموجهة .بيثون تعتبر لغة
برمجة عالية المستوى في مجال البرمجة الكائنية الموجهة وفهم هذه المفاهيم بعناية
سيساعدك كثيرا في المدى البعيد.
وفيما يلي ،سنتعلم كيفية التعامل مع المدخلت والمخرجات وكيفية الوصول إلى الملفات في
بيثون.
الفصل .12.الدخل/الخــرج
قائمة المحتويات
الملفات
استخدام الملف
Pickle
Picklingو Unpickling
الخلصة
سهيكون لهديك الكهثير مهن الهوقت عنهدما ترغهب فهي إعطهاء برنامجهك قهدرة علهى التفاعهل مهع
المسهتخدم )ولعلهه يكهون أنهت نفسهك( .فهأنت تريهد إن تأخهذ مهدخلً مهن المسهتخدم ،ثهم تطبهع
بعهض النتهائج السهابقة .ول يمكننها أن نحقهق ذلهك باسهتخدام الفهادات raw_inputو print
علهى التهوالي .بالنسهبة للخهههرج ،يمكننها أيضها اسهتخدام مختلهف طهرق الفئة )str (string
على سبيل المثال ،يمكنك استخدام طريقة rjustلتحصل على سلسلة نصية ذات محاذاة إلى
اليميههههن لنطههههاق محههههدد .انظههههر ) help(strلمزيههههد مههههن التفهههها صههههيل .
يوجد نوع شائع آخر من الدخل/الخههرج تتعامل مع الملفات .إن القدرة على إنشاء ،وقراءة
وكتابة الملفات أمر أساسي للعديد من البرامج ،و سنبحث في هذا الجانب في هذا الفصل .
الملفات
يمكنك فتح واستخدام الملفات بغرض القراءة أو الكتابة عن طريق إنشاء كائن للفئة file
واستخدام طرق read, readlineأو writeبشكل مناسب للقراءة من الملف أو الكتابة إلى
الملف .إن قابلية القراءة أو الكتابة إلى ملف يتوقف على النمط الذي قمت بتحديده لفتح
الملف .ثم أخيرا ،وعندما تنتهي من الملف ،يمكنك استدعاء طريقة closeلتبلغ بيثون بأننا
انتهينا من استخدام الملف .
مثال 12.1استخدام الملف
#!/usr/bin/python
# Filename: using_file.py
\''' = poem
Programming is fun
When the work is done
if you wanna make your work also fun:
!use Python
'''
Pickle
والتي يمكن استخدامهافي تخزين أي كائن في،pickle توفر لنا بيثون وحدة معيارية تدعى
. وهذا ما يسمى تخزين الكائن الدائم. ثم تحصل عليها لحقا دون مساس،بيثون في ملف
؛ ماpickle والتي وظيفتها بالضبط نفس ما تقوم به الوحدةcPickle وهناك وحدة أخرى تسمى
يمكنك استخدام أي من هذه.( مرة أو أكثر1000) وهي أسرع بمقدارC عدا انهامكتوبة بلغة
نحن نشير إلى، تذكر. هناcPickle على الرغم من أننا سوف تستخدم الوحدة،cPickle الوحدات
pickle أن كل من هذه الوحدات ببساطة مجرد وحدة
#!/usr/bin/python
# Filename: pickling.py
import cPickle as p
#import pickle as p
shoplistfile = 'shoplist.data' # the name of the file where we will store the object
الخههرج
$ python pickling.py
['apple', 'mango', 'carrot']
أول ،نلحظ أن نستخدم الصيغة .import..asو هذا أمر يسير حيث يمكننا استخدام اسم
اقصر للوحدة .وحتى في هذه الحالة ،فإنه يتيح لنا النتقال إلى وحدة مختلفة ) cPickleأو
(pickleمن خلل تغيير بسيط لسطر واحد! في بقية البرنامج ،ونحن ببساطة نشير إلى هذه
الوحدة ،كه .p
لتخزين كائن في ملف ،أول نقوم بفتح الكائن fileفي نمط الكتابة وتخزين الكائن في الملف
المفتوح عن طريق استدعاء الدالة dumpمن الوحدة .pickleهذه العملية تسمى .pickling
بعد ذلك؛ نسترجع الكائن باستخدام الدالة loadللوحدة pickleالتي ترجع الكائن .هذه العملية تسمى
unpickling
الخلصة
لقد ناقشنا مختلف أنواع المدخلت والمخرجات وأيضا معالجة الملفات واستخدام الوحدة
.pickle
وفيما يلي سنبحث في مفهوم الستثناءات . exceptions
فصل .13.الستثناءات
قائمة المحتويات
الخطاء
Try..Except
معالجة الستثناءات
رفع الستثناءات
كيفية رفع الستثناءات
Try ..Finally
استخدام Finally
الخلصة
تقع الستثناءات عندما تحدث حالت استثنائية معينة في برنامجك .على سبيل المثال ،ماذا
يحدث لو كنت ذاهبا لقراءة ملف ما والملف غير موجود؟ أو ما إذا كنت حذفت بالمصادفة
برنامجا كان يعمل؟ مثل هذه الحالت تعالج باستخدام الستثناءات.
ماذا لو كان لبرنامجك بعض التصريحات غير الصالحة ؟ هذه المور تتولها بيثون والذي
ترفع يديها }معلنة لك{ وتخبرك أن هناك خطأ ما .
الخطــاء
نظرة بسيطة إلى إفادة .printماذا لو أخطأنا إملئيا في كتابة printوكتبناها كه
Print؟ لحظ الحرف الكبير والحرف الصغير .وفي هذه الحالة ،ترفع لنا بيثون خطأ صياغة
.syntax error
Try..Except
. وانظر ماذا يحدثCtrl-d اضغط.سنحاول قراءة مدخلت من المستخدمين
معالجة الستثناءات
وقد وضعنا بالساس البيانات المعتادة. try..except يمكننا معالجة الستثناءات باستخدام إفادة
. except وكذلك وضعنا كل معالجات الخطاء التي لدينا في لبنة، try ضمن لبنة
معالجة الستثناءات13.1 مثال
#!/usr/bin/python
# Filename: try_except.py
import sys
try:
s = raw_input('Enter something --> ')
except EOFError:
print '\nWhy did you do an EOF on me?'
sys.exit() # exit the program
except:
print '\nSome error/exception occurred.'
# here, we are not exiting the program
print 'Done'
الخرج
$ python try_except.py
Enter something -->
Why did you do an EOF on me?
$ python try_except.py
Enter something --> Python is exceptional!
Done
كيف يعمل البرنامج
نضع كل الفادات التي قد تثير خطأ في اللبنة tryومن ثم محاولة معالجة جميع الخطاء
والستثناءات في البند /اللبنة . exceptالبند exceptيمكنه معالجة خطأ أو استثناء واحد
محدد ،أو قائمة من الجمل العتراضية للخطاء/الستثناءات .إذا لم يكن هناك أسماء من
الخطاء أو الستثناءات معطاة ،ستعالج جميع الخطاء والستثناءات .ويجب أن يكون هناك بند
exceptواحد على القل مرتبط مع كل بند من . try
إذا لم يعالج أي خطأ أو استثناء فإن المعالج الفتراضي لبيثون يستدعي و يوقف تنفيذ البرنامج
ويطبع رسالة .وقد رأينا بالفعل في هذا العمل.
يمكنك أيضا الحصول على بند elseمرتبطا مع اللبنة .try..catchويتم تنفيذ البند elseعند
عدم وجود أي استثناء
يمكن نا كذلك الحصول على الستثناء لذا يمكننا الحصول على معلومات إضافية عن الستثناء الذي
حدث .ويتجلى هذا في المثال التالي.
رفع الستثناءات
يمكنك رفع الستثناءات باستخدام الفادة .raiseيجب عليك أيضا أن تحدد اسم الخطأ
/الستثناء ،والكائن الستثنائي يكون موضوعا جنبا إلى جنب مع الستثناء .الخطأ أو الستثناء
الذي يمكنك رفعه ينبغي أن يكون فئة والتي تعتبر بشكل مباشر أو غير مباشر فئة مشتقة عن
الفئة Errorأو الفئة Exceptionعلى التوالي.
class ShortInputException(Exception):
''''''A user-defined exception class.
def __init__(self, length, atleast):
)Exception.__init__(self
self.length = length
self.atleast = atleast
try:
الخهرج
$ python raising.py
Enter something -->
Why did you do an EOF on me?
$ python raising.py
Enter something --> ab
ShortInputException: The input was of length 2, was expecting at least 3
$ python raising.py
Enter something --> abc
No exception was raised.
كيف يعمل
قمنا بإنشاء نوع من الستثناء خاص بنا على الرغم من أننا قد ل يمكننا استخدام أي،هنا
وهذا النوع من الستثناء الجديد هو الفئة.خطأ محدد سلفا لغراض إيضاحية/استثناء
و، وهو طول المدخلتlength : وهي تحتوي على حقلين هماShortInputException
هما: وهي تحتوي على حقلين. الجديد هو الفئة. وهو أقل طول يتوقعه البرنامجatleast
، وهو طول المدخلتlength
أيضا إضافة إلى المتغير الذي يقوم بإجراءerror نذكرك بالفئة، except في البند
. والتي تعتبر مماثلة للقيم والمعاملت في استدعاء الدالة.الستثناء/المقارنة مع الكائن الخطأ
لطباعة رسالةatleast والحقلlength الخاصة نستخدم الحقلexcept وفي داخل الفئة
.مناسبة للمستخدم
Try..Finally
ماذا لو كنت تقرأ الملف وأردت إغلق هذا الملف سواء تم رفع استثناء أو ل ؟ ويمكن أن يتم
ذلك باستخدام finallyاللبنة .علما أنه يمكنك استخدام أحد بنود exceptجنبا إلى جنب
مع لبنة finallyلنفس اللبنة tryالمقابلة لها .ستضطر لتضمين واحد بداخل اﻵخر إذا كنت
ترغب في استخدام كليهما .
استخدام Finally
مثال 13.3استخدام Finally
#!/usr/bin/python
# Filename: finally.py
import time
try:
)'f = file('poem.txt
while True: # our usual file-reading idiom
)(line = f.readline
if len(line) == 0:
break
)time.sleep(2
print line,
finally:
)(f.close
'print 'Cleaning up...closed the file
الخرج
$ python finally.py
Programming is fun
When the work is done
Cleaning up...closed the file
Traceback (most recent call last):
? File "finally.py", line 12, in
)time.sleep(2
KeyboardInterrupt
كيف يعمل :
نقوم كالمعتاد بمجموعة العمل الخاصة بقراءة الملف ،ولكني كنت أدخلت طريقة اعتباطية من
السبات لمدة 2ثانية قبل طباعة كل سطر باستخدام طريقة الدالة .time.sleepالسبب
الوحيد لذلك هو أن البرنامج يعمل ببطء نقوم بطاقم العمل) .بيثون سريعة جدا بطبيعتها(.
قائمة المحتويات.
مقدمة
الوحدة sys
معطيات سطر الوامر
المزيد عن sys
الوحدة os
الخلصة
مقدمة :
مكتبهه بيثهون القياسهية متاحهة مهع كهل تركيهب لبهايثون .وههي تحتهوي علهى عهدد ههائل مهن
الوحدات modules /المفيدة جدا .و من الهمية بمكان أن تع تاد ع لى مكت بة بيثون القياسية ؛
حيث إن معظم المشاكل يمكن حلها بسهولة وبسرعة إذا كنت معتادا على هذه المكتبة
سنبحث بعضا من الوحدات المستخدمة في هذه المكتبة .يمكنك العثور على التفاصيل الكاملة
لجميع الوحدات في مكتبة بيثون القياسية في قسم " " Library Referenceفي الوثائق
التي تأتي مع تركيب بيثون الخاص بك.
الوحدة : sys
تحتهوي ههذه الوحهدة " "sysعلهى وظيفهة محهددة مهن النظهام .وقهد رأينها بالفعهل قائمهة
sys.argvالتي تحتوي على معطيات سطر الوامر .
#!/usr/bin/python
# Filename: cat.py
import sys
def readfile(filename):
''''''Print a file to the standard output.
f = file(filename)
while True:
line = f.readline()
if len(line) == 0:
break
print line, # notice comma
f.close()
if sys.argv[1].startswith('--'):
option = sys.argv[1][2:]
# fetch sys.argv[1] but without the first two characters
if option == 'version':
print 'Version 1.2'
elif option == 'help':
print '''\
This program prints files to the standard output.
Any number of files can be specified.
Options include:
--version : Prints the version number
--help : Display this help'''
else:
print 'Unknown option.'
sys.exit()
else:
for filename in sys.argv[1:]:
readfile(filename)
الخرج
$ python cat.py
No action specified.
المزيد عن : sys
السل سلة الن صية sys.versionتعط يك معلو مات عن إ صدارة بي ثون ا لتي ق مت بتثبيت ها .و
الصف tuple -المسماة sys.version_infoتعطيك طريقة أسهل لتاحة أجزاء محددة من
إصدارة بيثون لبرنامجك .
الوحدة os
ههذه الوحهدة البرمجيهة تمثهل وظيفهة عامهة لنظهام التشهغيل .ههذه الوحهدة لهها أهميهة خاصهة إذا
كنت تريد عمل منصات مستقلة لبرامجك -أي إنه يسمح للبرنامج ليكون مكتوبا لكي يعمل
على لينوكس أو على ويندوز كذلك من دون أي مشاكل ودون أن يتطلب ذلك أي تغييرات.
ومن المثلة على ذلك استخدام المتغير os.sepبدل من عملية تحديد مسار أو بيئة مستقلة
لنظام محدد.
)'>>> os.path.split('/home/swaroop/byte/code/poem.txt
)'('/home/swaroop/byte/code', 'poem.txt
الخلصة
قد رأينا بعضا من وظائف الوحدة sysفي مكتبة بيثون القياسية .ينبغي عليك أن تبحث في
وثائق بيثون القياسية لتحصل على المزيد حولها والمزيد من الوحدات كذلك .
وفي الفصل التالي سوف نغطي جوانب متنوعة من بيثون ،والتي ستجعل جولتنا في بيثون أكثر
اكتمالً .
جدول المحتويات
الطرق الخاصة .
تضمين القائمة
لبنات الفادات المفردة
استخدام القوائم المضمنة
استقبال الصفوف والقوائم في الدالة
نماذج لمبدا
استخدام نماذج لمبدا
إفادات execو eval
إفادة assert
دالة repr
الخلصة
اﻵن وقد قمنا بنجاح بتغطية جوانب رئيسة ومتنوعة من بيثون والتي سوف تستخدمها ،في هذا
الفصل سنغطي المزيد من الجوانب التي تجعل معرفتنا بلغة بيثون أكثر اكتمال
الطرق الخاصة
هنهاك بعهض السهاليب الخاصهة الهتي لهها أهميهة خاصهة فهي الفئات classes/مثهل طهرق
والتي لها أهمية قد شهدناها بالفعل. __ __initو ____del
عموما ،الطرق الخاصة تستخدم لتقليد سلوك معين .فعلى سبيل المثال ،إذا أردت أن تستعمل
] x[keyلعمل ية الفهرسهة الخاصهة بهك من أ جل فئة لديك )م ثل الهتي ت ستخدمها في القهوائم
والصفوف (tuplesثم مجرد تنفيذ طريقة )( __ __getitemويتم عملك .إذا كنت تفكر
في ذلك ،فهذا ما تقوم بيثون بعمله مع الفئة listنفسها!
بعض هذه الطرق Methods/المفيدة الخاصة مدرجة في الجدول التالي .إذا كنت تريد أن
تتعرف على كل الطرق الخاصة ،هناك قائمة ضخمة متاحة في الدليل المرجعي لبايثون.
جدول 15.1بعض الساليب الخاصة
الشرح السم
وهذه الطريقة تستدعى فقط عندما يعود الكائن المنشأ حديثا للستعمال )__init__(self, ...
تستدعى فقط قبل أن يتم تدمير الكائن )__del__(self
الشرح السم
تستدعى عندما نستخدم الفادة printمع كائن أو عندما نستخدم)( str )__str__(self
وبالمثل يوجد أساليب خاصة لجميع العوامل "،>،+إلخ" " >" Less than
)__lt__(self, other
تستدعى عند استخدام العامل
__getitem__(self,
تستدعى عند استخدام عملية الفهرسة ]x[key
)key
تستدعى عند استعمال الدالة المدمجة )( lenلكائن المتسلسلة )__len__(self
القوائم المضمنة
تستخدم لستخلص/اشتقاق قائمة جديدة من القائمة الحالية .على سبيل المثال ،لديك قائمة
من العداد ،و تريد أن تحصل على قائمة مناظرة مع جميع الرقام مضروبة في 2ولكن فقط
عندما تكون أكبر من .2فالقائمة المضمنة تكون نموذجية لمثل هذه الحالت.
نماذج لمدا
تستخدم الفادة lambdaلنشاء كائنات دالة جديدة ثم إرجاعها أثناء وقت التشغيل
استخدام نماذج لمدا
مثال 15.2استخدام نماذج لمبدا
#!/usr/bin/python
# Filename: lambda.py
def make_repeater(n):
return lambda s: s * n
)twice = make_repeater(2
)'print twice('word
)print twice(5
الخرج
$ python lambda.py
wordword
10
كيف يعمل :
هنها ؛ اسهتخدمنا الدالهة make_repeaterلنشهاء كائنهات دالهة جديهدة فهي وقهت التشهغيل/
runtimeوإرجاعها .
الفادة lambdaتستخدم لنشاء كائن للدالة .في الساس ،تأخذ lambdaمعامل متبوعا
بتعبير واحد فقط والذي يصبح الجسم لهذه الدالة ،وقيمة هذا التعبير يتم إرجاعها من خلل
الدالة الجديدة .لحظ أنه حتى الفادة printل يمكن أن تستخدم داخل نموذج لمدا .ولكن
تستخدم كعبارات فقط.
إفادة eval
تستخدم لحساب تعابير بيثون الصالحة التي تخزن في السلسلة النصية كما يتضح في المثال
بأسفل:
)'>>> eval('2*3
6
إفادة assert
تسهتخدم إفهادة assertللتأكهد مهن تحقهق شهيء مهاعلى سهبيل المثهال إذا كنهت متأكهدا بهأن
لديك عنصراً واحداً على القل تستخدمه في قائمة وتريد التحقق من ذلك وترفع خطأ إذا لم
يكن متحق قاً حينئذ تع تبر الفادة assertإفادة مثال ية في هذه الحالة وعندما تفشل الفادة
assertيرتفع لنا classname>AssertionError
]'>>> mylist = ['item
>>> assert len(mylist) >= 1
)(>>> mylist.pop
''item
>>> assert len(mylist) >= 1
Traceback (most recent call last):
? File "<stdin>", line 1, in
AssertionError
الدالة repr
تستخدم الدالة reprtللحصول على تمثيل قانوني لسلسلة نصية لكائن ما.وتقوم ) Backticksوقد
يسههمى تحويههل أو عكههس علمههات القتبههاس( بنفههس الههمر.لحههظ أنههه سههيكون لههديك
eval(repr(object)) == objectفي أغلب الحيان
][ = >>> i
)'>>> i.append('item
`>>> `i
"]'"['item
)>>> repr(i
"]'"['item
وبب ساطة ،ت ستخدم الدا لة reprاو backticksللح صول ع لى تمث يل لل كائن قاب لة للط بع.
يمكنهك التحكهم فيمها تعيهده الكائنهات الخاصهة بهك للدالهة reprمهن خلل تحديهد طريقهة __
__reprفي الفئة الخاصة بك.
الخلصة :
لقد تناولنا المزيد من مميزات بيثون في هذا الفصل ،و يمكنك التأكد من أننا لم نغطَّ بعد
كل ملمح بيثون .ولكن ،في هذه المرحلة ،نكون قد غطينا معظم ما سوف تستخدمه في
تطبيقاتك .وهذا المر فيه الكفاية لك لتبدأ أيا من البرامج أنت ستنشئها.
في الفصل المقبل ،سوف نناقش كيفية استكشاف المزيد من بيثون.
قائمة المحتويات
البرمجيات الرسومية
ملخص عن الدوات الرسومية
استكشف المزيد
الخلصة
إذا كنت قد قرأت هذا الكتاب بعناية حتى اﻵن ،ومارست كتابة العديد من البرامج ،فلبد أنك
أ صبحت متآل فا وم ستريحا مع بي ثون ا ﻵن .ورب ما ت كون أن شأت ب عض البرا مج لستك شاف ب عض
الشياء وتطبيق المهارات التي اكتسبتها في بيثون .إذا لم تقم بذلك بالفعل ،فعليك أن تفعل.
والسؤال اﻵن هو 'ماذا بعد؟'.
وأود أن اقترح عليك معالجة هذه المشكلة :اصنع لنفسك برنامج دفتر عناوين يعمل بسطر
الوامر -باستخدامه يمكنك إضافة أو تعديل أو حذف ،أو البحث عن معارفك؛ مثل الصدقاء
والسرة والزملء ،ومعلوماتهم مثل عنوان البريد اللكتروني و/أو رقم الهاتف .التفاصيل يجب
تخزينها لسترجاعها في وقت لحق.
هذا أمر سهل إلى حد ما ،إذا تذكرت العناصر المختلفة التي مررنا بها حتى اﻵن .وإذا كنت
تريد توجيهات بشأن كيفية المضي قدما ،فإليك هذه التلميحة.
تلميحة ) ل يجب عليك أن تقرأ هذا(.
.أنشئ فئة لتمثيل معلومات الشخص .استخدم قاموسا لتخزين كائنات الشخص مع جعل اسمه
المفتاح .استخدم وحدة cPickleلحفظ الكائنات على القرص الصلب .استخدم الساليب
المدمجة في القاموس لضافة وحذف وتعديل الشخاص.
عندما تستطيع فعل هذا ،يمكنك أن تدعي أنك مبرمج بيثون .واﻵن ،وعلى الفور أرسل لي
بريد شكر لهذا الكتاب العظيم ; .(-هذه الخطوة اختيارية ولكني أوصيك بها.
إليك بعض الطرق لمواصلة رحلتك مع بيثون:
البرمجيات الرسومية
مكتبات الواجهة الرسومية باستخدام بيثون -تحتاجها لعمل برامجك الرسومية باستخدام
بيثون .يمكنك إنشاء برامج مثل IrfanViewأو Kuickshowأو أي شيء مثل ذلك
باستعمال مكتبات الواجهة الرسومية في بيثون مع الرتباطات الخاصة بها .الرتباطات هي ما
يسمح لك بكتابة البرامج ببايثون مع استخدام المكتبات التي تمت كتابتها في حد ذاتها بلغة C
الفصول المستقبلية
لقد فكرت في كتابة فصل أو فصلين لهذا الكتاب عن برمجة الواجهات الرسومية .غالبا سأختار
wxPythonكعُدّة الدوات المختارة .إذا أردت أن تعرض وجهة نظرك حول هذا الموضوع
فمهن فضهلك اشهترك فهي قائمةه byte-of-pythonالبريدية حيهث يتنهاقش القهراء معهي حهول
التحسينات المحتملة لهذا الكتاب.
استكشف المزيد
مكت بة بي ثون القيا سية مكت بة شهاملة .أغلهب الهوقت ،سهتجد فهي ههذه المكتبهة ما تبحهث عنهه.
وهذا يشار إليه بوصفه فلسفة 'البطاريات مضمّنة' في بيثون .أنا أوصى بشدة بأن تتجول خلل
الوثائق القياسية لبايثون قبل المتابعة في بدء كتابة برامج كبيرة بلغة بيثون.
Python.org؛ الموقع الرسمي للغة البرمجة بيثون .ستجد أحدث الصدارات من لغة بيثون ومفسر
اللغة .وهناك أيضا مختلف القوائم البريدية حيث تجري المناقشات النشطة حول مختلف جوانب
بيثون.
comp.lang.python ههي مجموعهة أخبهار usenetحيهث يجهري النقهاش حهول ههذه
اللغة .يمكنك إرسال رسائلك واستفساراتك إلى مجموعة الخبار تلك .يمكنك الوصول إلى
ههذه المجموعهات علهى الهنترنت باسهتخدام مجموعات جوجل أو النضهمام إلهى القائمهة البريديهة
والتي ليست سوى مرآة لمجموعة الخبار.
كتاب طبخ بيثون كتاب قيم للغاية حيث جمع مجموعة من الوصفات أو النصائح حول كيفية
حل أنواع معينة من المشاكل باستخدام بيثون .هذا الكتاب ل بد أن يقرأه كل مستخدم بيثون.
بيثون الساحرة هي سلسلة من المقالت الرائعة حول بيثون بقلم داڤيد مرتز.
غص في بيثون كتاب جيد جدا لذوي الخبرة من مبرمجي بيثون .إذا قرأت تماما الكتاب الحالي
الذي تقرأه اﻵن ،فأرجح بشدة أن تقرأ 'غص في بيثون' بعد ذلك .يغطي مجموعة من المواضيع
بما في ذلك معالجة ،XMLوالختبارات الوحداتية ،والبرمجة والوظيفية.
Jythonههو تطهبيق لمفسهر بيثهون فهي لغهة جافها .وههذا يعنهي أن بإمكانهك كتابهة برا مج بلغهة
بيثهون بيثهون واسهتخدام مكتبهات جافها كهذلك! Jythonبرمجيهة مسهتقرة وناضهجة .إذا كنهت
مبرمج جافا ،فأنصحك بشدة بأن تجرب .Jython
IronPythonههو تطهبيق لمفسهر بيثهون فهي لغهة سهي #ويمكهن أن يعمهل علهى منصهة نهت /
مونهو /دوتجنهو .ههذا يعنهي أن بإمكانهك كتابهة برامهج بلغهة بيثهون واسهتخدام .مكتبهات NET
والمكتبات الخرى التي توفرها هذه المنصات الثلث كذلك Iron python .ما تزال برمجية
"ق بل أل فا" ول ت صلح سوى للتجر يب حال يا .ج ِم هو جونن ،ا لذي ك تب IronPythonان ضم
إلى شركة ميكروسوفت ،وسيعمل على إصدارة كاملة من IronPythonفي المستقبل.
Lythonههو واجههة ليسهب للغهة بيثهون .وههي تشهبه ليسهب المشهتركة ) (Common Lisp
وتترجم مبا شرة إ لى bytecodeبي ثون ،ا لمر ا لذي يع ني أن ها سوف تتفا عل مع كود بيثون
المعتاد.
هنهاك الكهثير والكهثير مهن المهوارد عهن بيثهون .المهمهة منهها !Daily Python-URLالهذي
يجعلهك علهى اطلع دائم بهآخر الحهداث ،Vaults of Parnassus ،و ONLamp. com
،Python DevCenterو ،dirtSimple.orgو Python Notesوغيرها الكثير.
الخلصــة
لقد وصلنا إلى نهاية هذا الكتاب ولكن ،كما يقولون هذه بداية النهاية .أنت اﻵن تعتبر مستخدما
نهِما لبيثون ،وأنت بل شك مستعد لحل العديد من المشاكل باستخدام بيثون .يمكنك البدء
في أتم تة ج هازك للق يام ب كل ال شياء ا لتي كانت في الما ضي أ مورا ل يم كن تخيل ها ،أو كتا بة
ألعابك الخاصة والكثير الكثير .ولذا ابدأ.
[OpenOffice
فايرفوكس موزيل .هذا هو الجيل القادم من متصفح الويب الذي يتوقع تغلبه على إنترنت
اكسبلورر )من حيث الحصة السوقية فقط ؛ (-في غضون سنوات قليلة .ومن في غاية السرعة
وقد نال الشادة من النقاد لخصائصه المعتبرة والمثيرة للعجاب .تمديد مفهوم يسمح بأي نوع
من الوظائف التي يمكن ان تضاف اليها وقد أضيفت إليه العديد من الضافات تسمح بإضافة أي
نهوع مهن الوظهائف إليهه.والمنتهج المصهاحب لهه )ثنهدربيرد( عميهل بريهد إلكهتروني ممتهاز يجعهل
قراءة البريد أمرا غاية في السرعة [ Mozilla Firefox, Mozilla Thunderbird ] .
مو نو .هذا تطبيق مفتوح المصدر لتشغيل برامج منصة مايكروسوفت .نت .وهي تتيح إنشاء
وتشهغيل تطبيقهات دوت نهت للعمهل فهي بيئة لينكهس ،وينهدوز ، FreeBSD ،و مهاكنتوش
وغيرها من المنصات الخرى أي ضا .لتنفذ معايير ECMAلواج هة سطر الوامر CLIولغة
سي #التي اعتمدتها مايكروسوفت ،وإنتل ،وإتش بي كمعايير موحدة وأصبحت اﻵن مفتوحة
المعايير .وهذه خطوة في اتجاه توحيد معايير ISOفي الوقت نفسه.
وحاليها يوجهد برمجيهات ) C# mcsكتبهت بلغهة سهي #نفسهها(،ومهزودات ASP.NETو
ADO.NETكاملة الخصائص ،لقواعد البيانات والعديد والعديد من المزايا التي يتم تطويرها
وإضافتها كل يوم[Mono, ECMA, Microsoft .NET ].
خادم ا لويب أبات شي .هو أكثر خوادم الويب مفتوحة المصدر شعبية وفي الواقع هو أشهر
خادم ويب في العالم! حيث إنه يعمل عليه قريب من %60من المواقع اللكترونية .نعم هذه
حقيقهة حيهث يتعامهل أباتشهي مهع مواقهع إلكترونيهة أكهثر بكهثير مهن المنافسهين بمها فيههم خهادم
ميكروسوفت[ Apache ] .
.MySQL هو واحد من أشهر خوادم قواعد البيانات مفتوح المصدر ،وهو غاية في
السرعةوقد تم إضافة العديد من المزايا إلى أحدث إصداراته[ MySQL ] .
إم بلير هو مشغل فيديو يمكنه تشغيل أي شيء بدءا ب DivXو MP3و Oggو VCD
وحتى ) DVDsمن ذا يقول إن المصادر المفتوحة ل تتمتع بروح الفكاهة؟( ] [ MPlayer
.Movixههي توزيعهة لينكهس تقهوم علهى توزيعهة كنهوبكس وتعمهل مهن خلل القهرص المدمهج
ولكن تم تصميمها لتشغيل إسطوانات الفلم ذاتية القلع .ويمكنك عمل إسطوانات موفيكس،
ومها ههي إل إسهطوانات أفلم ذاتيهة التشهغيل فعنهدما تقهوم بإعهادة تشهغيل الحاسهب وتضهع القهرص
المد مج في م شغل ا لقراص وب عدها ي بدأ ت شغل الفي لم ذات يا ،وأ نت ل تح تاج حتى ل قرص صلب
لمشاهدة الفيلم باستخدام موفيكس[Movix] .
ههذه القائمهة تههدف فقهط إلهى إعطهائك فكهرة مهوجزة ،وهنهاك العديهد مهن البرمهج المفتوحهة
المصدر الممتازة غير ذلك ،مثل لغة بيرل ،ولغة بي إتش بي ،و نظام إدارة المحتوي للمواقع
ملحق .Bعنْ
قائمة المحتويات
بيانات الطبع
عن المؤلف
بيانات الطبع
تقريبا كل البرمجيات التي استخدمتها لبناء هذا الكتاب حرة ومفتوحة المصدر .في أول مسودة
من الكتاب استخدمت ردهات لينكس 0 .9كقاعدة لبيئة العمل ،واﻵن في هذه المسودة السادسة
أستخدم لينكس فيدورا كور 3كأساس.
في البداية استخدم KWordلكتابة الكتاب )كما وضحت في درس التاريخ في التمهيد( .لحقا
تحولت إلى DocBook XMLمستخدما Kateلكن وجدتها مشقة كبيرة ،لذا انتقلت إلى
أوبن أوفيس والذي كان رائعا بفضل مستوى التحكم الذي يوفره للتنسيق وتوليد ملفات ،PDF
لكنه أنتج HTMLسيء جدا من المستند .في النهاية اكتشفت XEmacsوأعدت كتابة
الكتاب من الصفر مستخدما ) DocBook XMLللمرة الثانية( بعد أن قررت أن هذا التنسيق
هو حل بعيد المدى .في هذه المسودة السادسة الجديدة قررت استخدام +Quantaللقيام بكل
التحرير.
تستخدم صفحات الطرز القياسية التي تأتي مع فيدورا كور .3كما تستخدم الخطوط
القياسية أيضا .مع هذا ،فقد كتبت مستند CSSلتلوين وتنسيق صفحات .HTMLكما
كتبت محلل نحوي بدائي -بلغة بيثون طبعا -لبراز التراكيب آليا في كل نماذج البرامج.
عن المؤلف
يحب سواروپ س .ه .عمله كمطور برمجيات في ياهو! بمكتب بنجالور في الهند .اهتماماته
في المجال التقني تشمل البرمجيات الحرة مثل لينكس ،دوتجنو و Qtو ،MySQLواللغات
الرائعة مثل بيثون و سي ،#وكتابة أشياء مثل هذا الكتاب وأي برمجية يستطيع إنشائها في
وقت فراغه ،والكتابة في مدونته .اهتماماه الخرى تشمل القهوة ،وقرائة روايات روبرت لودلم،
والرحلت والسياسة.
إذا كنت تهتم بمعرفة المزيد عن هذا الرجل ،فانظر في مدونته .www.swaroopch.info
الختم الزمني
وُلِّد هذا المستند في 13يناير 2005الساعة 04:43
تاريخ المراجعة
13/01/2005 مراجعة 20 .1
إعادة كتابة شاملة باستخدام +Quantaعلى فيدورا 3بالضافة إلى الكثير من التصحيحات
والتحديثات .الكثير من المثلة الجديدة .إعادة كتابة بيئة DocBookالخاصة من البداية.
28/03/2004 مراجعة 15 .1
مراجعات طفيفة
16/03/2004 مراجعة 12 .1
إضافات وتصحيحات
09/03/2004 مراجعة 10 .1
المزيد من تصحيح الخطاء الملئية ،بفضل الكثير من القراء المتحمسين والمخلصين.
08/03/2004 مراجعة 00 .1
كنتيجة للمردود والقتراحات الكثيرة من القراء ،قمت بمراجعات كبيرة على المحتوى مع تصحيح
للخطاء الملئية.
22/02/2004 مراجعة 99 .0
إضافة فصل جديد عن الوحدات .إضافة تفاصيل عن عدد المعاملت المتغير للدوال.
16/02/2004 مراجعة 98 .0
كتبت مخطوط بيثون و صفحات طرز CSSلتحسين ناتج ،XHTMLشامل محلل نحوي بدائي
-لكن يعمل -للقيام بإبراز للتراكيب في نماذج البرامج على طريقة .VIM
13/02/2004 مراجعة 97 .0
مسودة جديدة معاد كتابتها بالكامل ،بتنسيق ) DocBook XMLثانيا( .تحسن الكتاب كثيرا ،أصبح
أكثر تناسقا ومقروئية.
25/01/2004 مراجعة 93 .0
إضافة الحديث عن IDLEمع المزيد من المسائل الخاصة بويندوز
05/01/2004 مراجعة 92 .0