الجمعة، 11 مايو 2012

سلسلة تعلم لغة بايثون الحلقة الرابعة

في هذه الحلقة سنتعلم المكتبات libraries
الموديولز modules
و الصفوف classes

اولا:المكتبات:
المكتبة هي أصلا عبارة عن موديول module و لكنها تأتي مع بايثون او تكون مشهورة و المكتبة هي وسيلة تعطينا فيها اوامر و أدوات جديدة للبرمجة مثل الاتصال بالانترنت او العمل على الملفات او النصوص او الرياضيات

ثانيا:الموديولز:
هي عبارة عن ملفات بايثون خارجية تستطيع اضافتها الى ملف مشروعك الأساسي

ثالثا:الصفوف:
و هي اداة تستخدم للتحكم بالأشياء و الكائنات

سنفهم عن طريق الأمثلة

اولا المكتبات:
انا اريد ان اجعل برنامجي يتصل بالانترنت فماذا افعل؟
بايثون يتيح لنا ذلك عن طريق مكتبتي
urllib
urllib2
و نستدعي المكتبات عن طريق الأمر
import
مثال

import urllib
import urllib2
او
import urllib,urllib2
الان اضفنا المكتبات 
الان لنرى ما هي الأوامر التي نستطيع ان نعمل بها
اولا: مثال عن المكتبات :
مكتبة urllib
من اهم اوامرها الأمر
urlopen(url,proxies={})

 و هذا الأمر يقوم بفتح و انشاء اتصال الى الانترنت
نلاحظ ان هذا الأمر يأخذ متغيرين
الأول هو url
و هو العنوان الالكتروني للموقع
و الثاني هو proxies
, و هي للبروكسي
مثلا اذا أردت ان انشئ اتصالا الى موقع غوغل بدون بروكسي نقوم بكتابة الأمر التالي
x=urllib.urlopen("http://www.google.com",proxies={})
نلاحظ هنا اننا قمنا بوضع اسم المكتبة الخاصة بهذا الأمر قبل الأمر 
لأننا استدعينا المكتبة بشكل عام و لم نستدعي اوامرها بشكل خاص و سأشرح ذلك لاحقا
الان انشأنا اتصال الى غوغل
 و هو المتغير اكس
الان لنقرأ الرد من السيرفر نستخدم الأمر read()
مثال:
y=x.read()
 هنا اسندنا قيمة الرد للمتغير y
الان اذا كتبنا الأمر print y سيكون الناتج السورس لصفحة الانترنت
print y 
>> <html>......</html>
و هو سورس صفحة الانترنت الان لنحفظ هذا السورس في ملف html لفتحه بالنتصفح نقوم بكتابة السورس الى الملف
مثال
z=open("home.html","w")
z.write(y)
z.close()
في أول سطر نستخم الأمر open() لفتح ملف
الأمر open() يأخذ متغيرين الأول اسم الملف و الثاني نوع الفتح للقراءة ام الكتابة على الملف
نستخدم r للقراءة فقط و w للكتابة
و أعطينا قيمة الكائن الملف الى z
ثم نستخدم الأمر write()
للكتابة الى الملف
و هو يأخذ متغير واحد و هو البيانات الذي سيكتبها للملف
ثم نغلق الملف بالأمر close()
الأهمية في اغلاق الملف بأن النظام سيعرف ان الملف لم يعد ضروريا و هو ليس في قيد الاستخدام فتستطيع عمليات اخرى العمل عليه
اذا في النهاية أصبح الكود كله كالتالي
import urllib
x=urllib.openurl("http://www.google.com",proxies={})
y=x.read()
z=open("home.html","w")
z.write(y)
z.close()
 الان اذهب الى مجلد بايثون و ابحث عن ملف اسمه home.html
