docs:python_basics
اختلافات
عرض الاختلافات بين النسخة المختارة و النسخة الحالية من الصفحة.
جانبي المراجعة السابقةالمراجعة السابقة | |||
docs:python_basics [2015/08/14 16:52] – حزم تحتاج تصنيف alsadi | docs:python_basics [2015/08/14 17:42] (حالي) – alsadi | ||
---|---|---|---|
سطر 1: | سطر 1: | ||
+ | {{tag> | ||
+ | ====== بدهيات بايثون ====== | ||
+ | {{: | ||
+ | * هذه المقالة لم تكتمل بعد | ||
+ | * سيتم دمج عدة مقالات فيها | ||
+ | * [[http:// | ||
+ | * محاضرات الأستاذ مسلم عادل | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | ===== مزايا لغة بايثون ===== | ||
+ | تعتبر بايثون من أسهل وأنظف لغات البرمجة ومع ذلك فهي من أقوى لغات البرمجة في نفس الوقت. | ||
+ | تمتاز بايثون بأنها لغة متعددة المبادئ multi paradigm فهي | ||
+ | * لغة إجرائية Procedural programming | ||
+ | * تدعم البرمجة الدالية functional programming أو lambda programming | ||
+ | * موجهة للكائنات OOP | ||
+ | |||
+ | ===== لمحة تاريخية ===== | ||
+ | إن اللغة البرمجية النصية scripting language الأفضل في العالم كانت دون منازع هي **بيرل Perl** وتُعرف من الجَمل (نسبة للصورة على الكتاب) الذي لديه " | ||
+ | |||
+ | إن الثعبان الأسطوري Python ليس السبب وراء هذا الاسم بل جاء هذا الاسم نسبة لرواية إنجليزية كوميدية ساخرة تعود للسبعينات من القرن الماضي. لغة بايثون تتخطى كل عيوب لغة بيرل Perl التي توصف بأنها لغة قذرة Dirty Language ففي لغة بيرل من السهل كتابة برنامج لكن قد يكون شبه مستحيل قراءته أو تعديله أو إصلاحه. بل إن هناك من عُرف بعمل برامج تحل مشاكل معقدة بسطر واحد بلغة بيرل. أما لغة بايثون فإنها تحمي المبرمج من نفسه، إنها تلزمه بالوضوح. لكن هذا ينفر المبرمجين الجدد منها في البداية. منتقدي اللغة يشبّهون صرامتها في تنسيق الكود بالمسافات البادئة بلغة فورتران سيئة الذكر. لكن هذه النقطة هي من نقاط القوة في بايثون وليست من نقاط الضعف. | ||
+ | |||
+ | جاءت لغة بايثون من مراكز الأبحاث و " | ||
+ | |||
+ | ويُعرف مخترع هذه اللغة Guido van Rossum باختراعه لشيء آخر أقل أهمية مقارنة مع بايثون ألا وهو آلة الزمن!! نعم، إذ يشاع بأنه قد اخترع آلة التحكم في الزمن، ذلك لأنه كان يجيب على الأسئلة التي تطلب المزيد من المزايا في هذه اللغة بقوله " | ||
+ | ===== قصص النجاح ===== | ||
+ | من أشهر التطبيقات التي كتبت بهذه اللغة هي Anaconda (على اسم ثعبان حقيقي) وهو برنامج التركيب في توزيعة ريدهات وفيدورا وغيرها وبرامج الإعدادات في تلك التوزيعات. كما أن هناك الكثير من المواقع تستخدم بايثون عبر WSGI حيث يمكن أن يعمل بشكل متكامل مع خادم الويب أباتشي بطريقة أسرع من CGI بعدة أضعاف. | ||
+ | |||
+ | وتستخدم غوغل بايثون في عدد كبير من الأمور. | ||
+ | |||
+ | FIXME | ||
+ | |||
+ | ===== الحصول على بايثون للمنصات المختلفة ===== | ||
+ | يمكن الحصول على مفسر بايثون للمنصات المختلفة من خلال www.python.org/ | ||
+ | |||
+ | مستخدمو ويندوز يمكنهم الحصول على حزمة تثبيت msi من الصفحة السابقة (مثلا [[http:// | ||
+ | |||
+ | كذلك هناك حل مفيد جدا لمستخدمي ويندوز وهو www.PortablePython.com وهي حزمة تحتوي نسخة منقولة من لغة بايثون تحتوي على الكثير من الإضافات (مثل واجهات SPE IDE و PyScripter وغيرها) بعد تشغيل ملف exe الموجود عليها يمكنك وضع المجلد الناتج منها على ذاكرة فلاش ثم تشغيل بايثون منها دون الحاجة لعمل setup. | ||
+ | |||
+ | في ماك يمكنك الحصول على حزمة dmg من نفس الصفحة مثلا [[http:// | ||
+ | |||
+ | < | ||
+ | الإصدار | ||
+ | </ | ||
+ | |||
+ | ===== مفسر بايثون التفاعلي ===== | ||
+ | ==== تشغيل المفسر ==== | ||
+ | في لينكس يكفي كتابة python في الطرفية terminal (أي سطر الأوامر) لتشغيل مفسر بايثون التفاعلي. ذلك سيؤدي لتشغيل الملف | ||
+ | |||
+ | في ويندوز تجد ملفين لتشغيل بايثون python.exe و pythonw.exe الأول يظهر محاورة سطر أوامر console (وهو ما نريده الآن) والثاني لا يظهر محاورة ويستخدم الثاني كمفسر للبرامج الرسومية التي لا ينبغي أن تظهر الطرفية عند تشغيلها ولتمييزها تعطى تلك البرامج اللاحقة pyw عوضا عن اللاحقة التقليدية. إن كنت تريد أن تعمل بايثون كما في لينكس أي عندما تكتب python في سطر الأوامر (وليس عن طريق النقر على أيقونة الملف python.exe أو القوائم) عليك أن تضيفها إلى مسار التشغيل PATH عن طريق إتباع الخطوات التالية: | ||
+ | * الضغط بالزر الايمن علي My Computer وإختيار Properties | ||
+ | * ثم إخيتار Advanced | ||
+ | {{ pyb-path1.jpg? | ||
+ | |||
+ | * ثم إختيار Environment Variables | ||
+ | {{ pyb-path2.jpg? | ||
+ | |||
+ | * ثم أسفل بند System variables نقوم بالضغط علي Path ثم الضغط علي Edit ثم إضافه ; | ||
+ | {{ pyb-path3.jpg? | ||
+ | |||
+ | عند تشغيل مفسر بايثون التفاعلي ستحصل على ما يشبه | ||
+ | < | ||
+ | [alsadi@pc1 ~]$ python | ||
+ | Python 2.6 (r26:66714, Nov 3 2009, 17: | ||
+ | [GCC 4.4.1 20090725 (Red Hat 4.4.1-2)] on linux2 | ||
+ | Type " | ||
+ | >>> | ||
+ | </ | ||
+ | |||
+ | العلامة ''>>>'' | ||
+ | |||
+ | ==== استعمال بايثون كآلة حاسبة ==== | ||
+ | === جلسة أولى === | ||
+ | في مفسر بايثون التفاعلي اكتب 1+1 حتى تكون الشاشة عندك هكذا | ||
+ | < | ||
+ | [alsadi@pc1 ~]$ python | ||
+ | Python 2.6 (r26:66714, Nov 3 2009, 17: | ||
+ | [GCC 4.4.1 20090725 (Red Hat 4.4.1-2)] on linux2 | ||
+ | Type " | ||
+ | >>> | ||
+ | 2 | ||
+ | >>> | ||
+ | </ | ||
+ | |||
+ | لاحظ أن الجواب وهو 2 لم تسبقه علامة المحث ''>>>'' | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | === " | ||
+ | جرب الآن | ||
+ | <code python> | ||
+ | " | ||
+ | </ | ||
+ | ستحصل على شاشة تشبه | ||
+ | < | ||
+ | [alsadi@pc1 ~]$ python | ||
+ | Python 2.6 (r26:66714, Nov 3 2009, 17: | ||
+ | [GCC 4.4.1 20090725 (Red Hat 4.4.1-2)] on linux2 | ||
+ | Type " | ||
+ | >>> | ||
+ | ' | ||
+ | </ | ||
+ | والسبب أن " | ||
+ | |||
+ | === ثلث الثلاثة صفر!! === | ||
+ | جرب الآن | ||
+ | <code python> | ||
+ | 1/3*3 | ||
+ | </ | ||
+ | |||
+ | ستحصل على شاشة تشبه | ||
+ | < | ||
+ | [alsadi@pc1 ~]$ python | ||
+ | Python 2.6 (r26:66714, Nov 3 2009, 17: | ||
+ | [GCC 4.4.1 20090725 (Red Hat 4.4.1-2)] on linux2 | ||
+ | Type " | ||
+ | >>> | ||
+ | 0 | ||
+ | </ | ||
+ | نعم أنت لم تخطئ. الجواب صفر وليس واحد!! لأننا قمنا بعملية قسمة صحيحة 1 تقسيم 3 الجواب صفر (والباقي 1) ثم ضربنا الناتج الذي هو صفر في 3 فكان الناتج النهائي صفرا. | ||
+ | |||
+ | <note tip>في بايثون 3 القسمة الصحيحة أصبحت مزدوجة لتمييزها عن القسمة العادية وهي متوفرة في بايثون 2.6</ | ||
+ | |||
+ | <code python> | ||
+ | 1//3*3 | ||
+ | </ | ||
+ | |||
+ | === ثلث الثلاثة واحد! === | ||
+ | جرب الآن | ||
+ | <code python> | ||
+ | 1.0/3.0*3.0 | ||
+ | </ | ||
+ | وستحصل على الجواب الذي نتوقع وهو 1.0 هكذا | ||
+ | < | ||
+ | >>> | ||
+ | 1.0 | ||
+ | </ | ||
+ | بل وحتى | ||
+ | <code python> | ||
+ | 1.0/3*3 | ||
+ | </ | ||
+ | |||
+ | ستعطي نفس الجواب. السبب هو أن نوع العدد 1.0 ليس عددا صحيحا كما في 1 بل هو عدد نسبي float (يجوز أن يحتوي كسور مثل الربع). وناتج قسمة عدد نسبي على عدد صحيح هو عدد نسبي وناتج ضرب عدد نسبي في عدد صحيح هي عدد نسبي لهذا حصلنا على الجواب 1.0. | ||
+ | |||
+ | === 2 أكبر 12! === | ||
+ | جرب الآن | ||
+ | <code python> | ||
+ | >>> | ||
+ | True | ||
+ | >>> | ||
+ | False | ||
+ | </ | ||
+ | الوضع الطبيعي أن تكون 12 أكبر من 2 كما في أول مثال لكن عندما تكون **نصوص** فيتم مقارنتها محرف محرف وهنا نحصل على النتيجة الغربية. | ||
+ | |||
+ | |||
+ | === الأولويات والأقواس === | ||
+ | تأمل الجلسة التالية على مفسر بايثون التفاعلي | ||
+ | < | ||
+ | >>> | ||
+ | -1 | ||
+ | >>> | ||
+ | 0 | ||
+ | >>> | ||
+ | -1 | ||
+ | </ | ||
+ | |||
+ | لاحظ أن أول عملية لم تتم بالترتيب الذي طبعت فيه وإنما تم تنفيذ عملية الضرب قبل الطرح لأن أولويتها أعلى. | ||
+ | |||
+ | === الاتجاه === | ||
+ | تأمل الجلسة التالية على مفسر بايثون التفاعلي | ||
+ | |||
+ | < | ||
+ | >>> | ||
+ | 512 | ||
+ | >>> | ||
+ | 64 | ||
+ | >>> | ||
+ | 512 | ||
+ | >>> | ||
+ | </ | ||
+ | بعض العمليات مثل عملية الرفع لقوة (علامتي * متتابعتين) تنفذ من اليمين لليسار. | ||
+ | |||
+ | === المتغيرات === | ||
+ | يمكنك تعريف متغيرات بواسطة عملية الإحلال assignment ورمزها علامة المساواة " | ||
+ | |||
+ | < | ||
+ | >>> | ||
+ | >>> | ||
+ | >>> | ||
+ | 3 | ||
+ | </ | ||
+ | |||
+ | ويمكنك وضع قيمة في أكثر من متغير | ||
+ | < | ||
+ | >>> | ||
+ | >>> | ||
+ | >>> | ||
+ | 4 | ||
+ | </ | ||
+ | |||
+ | ويمكنك وضع أكثر من قيمة في أكثر من متغير (إن تساوى عدد القيم والمتغيرات) | ||
+ | < | ||
+ | >>> | ||
+ | >>> | ||
+ | 7 | ||
+ | </ | ||
+ | |||
+ | |||
+ | === المزيد من الوثائق === | ||
+ | |||
+ | * http:// | ||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
+ | ==== الأنواع المبنية في بايثون ==== | ||
+ | === الأرقام والتعامل معها === | ||
+ | يمكنك تقديم الأعداد الصحيحة بأي أساس شئت مثلا يمكنك كتابتها بالنظام العشري مثل '' | ||
+ | |||
+ | تأمل هذه الجلسة | ||
+ | < | ||
+ | >>> | ||
+ | 9 | ||
+ | >>> | ||
+ | 17 | ||
+ | >>> | ||
+ | 7 | ||
+ | </ | ||
+ | |||
+ | كذلك تدعم بايثون أعداد صحيحة عملاقة تسمى long ونميزها من اللاحقة L تأمل عدد المنازل في هذا المثال: | ||
+ | < | ||
+ | >>> | ||
+ | 7888609052210118054117285652827862296732064351090230047702789306640624L | ||
+ | </ | ||
+ | |||
+ | كذلك تدعم بايثون أعداد نسبية (فيها كسور) تسمى أعداد الفاصلة العائمة float ونميزها من الفاصلة العشرية مثل واحد 1.0 أو مثل واحد ونصف 1.5 كذلك يمكنك استخدام أسلوب الفاصلة العائمة أو ما يعرف بالأسلوب " | ||
+ | < | ||
+ | >>> | ||
+ | 500.0 | ||
+ | >>> | ||
+ | 300000000.0 | ||
+ | >>> | ||
+ | 0.001 | ||
+ | >>> | ||
+ | 500000.0 | ||
+ | </ | ||
+ | |||
+ | حيث نكتب رقم ثم e أي exponential ثم القوة مثلا '' | ||
+ | |||
+ | كذلك تدعم بايثون الأعداد المركبة (التخيلية) حيث يعبر عن العدد التخيلي فيها بالرمز j هكذا | ||
+ | |||
+ | < | ||
+ | >>> | ||
+ | 5j | ||
+ | >>> | ||
+ | (1+5j) | ||
+ | >>> | ||
+ | (26+0j) | ||
+ | </ | ||
+ | |||
+ | === النصوص والتعامل معها === | ||
+ | تدعم بايثون نوعين من السلاسل النصية واحدة اسمها string وهي سلسلة من البايتات a sequence of bytes أي أنها مجرد بقعة هلامية blob من البيانات الخام. | ||
+ | |||
+ | أما الثانية فهي كائنات يونيكود unicode التي هي سلسلة من المحارف العالمية يونيكود a sequence of unicode characters ونميزها من خلال وجود علامة u قبل علامة الاقتباس. | ||
+ | |||
+ | <note tip> | ||
+ | |||
+ | يتم تمثيل النص بواسطة علامة الاقتباس المفردة أو المزدوجة ولا فرق بينهما سوى أن واحدة منهما تساعدك على تخطي حالات الخاصة يجب تخطيها في الأخرى. لاحظ هذا المثال: | ||
+ | |||
+ | < | ||
+ | >>> | ||
+ | " | ||
+ | >>> | ||
+ | 'he said: " | ||
+ | </ | ||
+ | ففي المثال الأول لزمني وضع علامة الاقتباس المفردة بين I و m فلو استخدمت الاقتباس المفرد في إحاطة السلسلة لانتهت بعد I ولكان ما بعدها خطأ في الصياغة. | ||
+ | |||
+ | كذلك الحال في الثانية حيث أريد نص تكون كلمة Hello فيه محاطة بعلامة اقتباس مزدوجة فلو كانت السلسلة النصية كلها محاطة باقتباس مزدوج لانتهى قبل كلمة Hello ولكان ما بعدها خطأ في الصياغة | ||
+ | |||
+ | < | ||
+ | >>> | ||
+ | File "< | ||
+ | ' | ||
+ | ^ | ||
+ | SyntaxError: | ||
+ | >>> | ||
+ | File "< | ||
+ | "he said: " | ||
+ | ^ | ||
+ | SyntaxError: | ||
+ | </ | ||
+ | |||
+ | يجدر بنا الإشارة أن بايثون تسمح بمتابعة النص بعلامة اقتباس مختلفة | ||
+ | < | ||
+ | >>> | ||
+ | ' | ||
+ | </ | ||
+ | |||
+ | يتم التخطي في نصوص بايثون عبر علامة سلاش المعكوسة \ حيث هناك معان خاص لما يأتي بعدها منها | ||
+ | * n - سطر جديد (محرف رقم 10 في ASCII) | ||
+ | * r - عودة لبداية السطر (محرف رقم 13) | ||
+ | * t - علامة الجدولة | ||
+ | * " - علامة اقتباس متخطاة | ||
+ | * ' - علامة اقتباس متخطاة | ||
+ | * \ - علامة \ متخطاة | ||
+ | |||
+ | < | ||
+ | >>> | ||
+ | " | ||
+ | </ | ||
+ | |||
+ | فإن كنت لا ترغب بتفعيل خاصية تخطي \ بتكرارها كل ما عليك هو وضع r قبل علامة الاقتباس (بعد u في حالة كائنات يونيكود) وهذا مفيد في تمثيل الأنماط القياسية والماسارات على نظام ويندوز. | ||
+ | |||
+ | كذلك تأتي بايثون بصيغة مفيدة جدا في تمثيل النصوص الطويلة وهي الاقتباس الثلاثي (المفرد والمزدوج) حيث يمتاز بأنه يمتدل على أكثر من سطر حتى يغلق بتتابع ثلاثة علامات معا. | ||
+ | < | ||
+ | >>> | ||
+ | ... it's a good language | ||
+ | ... and I like it.''' | ||
+ | " | ||
+ | </ | ||
+ | |||
+ | === الكائنات المنطقية bool === | ||
+ | النوع bool اختصار ل Boolean أي منطقي يعني إما صواب وإما خطأ. وهو قيمتان: | ||
+ | * True الصواب وهي تكافئ الواحد | ||
+ | * False الخطأ وهي تكافئ الصفر | ||
+ | |||
+ | لاحظ أن True و False تكتب بأحرف أولى كبيرة. | ||
+ | |||
+ | تأمل هذه الأمثلة | ||
+ | < | ||
+ | >>> | ||
+ | False | ||
+ | >>> | ||
+ | True | ||
+ | >>> | ||
+ | True | ||
+ | >>> | ||
+ | False | ||
+ | >>> | ||
+ | False | ||
+ | >>> | ||
+ | True | ||
+ | >>> | ||
+ | True | ||
+ | >>> | ||
+ | True | ||
+ | </ | ||
+ | |||
+ | <note warning> | ||
+ | |||
+ | لكن عند التحويل إلى bool هناك الكثير من الأشياء تتحول إلى True أو إلى False | ||
+ | مثلا أي عدد غير الصفر يعتبر صواب True حتى لو لم يمكن واحد | ||
+ | < | ||
+ | >>> | ||
+ | True | ||
+ | </ | ||
+ | |||
+ | === العدم None === | ||
+ | وهو كائن يمثل عدم وجود قيمة denoting lack of value | ||
+ | |||
+ | < | ||
+ | >>> | ||
+ | False | ||
+ | >>> | ||
+ | True | ||
+ | </ | ||
+ | |||
+ | * http:// | ||
+ | |||
+ | === الكائنات متعددة العناصر === | ||
+ | بايثون يدعم عدد كبير من مثل هذه الكائنات فإلى جانب السلاسل النصية لدينا الكائنات التالية: | ||
+ | |||
+ | * اللوائح lists - مجموعة من العناصر المرتبة (المتسلسلة واحدة بعد الأخرى) نميزها بعلامة القوس المربع [ ]. | ||
+ | * المرتبات tuples - كما سابقتها لكنها ثابتة العدد بل والعناصر. نميزها بالقوس الهلالي ( ). | ||
+ | * المجموعات - حيث عناصرها فريدة (لا تتكرر) غير مرتبة | ||
+ | * القواميس - مجموعة من العناصر تسمى القيم values كل واحد فيها يرتبط بمفتاح key فريد مفهرس يشير إلي. نميزها بالحاصرة { } حيث نضع علامة : بين المفتاح والقيمة. وتسمى القواميس في لغات أخرى المقاطع hash أو المنظومات المرتبطة associative array | ||
+ | |||
+ | <note tip> | ||
+ | |||
+ | في المثال التالي سنتعرف على طريقة تعريف مثل هذه الكائنات والوصول لعناصرها | ||
+ | < | ||
+ | >>> | ||
+ | >>> | ||
+ | ' | ||
+ | >>> | ||
+ | 2 | ||
+ | >>> | ||
+ | 3.0 | ||
+ | >>> | ||
+ | Traceback (most recent call last): | ||
+ | File "< | ||
+ | IndexError: list index out of range | ||
+ | </ | ||
+ | |||
+ | لاحظ أن اللائحة التي عرّفناها تتكون من 3 عناصر كل منها من نوع مختلف وهي على الترتيب سلسلة نصية ثم عدد صحيح ثم عدد نسبي. | ||
+ | كذلك لاحظ استخدام الحاصرات المربعة [ ] للوصول للعنصر علم ترتيبه حيث نضع أقل من رقمه بواحد يسمى index (وهي الإزاحة عن البداية offset يعني العد يبدأ من صفر للعنصر الأول) أي أن قيمه تكون من صفر وحتى عدد العناصر ناقس واحد فإن تجاوزت العدد تحصل عل IndexError. | ||
+ | |||
+ | كما يمكنك تقديم إزاحة سالبة وتعني عد العناصر من آخر اللائحة فيكون -1 هو آخر عنصر | ||
+ | < | ||
+ | >>> | ||
+ | >>> | ||
+ | 3.0 | ||
+ | >>> | ||
+ | 2 | ||
+ | >>> | ||
+ | ' | ||
+ | </ | ||
+ | |||
+ | لاحظ أنني في هذا المثال الأخير استخدمت المرتب tuple وذلك واضح من الأقواس الهلالية عند تعريفه. | ||
+ | |||
+ | يفضل أن تنهي تعريف المرتب بفاصلة زائدة حتى نميز حالة المرتيب ذي العنصر الواحد من حالة أقواس إعطاء الأولوية. في المثال التالي t1 ليست مرتب وإنما عدد صحيح أما t2 فهي مرتب من عنصر واحد | ||
+ | < | ||
+ | >>> | ||
+ | >>> | ||
+ | 5 | ||
+ | >>> | ||
+ | >>> | ||
+ | (5,) | ||
+ | </ | ||
+ | |||
+ | ==== الطباعة على الشاشة ==== | ||
+ | يمكنك الطباعة على الشاشة بواسطة print ثم الكائنات التي تريد طباعته يفصل بينها فاصلة "," | ||
+ | |||
+ | < | ||
+ | >>> | ||
+ | Peace! | ||
+ | >>> | ||
+ | I can count: one, 2 , three! | ||
+ | >>> | ||
+ | ... it's a good language | ||
+ | ... and I like it.''' | ||
+ | I'm using python | ||
+ | | ||
+ | and I like it. | ||
+ | >>> | ||
+ | C:\new folder | ||
+ | >>> | ||
+ | C: | ||
+ | ew folder | ||
+ | </ | ||
+ | |||
+ | المثال الأخير لم يطبع ما كنت تتوقعه حيث علامة \ متبوعة بحرف n تعني سطر جديد للحصول على ما تريد يمكنك تكرار علامة \ حتى تتخطاها أو تستعمل r قبل علامة الاقتباس. | ||
+ | |||
+ | <note tip>في بايثون 3 عبارة print أصبحة دالة أي أنها بحاجة لأقواس حول ما تريد طباعته</ | ||
+ | |||
+ | ==== طلب مدخلات raw_input ==== | ||
+ | |||
+ | الدالة raw_input تعرض محث لاستلام مدخلات ثم تعيد سلسلة نصية | ||
+ | |||
+ | <code python> | ||
+ | >>> | ||
+ | Enter your name: Ahmad | ||
+ | >>> | ||
+ | Hello Ahmad | ||
+ | </ | ||
+ | |||
+ | إذا كنت تريد قيمة عددية صحيحة يمكنك التحويل عبر int مثلا | ||
+ | <code python> | ||
+ | >>> | ||
+ | Enter width: 15 | ||
+ | >>> | ||
+ | Enter hieght: 2 | ||
+ | >>> | ||
+ | Area= 30 | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== المساعدة الآنية ==== | ||
+ | يمكنك طلب المساعدة حول أي كائن (بما في ذلك الدوال والوحدات) | ||
+ | |||
+ | <code python> | ||
+ | help(sum) | ||
+ | l=[1,2,3] | ||
+ | help(l) | ||
+ | </ | ||
+ | |||
+ | ==== تفعيل الإكمال التلقائي ==== | ||
+ | كتابة السطرين التاليين في مفسر بايثون التفاعلي يفعّل الإكمال التلقائي عبر زر TAB | ||
+ | <code python> | ||
+ | import readline, rlcompleter | ||
+ | readline.parse_and_bind(" | ||
+ | </ | ||
+ | |||
+ | لتفعيل الإكمال التلقائي ذاتيا في المفسر التفاعلي اكتب | ||
+ | |||
+ | <code bash> | ||
+ | echo ' | ||
+ | echo ' | ||
+ | source ~/.bashrc | ||
+ | </ | ||
+ | |||
+ | عندها سيُفعّل ذلك في الطرفية الحالية وكل الطرفيات التي تفتح بعد ذلك. | ||
+ | |||
+ | عيوب هذه الطريقة أنه عندها لا يمكنك استعمال TAB كجزء من الكود بل يجب استخدام المسافة لعمل الإزاحة البادئة (لكن هذا ليس بشيء حيث ينصح بشكل عام بعدم الخلط بين الاثنتين والاكتفاء بالمسافة لأن مقدار إزاحة TAB غير ثابت في كل المحررات) | ||
+ | |||
+ | ==== برنامج ipython ==== | ||
+ | يقدم مفسر بايثون التفاعلي المحسن ipython العديد من المزايا مثل الإكمال التلقائي بواسطة زر الجدولة TAB. كذلك تدعم تصفح الكود ملونا وتمحيص البرنامج debug وتحليله profile وغيرها من المزايا. | ||
+ | |||
+ | |||
+ | * [[http:// | ||
+ | |||
+ | ===== استخدام الوثائق ===== | ||
+ | موقع بايثون غني بالوثائق وهي أيضا موجودة للتصف دون إنترنت من خلال نسخة محلية موجودة على جهازك | ||
+ | |||
+ | * الصفحة الرئيسية | ||
+ | * على النت http:// | ||
+ | * دون نت / | ||
+ | * التعليمية | ||
+ | * على النت http:// | ||
+ | * دون نت / | ||
+ | * قائمة الحزم والوحدات | ||
+ | * على النت http:// | ||
+ | * دون نت / | ||
+ | |||
+ | مع تغير الرقم 2.7 إلى رقم إصدار بايثون | ||
+ | |||
+ | <note tip> | ||
+ | محرك البحث في الوثائق المحلية يعمل دون اتصال بالإنترنت | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | إن لم تجد تلك الملفات موجودة قد تكون الحزمة python-docs غير مثبتة أو مثبتة في مكان مختلف راجع مدير الحزم في نظام التشغيل عندك. | ||
+ | </ | ||
+ | |||
+ | كذلك يوجد نظام مساعدة تفاعلي مبني في بايثون يمكن تشغيله على شكل خادم محلي (لا يحتاج أباتشي أو أي خادم آخر) فقط اكتب pydoc -p ثم اتبعها برقم المنفذ ثم افتح العنوان الذي يعطيك إياه في متصفح الإنترنت | ||
+ | |||
+ | <code bash> | ||
+ | [alsadi@localhost ~]$ pydoc -p 4321 | ||
+ | pydoc server ready at http:// | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== بيئات التطوير ===== | ||
+ | ==== بيئة الكسوف الشمسي Eclipse ==== | ||
+ | هناك إضافة اسمها PyDev لبيئة التطوير Eclipse. قم بتثبيت تلك الحزمة (في فيدورا/ | ||
+ | |||
+ | بعد تثبيت الحزمة (سواء في لينكس أو ويندوز) عليك إخباره عن مسار مفسر لغة بايثون وذلك بالخطوات التالية: | ||
+ | |||
+ | من قائمة Window اختر التفضيلات Preferences ثم بند python interpreter ثم New ثم حدد المسار ليكون '' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | المسارات الموجودة في أسفل النافذة هي للحزم الإضافية الخاصة بلغة بايثون حيث يقوم بسبرها لعمل إكمال تلقائي حقيقي. الإكمال التلقائي يعمل عبر ضغط CTRL مع مسافة. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | لإنشاء برنامج جديد اذهب إلى قائمة ملف File ثم جديد new ثم Pydev project ثم أضف ملفات الوحدات والحزم بالنقر بالزر الأيمن على مجلد src في القائمة الجانية للمشروع ثم جديد new ثم Pydev module و Pydev Package | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | يمكنك التعرف على المفاتيح السريعة من خلال نافذة window ثم تفضيلات preference ثم انظر إلى keys كما في الصورة | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | مثلا: | ||
+ | * لتشغيل البرنامج اضغط F9 | ||
+ | * لتعيين نقطة توقّف لتمحيص البرنامج اضغط CTRL مع F11 ثم اختر add a break point | ||
+ | * للتشغيل في طور التمحيص debug اضغط F11 | ||
+ | * للسير خطوة F5 أو F6 الأولى تمحص داخل التفرعات step into والثانية تتخطى للخطوة التالية مباشرة | ||
+ | * للسير حتى أول نقطة توقف اضغط F8 | ||
+ | |||
+ | للعودة إلى منظور التطوير والخروج من منظور التمحيص انقر على أيقونة الثعابين pydev تجدها في الطرف البعيد من شريط الأدوات. وللعودة مرة أخرى لمنظور التمحيص انقر على أيقونة التحميص debug وهي على شكل حشرة. | ||
+ | |||
+ | ==== بيئة PyScripter لنظام ويندوز ==== | ||
+ | من أفضل وأخف البيئات المتوفرة وهي مكتوبة على لغة دلفي مما يجعلها حصرية لنظام ويندوز | ||
+ | |||
+ | * http:// | ||
+ | ===== كتابة برنامج ===== | ||
+ | ==== حفظ الملف وتشغيله ==== | ||
+ | ==== التحكم في انسياب البرنامج ==== | ||
+ | === الشرط if === | ||
+ | === حلقات for التكرارية === | ||
+ | === حلقات for المضمنة === | ||
+ | الكود التالي يولد أول 10 مربعات كاملة من 0×0 حتى 9×9 | ||
+ | < | ||
+ | >>> | ||
+ | [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] | ||
+ | </ | ||
+ | |||
+ | تأمل الكود التالي | ||
+ | < | ||
+ | >>> | ||
+ | >>> | ||
+ | >>> | ||
+ | [' | ||
+ | >>> | ||
+ | [' | ||
+ | >>> | ||
+ | [[' | ||
+ | >>> | ||
+ | [' | ||
+ | </ | ||
+ | === التكرار بواسطة " | ||
+ | === الاستثناءات exceptions === | ||
+ | <code python> | ||
+ | a=int(' | ||
+ | b=int(' | ||
+ | </ | ||
+ | |||
+ | <code python> | ||
+ | a=int(' | ||
+ | try: b=int(' | ||
+ | except ValueError: print " | ||
+ | </ | ||
+ | |||
+ | ==== الدوال functions ==== | ||
+ | === التعريف والاستدعاء === | ||
+ | لتعريف دالة اكتب def ثم اسم الدالة ثم بين قوسين المعاملات ثم نقطتان رأسيتان مثلا | ||
+ | |||
+ | <code python> | ||
+ | def hello(n): | ||
+ | print " | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | لاحظ أن المسافة البادئة هي التي تحديد الكود التابع للدالة. لاستدعاء الدالة نكتب اسم الدالة ثم بين قوسين نمرر لها المعاملات. | ||
+ | إليك هذه الجلسة | ||
+ | <code python> | ||
+ | >>> | ||
+ | ... print " | ||
+ | ... | ||
+ | >>> | ||
+ | Hello, ali!! | ||
+ | </ | ||
+ | |||
+ | === تمرير المعاملات === | ||
+ | |||
+ | يمكن أن نعطي المعاملات قيمة تلقائية حتى نجعلها اختيارية تأمل هذه الجلسة: | ||
+ | |||
+ | <code python> | ||
+ | >>> | ||
+ | ... print " | ||
+ | ... | ||
+ | >>> | ||
+ | Hello, ali!! | ||
+ | >>> | ||
+ | Hello, world!! | ||
+ | </ | ||
+ | |||
+ | المعاملات التي لا قيمة تلقائية لها يجب أن تسبق التي لها قيمة تلقائية هكذا | ||
+ | |||
+ | <code python> | ||
+ | def test(a, | ||
+ | print a,b,c,d | ||
+ | </ | ||
+ | |||
+ | في المثال السابق لا تستطيع استدعاء الدالة test بأقل من معاملين فإن مررت لها معاملين سيذهبان لملئ a ثم b على الترتيب والبقية ستأخذ القيمة التلقائية فإن زدت معامل سيذهب الثالث للمعامل c وتأخذ d القيمة التلقائية. | ||
+ | |||
+ | يمكنك تمرير معامل في غير مكانه عبر تحديد اسمه | ||
+ | |||
+ | <code python> | ||
+ | >>> | ||
+ | ... print a,b,c,d | ||
+ | ... | ||
+ | >>> | ||
+ | 1 2 3 4 | ||
+ | >>> | ||
+ | 1 2 3 4 | ||
+ | </ | ||
+ | |||
+ | يمكن للدوال أن تأخذ عدد غير محدود من المعاملات عبر وضع * قبل اسم متغير بهذا يحتوي ذلك المتغير كل ما بقي من معاملات على شكل قائمة list | ||
+ | |||
+ | <code python> | ||
+ | def printargs(*a): | ||
+ | for i in a: print i | ||
+ | </ | ||
+ | |||
+ | تأمل هذه الجلسة | ||
+ | |||
+ | <code python> | ||
+ | >>> | ||
+ | ... print a,b,c | ||
+ | ... | ||
+ | >>> | ||
+ | 1 2 (3, 4, 5, 6, 7) | ||
+ | </ | ||
+ | |||
+ | كذلك يمكن الحصول على تلك المعاملات على شكل قاموس مفاتيحه وقيمها هي اسماء المتغيرات وقيمها على الترتيب بوضع نجمتين قبل اسم المتغير القاموس هكذا | ||
+ | |||
+ | <code python> | ||
+ | def test(**kw): | ||
+ | print kw | ||
+ | </ | ||
+ | |||
+ | تأمل هذه الجلسة | ||
+ | |||
+ | <code python> | ||
+ | >>> | ||
+ | ... print kw | ||
+ | ... | ||
+ | >>> | ||
+ | {' | ||
+ | </ | ||
+ | |||
+ | إليك مثال عام جدا يأخذ خليط من جميع الطرق السابقة | ||
+ | <code python> | ||
+ | def test(a, | ||
+ | print a, | ||
+ | </ | ||
+ | |||
+ | تأمل هذه الجلسة | ||
+ | <code python> | ||
+ | >>> | ||
+ | 1 2 3 4 5 () {} | ||
+ | >>> | ||
+ | 1 2 3 4 -5 () {} | ||
+ | >>> | ||
+ | 1 2 3 4 5 (6, 7, 8, 9, 10) {} | ||
+ | >>> | ||
+ | 1 2 3 4 5 () {' | ||
+ | >>> | ||
+ | 1 2 3 4 5 (6, 7) {' | ||
+ | </ | ||
+ | |||
+ | === الأفق scope والمتغيرات العامة global variables === | ||
+ | في لغات البرمجة هناك ما يعرف بأفق المتغيّرات scope وهو مدى مرئية ذاك المتغيّر في أجزاء البرنامج المختلفة. | ||
+ | |||
+ | |||
+ | |||
+ | السلوك التلقائي في بايثون أن المتغيّر الذي تعرفه خارج الدالة في أفق ما يكون منظور للقراءة فقط داخل الدوال الفرعية. لاحظ في هذا المثال أن x المعرفة خارج الدالة printx كانت مرئية داخلها | ||
+ | |||
+ | < | ||
+ | >>> | ||
+ | >>> | ||
+ | ... | ||
+ | >>> | ||
+ | 5 | ||
+ | </ | ||
+ | |||
+ | |||
+ | أما ما تعطيه قيمة داخل الدالة الفرعية (بالإحلال) فإنه يكون متغيرا محليا لا يعيش خارج ذلك الأفق. ففي هذا المثال الدالة setx دالة تضع القيمة التي نمررها لها في المتغير x وهذا يعني ضمنا أن x متغيّر محلي لا علاقة له مع المتغيرات التي لها نفس الاسم خارج الدالة. | ||
+ | |||
+ | < | ||
+ | >>> | ||
+ | ... | ||
+ | >>> | ||
+ | >>> | ||
+ | >>> | ||
+ | 5 | ||
+ | </ | ||
+ | |||
+ | إن أردت تغيير هذا السلوك التلقائي كل ما عليك هو إعلان أن المقصود هو المتغير العام global variable عبر استخدام global ثم اسم المتغير هكذا قارن المثال السابق مع التالي: | ||
+ | |||
+ | < | ||
+ | >>> | ||
+ | ... | ||
+ | >>> | ||
+ | >>> | ||
+ | >>> | ||
+ | 15 | ||
+ | </ | ||
+ | |||
+ | === تعديل المعاملات === | ||
+ | كما لاحظنا سابقا فإن المتغيرات المحلية local variables بما فيها المعاملات لا تتعدى أفقها فإن مررت متغير لدالة ثم غيرته داخل الدالة فإنه لا يتغير خارجها | ||
+ | <code python> | ||
+ | >>> | ||
+ | ... | ||
+ | ... | ||
+ | >>> | ||
+ | >>> | ||
+ | >>> | ||
+ | [1, 2, 3] | ||
+ | </ | ||
+ | تأمل الفرق بين الجلسة السابقة والتالية | ||
+ | <code python> | ||
+ | >>> | ||
+ | ... del a[:] | ||
+ | ... a.extend([9, | ||
+ | ... | ||
+ | >>> | ||
+ | >>> | ||
+ | >>> | ||
+ | [9, 8, 7] | ||
+ | </ | ||
+ | |||
+ | عند تمرير متغير لدالة فإنه يتم عمل متغير محلي يحتوي على مرجع أو إشارة للكائن الأصلي فإن قمت بعملية إحلال عبر = فإنك تجعل المحلي يشير لكائن جديد في حين لو قمت باستدعاء طرق methods تغير من قيمة نفس الكائن مثل del أو a.pop أو a.append أو a.extend فإنك تعدل على نفس الكائن | ||
+ | |||
+ | |||
+ | === عملية yield والكائنات المولدة generators === | ||
+ | |||
+ | === الدوال الضمنية lambda === | ||
+ | |||
+ | ==== أساسيات مكتبة بايثون القياسية ==== | ||
+ | |||
+ | |||
+ | |||
+ | ==== العمليات على الكائنات متعددة العناصر ==== | ||
+ | ==== الفئات classes ==== | ||
+ | ===== تتبع الأخطاء ===== | ||
+ | فهم error trace | ||
+ | |||
+ | ===== توثيق البرنامج ===== | ||
+ | |||
+ | ===== التعامل مع الملفات ===== | ||
+ | ===== عناصر مكتبة بايثون القياسية المتقدمة ===== | ||
+ | ==== وحدة re الخاصة بالأنماط القياسية ==== | ||
+ | ===== كتابة وحدة module ===== | ||
+ | ===== كتابة حزمة package ===== | ||
+ | |||
+ | ===== وحدات وحزم إضافية ===== | ||
+ | |||
+ | <note tip> | ||
+ | |||
+ | ==== موقع فهرس الحزم PyPI ==== | ||
+ | |||
+ | يعتبر موقع PyPI أي Python Package Index أول مكان تبحث فيه عن حزم إضافية. يمتاز هذا الموقع بأنه يحتوي على صندوق بحث ويحتوي على معلومات مثل رابط آخر إصدارة أو رابط الوثائق ويبين درجة نضوج الحزمة. | ||
+ | |||
+ | قد يوفر لك هذا الموقع روابط exe أو حزم rpm لكنه في الغالب يوفر كود مصدري في أرشيف zip أو tarball بعد فك ضغطه ادخل المجلد واكتب | ||
+ | < | ||
+ | python setup.py install | ||
+ | </ | ||
+ | |||
+ | <note warning> | ||
+ | |||
+ | ==== استخدام مستودعات التوزيعة ==== | ||
+ | من أكثر أساليب التثبيت سهولة هو استخدام مدير الحزم الخاص بتوزيعتك مثلا لتثبيت حزمة lxml في فيدورا (وبالتالي أعجوبة) اكتب | ||
+ | <code bash> | ||
+ | yum install python-lxml | ||
+ | </ | ||
+ | أو في ديبيان (وبالتالي أوبنتو) اكتب | ||
+ | <code bash> | ||
+ | apt-get install python-lxml | ||
+ | </ | ||
+ | |||
+ | من الحزم الشائعة التي أفضل تثبيتها من مدير الحزم هي التالية وذلك أنها ليست حزم بايثونية صرفة بل تحتوي كود بلغة سي وتحتاج تصنيف لذا جلبها من مستودعات توزيعتك يوفر عليك عناء تصنيفها | ||
+ | |||
+ | <code bash> | ||
+ | yum install python-pip python-pillow python-lxml python-psutil python-simplejson python-ldap python-crypto python-pwquality PyYAML MySQL-python python-psycopg2 libxslt-python python-greenlet python-gevent | ||
+ | </ | ||
+ | |||
+ | ==== مدير حزم بايثون pip و easy_install و wheel ==== | ||
+ | |||
+ | أداة '' | ||
+ | |||
+ | سابقا لم يكن '' | ||
+ | |||
+ | <code bash> | ||
+ | yum install python-setuptools python-pip | ||
+ | pip install wheel | ||
+ | </ | ||
+ | |||
+ | إذا كانت توزيعتك لا تأتي ب '' | ||
+ | |||
+ | <code bash> | ||
+ | easy_install pip | ||
+ | pip install wheel | ||
+ | </ | ||
+ | |||
+ | يمكنك pip من تثبيت الحزم سواء في النظام أو في بيت المستخدم (عبر '' | ||
+ | |||
+ | <note warning> | ||
+ | |||
+ | على الخوادم يمكنك فصل كل تطبيق في مستخدم وتثبيت متطلبات التطبيق في بيته مثلا اكتب الأمر التالي بصلاحيات المستخدم العادي (وليس الجذر) صاحب التطبيق | ||
+ | |||
+ | < | ||
+ | pip install --help | ||
+ | pip install --user django | ||
+ | pip install --user -r requirements.txt | ||
+ | </ | ||
+ | |||
+ | حيث '' | ||
+ | |||
+ | <note warning> | ||
+ | |||
+ | === التثبيت في صندوق الرمل! === | ||
+ | |||
+ | لنفرض أنك مطور تعمل على مشروعين الأول يعتمد على الإصدار الأول (دون الثاني) من حزمة ما والثاني على الإصدار الثاني (دون الأول) فإذا ثبت تلك الحزمة فالنظام فأي إصدار ستختار. الحل هو وضع كل مشروع في مجلد يكون فيه اكتفاء ذاتي من المكتبات يسمى البيئة الافتراضية (لا تخف لا يوجد عملية محاكاة فقط يتم تحديد مسارات غير مسارات النظام). حتى تستطيع عمل ذلك أولا ثبت حزمة virtualenv من خلال pip بصلاحيات الجذر | ||
+ | |||
+ | <code bash> | ||
+ | pip install virtualenv | ||
+ | </ | ||
+ | |||
+ | الآن لعمل مجلد بيئة افتراضية خاصة بمشروع جديد كل ما عليك هو كتابة الأمر التالي كمستخدم دون صلاحيات | ||
+ | |||
+ | < | ||
+ | virtualenv --no-site-packages mypyenv | ||
+ | </ | ||
+ | |||
+ | الأمر السابق يعمل بيئة نظيفة خالية لا تستفيد من حزم النظام. لكن أنا أفضل أن أستفيد منها (إذا كنت أعرفها وأعرف أنها لا تتضارب مع مشروعي) | ||
+ | |||
+ | < | ||
+ | virtualenv --system-site-packages mypyenv | ||
+ | </ | ||
+ | |||
+ | |||
+ | لتفعيل تلك البيئة الافتراضية اكتب | ||
+ | |||
+ | < | ||
+ | cd mypyenv | ||
+ | source bin/ | ||
+ | </ | ||
+ | |||
+ | وأثناء تفعيل تلك البيئة استعمل '' | ||
+ | |||
+ | ولإلغاء تفعيلها اكتب | ||
+ | |||
+ | < | ||
+ | deactivate | ||
+ | </ | ||
+ | |||
+ | === نقل وإعادة اساتخدام الحزم === | ||
+ | |||
+ | لتوفير عناء تنزيل الحزم من الإنترنت لكل مشروع أو لتجيد إصدارات (لتضمن أنه نفس الإصدار الذي جربته) أو لدعم التثبيت دون إنترنت وغير تلك الأسباب نستخدم ميزة '' | ||
+ | |||
+ | <code bash> | ||
+ | mkdir ~/wheel/s | ||
+ | pip wheel -w ~/wheels Django | ||
+ | pip wheel -w ~/wheels Django==1.7 | ||
+ | pip wheel -w ~/wheels -r requirements.txt | ||
+ | </ | ||
+ | |||
+ | بهذا يتم تثبيت أرشيف الحزم في مجلد wheels الذي حددناه بالخيار w. لاحظ أنه يمكننا تثبيت أكثر من إصدار من الأرشيف. | ||
+ | |||
+ | لاحقا لتثبيت حزمة دون إنترنت استعمل الخيار no-index مع تمرير مسار مجلد الأرشيفات بعد find-links لكن أولا فعّل البيئة الافتراضية ثم اكتب | ||
+ | |||
+ | <code bash> | ||
+ | pip install --no-index --find-links=~/ | ||
+ | pip install --no-index --find-links=~/ | ||
+ | </ | ||
+ | |||
+ | === ملخص وجلسة كمثال === | ||
+ | اكتب بصلاحيات الجذر | ||
+ | |||
+ | <code bash> | ||
+ | yum install python-pip python-pillow python-lxml python-psutil python-simplejson python-ldap python-crypto python-pwquality PyYAML MySQL-python python-psycopg2 libxslt-python python-greenlet python-gevent | ||
+ | pip install wheel virtualenv | ||
+ | </ | ||
+ | |||
+ | الآن كمستخدم عادي | ||
+ | |||
+ | <code bash> | ||
+ | mkdir ~/wheels | ||
+ | pip wheel -w ~/wheels Django==1.8 | ||
+ | virtualenv --system-site-packages proj1 | ||
+ | cd proj1 | ||
+ | source ./ | ||
+ | pip install --no-index --find-links=~/ | ||
+ | django-admin | ||
+ | django-admin startproject myproj | ||
+ | cd myproj | ||
+ | ./manage.py runserver | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== التكامل مع لغة سي عبر Cython ===== | ||
+ | ===== التكامل مع لغة جافا عبر Jython ===== | ||
+ | ===== مفسرات استثنائية غريبة ===== | ||
+ | ==== مفسر بايثون المكتوب على بايثون PyPy ==== | ||
+ | |||
+ | ==== مفسر بايثون المكتوب على جافاسكربت ==== | ||
+ | تشغيل بايثون باستعمال جافاسكربت يعني إمكانية كتابة برامج بايثون وتنفيذها على المتصفح دون وجود خادم. هذا ما يقوم به [[http:// | ||
+ | CTRL+ENTER | ||
+ | يمكنك زيارة الموقع | ||
+ | * http:// | ||
+ | |||
+ | ===== عمل حزم rpm و deb ===== | ||
+ | ===== عمل ملفات تنفيذية exe لنظام ويندوز ===== |
docs/python_basics.txt · آخر تعديل: 2015/08/14 17:42 بواسطة alsadi