و افتحه ستجد انها صفحة غوغل الرئيسية
اذا هذا هو اول مثال عن المكتبات و سنشرح المزيد من المكتبات في حلقات لاحقة
اما مكتبة urllib2 فهي مكتبة أحدث من مكتبة urllib سأشرحها لاحقا
ثانيا : الموديولز :
الموديولز هي ملفات بايثون .py خارجية نستطيع ان نضيفها الى ملف بايثون الأصلي عندنا
مثلا
عندنا ملفين بايثون الأول اسمه
1.py
و الثاني
2.py
داخل الملف 1 يوجد متغير اسمه x  و انا اعمل على الملف 2 و أريد ان أأخذ قيمة المتغير x من الملف 1
فنقوم باستدعائه كما المكتبات و لكن يجب ان يكون الملفان في نفس المجلد
مثال
import 1
هنا استدعينا الملف 1
الان نريد ان نسندقيمة المتغير x في الملف 1 الى المتغير y في الملف 2
نقوم بكتابة الأمر التالي
y=1.x
مثال كامل :
في الملف 1 يوجد الكود التالي
x="hi"
في الملف 2 يوجد الكود التالي
import 1
y=1.x
print y
>> hi
اولا في الملف 1 يوجد المتغير x قيمته كلمة hi
في الملف 2
استدعينا الملف 1
عينا قيمة x من  الملف 1 الى المتغير y
قمنا بطباعة قيمة y
فالنتيجة كلمة hi
و نستطيع ان نأخذ الخاصيات و الصفوف من الموديولز الأخرى ليس فقط المتغيرات
مثال
في الملف 1 الكود التالي:
 def fun():
print "1"
في الملف 2
import 1
 1.fun()
>>1
هنا في الملف 1 عينا خاصية اسمها fun تطبع النص 1
في الملف 2 استدعينا الملف 1
ثم استدعينا الخاصية من الملف 1
و التي بدورها تطبع النص 1
و النتيجة هي 1


ثالثا الصفوف:
فورا الى الأمثلة

class bank(money):
al7esab=money
def add(X):
al7esab=al7esab+x
def withdraw(y):
al7esab=al7esab-y
def alraseed():
print str(al7esab)
7esab1=bank(500)
7esab1.add(300)
7esab1.alraseed()
>>800
7esab1.withdraw(100)
7esab1.alraseed()
>>700
7esab2=bank(400)
7esab2.add(100)
7esab2.alraseed()
>>500
7esab2.withdraw(500)
7esab2.alraseed()
>>0
7esab1.alraseed()
>>700
 هذا الكود بقدر طوله بقدر سهولته
اولا نقوم بتعيين الصف بكلمة class
و هنا عينا صف اسمه 
 bank
نلاحظ انه يأخذ متغير money و هو قيمة للحساب
و هو اوبجيكت او شيء له خواص
الخاصيات هم 
add()
 لإضافة اموال للرصيد
تأخذ متغير واحد و هو قيمة الزيادة
withdraw()
 لسحب اموال من الرصيد
تأخذ متغير واحد و هو لقيمة السحب
alraseed()
لطباعة الرصيد
لا تأخذ اي متغيرات هي تقوم فقط باظهار قيمة الرصيد
و متغير واحد هو al7esab و هو يحمل قيمة الرصيد
ثم عينا اوبجيكت اسمه  7esab1
و هو من صف bank
اي يحمل جميع الخواص bank
قيمته الابتدائية
 500
قمناباستدعاء الخاصية add و اعطيناها قيمة 300
ثم استدعيينا الخاصية alraseed لطباعة قيمة الرصيد فأصبحت 800
ثم استدعينا الخاصصية withdraw  و أعطيناها القيمة 100
فاستدعينا الخاصية alraseed لنتبين ما هو الرصيد فأصبح 700
ثم عينا كائن جديد
al7esab2
نلاحظ انه لا علاقة بالحساب الأول للحساب الثاني اذا لا يؤثران على بعضهما حتى ولو كانو من نفس الصف
و نستطيع تعيين عدد غير محدد من الكائنات من صف bank
اذا اعطيناه القيمة الابتدائية
400
استدعينا الخاصية add و أعطيناها القيمة 100
ثم استدعينا الخاصية alraseed لبيان الرصيد فأصبح الرصيد 500
ثم استدعينا الخاصية withdraw و اعطيناها القيمة500
ثم استدعينا الخاصية alraseed مجددا و اذا بالرصيد 0

ثم استدعينا الخاصية alraseed  للكائن حساب 1 7esab 1
نلاحظ ان القيمة 700 لم تتغير
اذا الصف هو يستطيع صنع كائنات لها خواص لسهولة البرمجة
يتبع



هناك تعليق واحد:

لديك شيء لتقوله؟

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.