Learning Python - step by step

هنا توجد كل المواضيع المتعلقة بالبرمجيات المفتوحة المصدر

المشرف: Karam

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » السبت فبراير 12, 2011 8:12 pm

global Object in Python



يمكننا استخدام المتحولات العامّة داخل التوابع ويصبح بإمكاننا التعديل عليها أيضاً .. عن طريق التصريح عن وجود متحول عام باستخدام التعليمة global


مثال ( 1 ):
CODE: تحديد الكل
x = 100

def func( ):
    global x
    print x
    x = 25

func( )
print x


الخرج:
CODE: تحديد الكل
100
25




مثال ( 2 ):
CODE: تحديد الكل
x = 100

def func( ):
    x = 25
    global x
    print x

func( )
print x


الخرج:
CODE: تحديد الكل
25
25



انتبهو إلى أهمية مكان التعليمة global (شفتو الفرق بين المثالين السابقين كان بسبب مكان التعليمة)
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » السبت فبراير 12, 2011 8:29 pm

inner function in Python



المقصود هو امكانية تعريف تابع داخل تابع آخر


صورة


مثال :
CODE: تحديد الكل
def outer_func( ):
    x = 2
    print x # 2

    def inner_func( ):
        print x + 1 # 3

    inner_func( )
    print x # 2


outer_func( )


الخرج:
CODE: تحديد الكل
2
3
2
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » السبت فبراير 12, 2011 8:36 pm

البرنامج ( 17 ) بلغة بايثون

اسم الملف:
C.py


الوظيفة:
كتابة تابعة اسمه printf يقوم بنفس عمل printf في لغة C


الكود:
CODE: تحديد الكل
def printf(strings, *args):
    import sys
    sys.stdout.write(strings % args)


x = 1
y = 1.231

printf("%d + %3.3f = %3.3f", x, y, x + y)


الخرج:
CODE: تحديد الكل
1 + 1.231 = 2.231
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » الأحد فبراير 13, 2011 11:26 pm

Unknown arguments in Python


يمكننا تمرير وسائط ديناميكية لأيّ تابع عن طريق استخدام تقنيّة dictionary
طريقة تعريف تابع يأخذ عدد من الوسائط غير المعرّفة كالتالي:
CODE: تحديد الكل
def <function name> ( **<Unknown> ):
    #processing



مبدأ عملها :

تقوم بأخذ الـ argument ** وتضعه في dictionary
مفاتيحها هي أسماء الوسائط
قيّمها هي قيّم الوسائط


مثال ( 1 ):
CODE: تحديد الكل
def Add(**Unknown_args):
    base = 0
    for arg in Unknown_args:
        base += Unknown_args[arg]
   
    return base


x = Add(x = 50, y = 100, z = 1.5)
print x


الخرج:
CODE: تحديد الكل
151.5



مثال ( 2 ) :
CODE: تحديد الكل
def mail(**person):
    for key in person.keys( ):
        print "{0} : {1}".format(key, person[key])

mail( )
print "-*-"

mail(karam = "example@karam.com")
print "-*-"

mail(karam = "example@karam.com", Sola = "example@sola.com")
print "-*-"

mail(karam = "example@karam.com", Sola = "example@sola.com", Python = "example@python.com")
print "-*-"


الخرج:
CODE: تحديد الكل
-*-
karam : example@karam.com
-*-
karam : example@karam.com
Sola : example@sola.com
-*-
Python : example@python.com
karam : example@karam.com
Sola : example@sola.com
-*-
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » الاثنين فبراير 14, 2011 5:13 am

Files I/O in Python


تتعامل لغة Python مع كلّ أنواع الملفات .. سواءاً أكانت نصيّة أم ثنائية أم تنفيذية أم .. الخ
تؤمّن طريقة سهلة جداً لاستخدام الملفات وبطريقة آمنة (آمنة في حال حدوث أخطاء في الـ run time - من ناحية ضياع البيانات)

يوجد لدينا Class اسمه open وهو الذي يقوم بكل عمليات الدخل والخرج النظامية على الذاكرة طويلة الأمد

كما نعلم أنّ للملف مفوهم منطقي (برمجي) وآخر فيزيائي (محسوس) ..
الجزء المنطقي : فهو عبارة عن Object من Class open
أمّا الأخير فهو مسار الملف (الـ path)

طريقة تعريف Object (ملف منطقي) يؤشر على ملف فيزيائي

CODE: تحديد الكل
open(<path of the file>, <mode>)


مثال ( 1 ):
في هذا المثال سنقوم بقراءة ملف test.txt دفعة واحدة (يعني أنّ نأخذ كل محتويات الملف دفعة واحدة)
وذلك عن طريق التابع read حيث يقوم بقراءة كل محتويات الملف وردّها بـ string واحدة
ثم نغلق الملف بشطل نظامي عن طريق تابع close

CODE: تحديد الكل
f = open('test.txt', 'r')
text = f.read( )
f.close( )

print text


يوجد لدينا توابع أخرى للقراء من ملف وأهمها readline و readlines
  • readline
    يقوم بقراءة سطر واحد - ثم يقف عن القراءة حتى يأتي أمر أخر بإكمال القراءة أو إغلاق الملف
    وعندما ينتهي الملف فإنها لا تردّ السطر .. بل تردّ سطر مكوّن من صفر محرف (string فارغ)
    ويضع في نهاية كلّ سطر المحرف 'n\'

    مثال ( 2 ):
    سأكرر المثال الأول ولكن باستخدام التابع readline


    CODE: تحديد الكل
    f = open('text.txt', 'r')

    line = f.readline( )
    while line:
        print line
        line = f.readline( )

    f.close( )


  • readlines
    يقوم بقراء الملف دفعة واحدة - ولكن يقوم كل أسطر الملف في list
    وإذا كان الملف فارغ أو انتهينها من قرائته (أي وصلنا إلى آخر محرف فب الملف) فإنه يردّ list فارغ
    وأيضاً يضع في نهاية كل سطر المحرف 'n\'

    مثال ( 3 ):
    عودة إلى المثال السابق بعد التعديل
    CODE: تحديد الكل
    f = open('text.txt', 'r')

    lines = f.readlines( )
    f.close( )

    for line in lines:
        print line



ولكن ماهذه الـ ( r ) التي وضعناها عند تعريف الملف ؟!
CODE: تحديد الكل
f = open('text.txt', 'r')


هذا المحرف يدل على mode أو حالة الملف حاليّاً
عندما يكون :
  • r يكون في حالة قراءة (read)
  • w يكون في حالة كتابة (write)
  • ap يكون في حالة اضفة على المضمون الأصلي (append)
  • rb يكون في حالة قراءة ملف ثنائي (read binary)
  • wb يكون في حالة كتابة لملف ثنائي (write binary)
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » الجمعة فبراير 18, 2011 2:50 am

البرنامج ( 18 ) بلغة بايثون

اسم الملف:
Search.py


الوظيفة:
كتابة تابع يقوم بالبحث عن كلمة داخل ملف .. يردّ True إذا وجدها وإلا False
اسم التابع Search

والملف (الذي سنجرّب عليه) test.txt يحتوي على :
CODE: تحديد الكل
Python
Java
C
C++
Perl
Ruby


الكود:
CODE: تحديد الكل
#!/usr/bin/env python

def Search(path, word):
    f    = open(path, 'r')
    text = f.read( )
    f.close( )
    if word in text:
        return True
    return False

if Search("test.txt", "Ruby"):
    print "Ruby in the file"
else:
    print "Ruby not in"
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » الجمعة فبراير 18, 2011 3:00 am

البرنامج ( 19 ) بلغة بايثون


اسم الملف:
output.py


الوظيفة:
الكتابة على ملف نصّي
  • سنقوم بالكتابة على ملف نصي اسمه stor
  • ثم نقوم بعرض محتواه بعد الخروج من البرنامج


الكود:
CODE: تحديد الكل
#!/usr/bin/env python

msg = raw_input("input your message:\n")

f = open("stor", "w")
f.write(msg)
f.close( )



عرض محتوى الملف النصي stor (طبعاً هي تعليمة Linux~bash .. جماعة ويندوز فيكن تعرضوها كيف مابدكن):
CODE: تحديد الكل
cat stor
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » السبت فبراير 19, 2011 9:32 pm

Modules in Python


هي أشبه بملفات الـ dll (ويطلقون عليها اسم modules)

وظيفتها:
اختزان توابع واختزان بنى معطيات وclasses و objects أيضاً ..
وأثناء الـ runtime يمكننا استيراد أي من محتويات تلك الـ module

مفهوم الـ module فيزيائياً .. هو عبارة عن ملف لاحقته py


مثال :

أريد كتابة تابع sqrt
ووضع متحوّل integer اسمه x

كل ذلك داخل module اسمها lib.py

ثم نقوم باستدعاء محتوى الـ module في الرنامج main.py


أولاً lib.py
CODE: تحديد الكل
x = 10

def sqrt(n):
    return n ** 0.5


ثانياً main.py
CODE: تحديد الكل
import lib

print lib.sqrt(9)
print "x = ", lib.x



الخرج
CODE: تحديد الكل
3.0
x =  10



آلية عملها ..


يوجد للغة Python أداتين هامتين تعملان معاً هما :
  • Interpreter
  • Compiler

الأول تعرفنا عليه غي ما سبق .. وهو يقوم بالتفسير الفوري للبرامج ...

الثاني يقوم بترجمة الـ code وتحويله إلى binary code ..
ولهذا سينتج ملف اسمه lib.pyc وهو الملف الـ compiled .. وبإمكاننا إخفاء الكود وإعطاء المستخدم فقط الـ binary code للمكتبة
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » السبت فبراير 19, 2011 10:15 pm

The Python Standard Library



أهمّ مايميّز لغة Python أنها لا ترهقك في كتابة Assistant Packages .. فهنالك Packages لأشياء قد لا تعرفها حتى :wink2:
حيث يوجد أكثر من 308 مكتبة standard .. (ولكنها في الحقيقة تفوق الـ 2000 مكتبة إذا حسبنا الـ hyper libraries أيضاً)

سأقوم بطرح أسماء المكتبات الضرورية فعلاً (تقوم بسهيل العمل على المبرج بشكل كبـــيـــر جداً)

فقط لتسهيل القراءة عليكم .. سأقوم بذكر الوظيفة ثم أسماء المكتبات المتعلقة بها

  • String Services
    • string
    • re

  • Data Types
    • datetime
    • queque
    • pprint

    Numeric and Mathematical Modules
    • math
    • decimal
    • functools
    • itertools
    • fractions
    • random

    File and Directory Access
    • os.path
    • stat

    Data Persistence
    • pickle
    • shelve
    • marshal
    • dbm
    • sqlite3

    Data Compression and Archiving
    • zlib
    • gzip
    • zipfile
    • tarfile

    File Formats
    • csv
    • ConfigParser
    • robotparser

    Cryptographic Services
    • hashlib
    • hmac
    • md5
    • sha

    Generic Operating System Services
    • os
    • io
    • time
    • ctypes
    • platform
    • logging

    Interprocess Communication and Networking
    • socket
    • signal
    • asynchat
    • asyncore

    Internet Data Handling
    • email
    • json
    • mailcap
    • mailbox

    Structured Markup Processing Tools
    • HTMLParser
    • sgmllib
    • htmllib
    • xml.parsers.expat
    • xml.dom
    • xml.sax
    • xml.etree

    Internet Protocols and Support
    • webbrowser
    • cgi
    • urllib
    • urllib2
    • httplib
    • ftplib
    • SocketServer
    • urlparser
    • BaseHTTPServer
    • CGIHTTPServer
    • Cookie

    Multimedia Services
    • audioop
    • wave

    Graphical User Interfaces with Tk
    • Tkinter
    • ttk
    • Tix
    • ScrolledText
    • turtle

    Python Runtime Services
    • sys
    • __builtin__
    • __main__
    • gc
    • user
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » السبت فبراير 19, 2011 11:54 pm

Packages in Python


ماهو الـ Package ؟
نحن دزماً نستخدمه دون معرفة بنيته ..
يمكننا القول أنه شيء يشبه الـ module لكنه أوسع بكثير ..

المفارقة الوقعة بين الـ module والـ Package هي أنّ:
  • الـ module تتعامل مع كتل برمجية بشكل مباشر
  • أما الـ package تتعامل مع الملفات والمجلدات بشكل مباشر - ومع الكتل البرمجية بشكل غير مباشر


لنتفق على أمر هام الـمفهوم الفيزيائي للـ package هو: مجلّد يحوي مجموعة من الـ modules أو الـ packages


صورة


مثال :
سأقوم بكتابة package اسمها ite
وسأقوم بوضع هذه الـ modules فيها :
  • members يحوي أسماء الأعضاء
  • subjects يحوي المواضيع
  • books يحوي الكتب
  • hello يحوي تابع يقوم بالترحيب بعضو ما ( .. )[/list
    اسم التابع hi : ندخل له اسم العضو فيطبع ( hello اسم العضو )
  • __init__ وهو الـ Initializer

هذه الـ package مضغوطة .. (فكّو ضغطها لأنها مجلّد)
ite.zip



وذا البرنامج موجود في نفس المجلد الذي يحوي الـ package
CODE: تحديد الكل
import ite

print ite.members.member[1]
print ite.subjects.subject[1]
print ite.books.book[1]

ite.hello.hi(ite.members.member[4])
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » الأربعاء فبراير 23, 2011 6:29 pm

lambda in Python


هذه آليّة أخرى لتوليد التوابع في لغة Python عن طريق تقنية lambda

تُستخدم عندما نريد بناء تابع له ( خرجّ ) .. لا يقوم بأي عملية طباعة أو قراءة أو .. أو ..


طريقة تعريف تابع
CODE: تحديد الكل
<function name> = lambda <arguments>: <outputs>



مثال ( 1 )
سأكتب تابعين ..
  • الأول : sqr يقوم بردّ مربع الدخل
  • الثاني : sqrt يقوم بردّ جذر الدخل
CODE: تحديد الكل
sqr  = lambda x: x ** 2
sqrt = lambda x: x ** 0.5

print sqr(4)
print sqrt(16)


الخرج:
CODE: تحديد الكل
16
4





مثال ( 2 )
يمكن أنّ يكون للتابع بدون دخل
CODE: تحديد الكل
six = lambda : 6

print six( )




مثال ( 3 )
سنكتب تابع اسمه do
نمرر له (تابع , قيّمة مـا)
يقوم بتنفيذ ذلك التابع


CODE: تحديد الكل
sqr  = lambda x: x ** 2

def do(func, val):
    return func(val)

print do(sqr, 3)
print do(lambda x: x ** 0.5, 9)
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » الخميس فبراير 24, 2011 9:28 pm

OOP(Object Oriented Programming) in Python


تذكرة:
سبق وأن ذكرنا أنّ لغة Python هي لغة Pure OOP (أي أنّ كل شيء هو Object و Classes)
حتى التوابع هي عبارة عن Object
والبرنامج بحد ذاته هو عبارة عن Class


لمحة سريعة (لمن ليس لديه اطلاع على مفهوم الـ OOP)

هي طريقة في البرمجة تتبع لمبدأ الكبسلة والتغليف .. وذلك لتسهيل عملية تطوير البرامج عندما نريد
ودائماً نسمع تلك الكلمة الرنانة Class مرفقة بمواضيع الــ OOP .. فما هو الـ Class ؟

بإمكاننا القول (لحدٍّ ما) أنّ الـ class هو نمط معطيات - نستطيع أخذ Object منه ..
الـ Object هو عبارة عن (عنصر من نمط class معيّن)

ويوجد العديد من المفاهيم الهامة المرتبطة بهذا الموضوع (Inheritance, Instance, Polymorphism , Nested , Staticو virtual) ..


طريقة تعريف Class :
CODE: تحديد الكل
class <name of class>:
    ...


مثال :
CODE: تحديد الكل
class Hi:
    def sayHi(self, name):
        print "Hi", name


h = Hi( )
h.sayHi("Man")


الخرج:
CODE: تحديد الكل
Hi Man


الشرح :

السطر الأول
CODE: تحديد الكل
class Hi:

قمنا بتعريف class اسمه Hi

السطر الثاني
CODE: تحديد الكل
    def sayHi(self, name):
        print "Hi", name

قمنا بتعريف virtual method اسمها sayHi
نمرر لها وسيطين ..
  • الأول : self
    وهو دلالة على أنّ التابع virtual فقط .. أي أنّ التابع يتعلق بالـ Object وليس بالـ Class
    ولا نمرر مكانه أي شيء أثناء الإستدعاء (لأنه فقط اشارة على أن التابع virtual)
  • الثاني : name
    وهو string الذي يمثل اسم الشخص


السطر الثالث:
CODE: تحديد الكل
h = Hi( )

قمنا بخلق Object اسمه h من نمط Hi
ويصبح h يحتوي تابعاً اسمه sayHi

السطر الرابع:
CODE: تحديد الكل
h.sayHi("Man")

قمنا باستدعاء التابع sayHi
حيث (لاحظو self تأخذ قيمتها من الـ Object الضي نستخدمه مباشرة):
CODE: تحديد الكل
self = h
name = "Man"
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » الخميس فبراير 24, 2011 9:55 pm

Constructor of the Class in Python



إنّ قواعد تعريف الـباني Constructor مختلفة عن باقي اللغات كـ C++, Java ..
فهنا في لغة Python يتم التصريح عن Constructor عن طريق التابع __init__ (وهو اختصار لكلمة Initializer)
يجب أن يكون أول argument له هو مؤشّر الـ Class (أقصد self)
لا نستطيع عمل overload لأي تابع (ومنها التابع الباني constructor)


*يتم استدعاء ال__init__ عند التعريف مباشرة*

مثال:
CODE: تحديد الكل
class klass:
    def __init__(self):
        print "Constructor"

obj = klass( )


الخرج:
CODE: تحديد الكل
Constructor









Destructor of the Class in Python


إنّ قواعد تعريف الهادم Destructor مختلفة أيضاً ..
فهنا في لغة Python يتم التصريح عن Destructor عن طريق التابع __del__(وهو اختصار لكلمة del)
يجب أن يكون أول argument له هو مؤشّر الـ Class (أقصد self)
لا نستطيع عمل overload لأي تابع (ومنها التابع الباني Destructor)


*يتم استدعاء الـ __del__ عند الحذف القصري للـ Object*

مثال:
CODE: تحديد الكل
class klass:
    def __init__(self):
        print "Constructor"
       
    def __del__(self):
        print "Destructor"       

obj = klass( )
del obj


الخرج:
CODE: تحديد الكل
Constructor
Destructor
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » الخميس فبراير 24, 2011 10:09 pm

Object fields & Class fields


ما معنى Object fields ؟
هو أي حقل نعرّفه تحت مؤشّر الـ Class ..
ويصبح ذلك الحقل مملوكاً للـ Object

ما معنى Class fields ؟
هو أي حقل نعرّفه ستاتيكياً (أي مملوكاً للـ Class وليس للـ Object) ..

مثال :
CODE: تحديد الكل
class klass:
    S = "Class field"
    def __init__(self):
        self.V = "Object field"

Obj = klass( )

print Obj.V

klass.S = "new Class field"
print Obj.S
print klass.S


الخرج :
CODE: تحديد الكل
Object field
new Class field
new Class field


الشرح :

لا نستطيع تعريف حقول إلا داخل الـ methods ويجب أن نربطها بالمؤشر self
CODE: تحديد الكل
self.V = "Object field"

نعرف الحقول الستاتيكية في الـ global class scope فقط (ولا نربطه بالمؤشر self)
CODE: تحديد الكل
S = "Class field"

استطعنا تغيير قيمة الحقل الستاتيكي S من خلال الـ class ومن خلال الـ Object أيضاً
لكن الحقل (التابع لـلمؤشر self) لا نستطيع الوصول إليه سوى من الـ Object
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » الخميس فبراير 24, 2011 10:25 pm

مثال :
CODE: تحديد الكل
class Person:
    def __init__(self, name, age, mail):
        self.name = name
        self.age  = age
        self.mail = mail
       
    def __del__(self):
        del self.name, self.age, self.mail

P = Person("Swaroop", 24, "example@swaroop.com")
peoples = [P, Person("Karam", 19, "example@Karam.com")]

print peoples[0].name
print peoples[1].age

P.age = 100
print peoples[0].age




الخرج:
CODE: تحديد الكل
Swaroop
19
100




الشرح :
كما لاحظتم - الباني __init__ يأخذ arguments 3 وهي name, age, mail
CODE: تحديد الكل
def __init__(self, name, age, mail):

وهذا يعني أننا عند خلق الـ Object يجب أنّ نمرر 3 وسائط للباني .. مثل :
CODE: تحديد الكل
P = Person("Swaroop", 24, "example@swaroop.com")


في الهادم __del__ نقوم بحذف مؤشرات الحقول name, age, mail
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » السبت فبراير 26, 2011 8:18 pm

static method in Python



طريقة تعريف static method في لغة Python على الشكل التالي :
CODE: تحديد الكل
class <class name>:
    @staticmethod
    def func( ):
        ...


أهم قاعدة Syntax هو أننا لا نقوم بتعريف وسيط self للتابع
وأريد أنّ أذكّر أنّ كل method لم نكتب فوقها staticmethod@ فهي virtual

مثال :
CODE: تحديد الكل
class klass:
    @staticmethod
    def method( ):
        print "Static method"


klass.method( )

Obj = klass( )
Obj.method( )


الخرج:
CODE: تحديد الكل
Static method
Static method
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » السبت فبراير 26, 2011 9:28 pm

البرنامج ( 20 ) بلغة بايثون


اسم الملف:
City.py


الوظيفة:
سنقوم بإنشاء Class اسمه Person
وسنقوم بإنشاء مجموعة من الأشخاص من خلال ذلك الـ Class
الهدف الأساسي معرفة عدد سكان المدينة من بالاستعانة الـ static fields و static methods



(أي بدون بنى معطيات معقدة "مصفوفة - قائمة - .. ")

وهنا تبرز أهميّة استخدام الـ static الذي يعتبر مستقلّ عن أيّ Object (فهو يرتبط بالـ Class)



[b]الكود :

CODE: تحديد الكل
class Person:
    '''Person Class'''

    population = 0
   
    def __init__(self, name):
        '''Initializes the data.'''
        self.name = name
        print '(Initializing {0})'.format(self.name)

        Robot.population += 1

    def __del__(self):
        '''I am dying.'''
        print '{0} is being destroyed!'.format(self.name)
        Robot.population -= 1
 
    @staticmethod
    def howMany():
        '''Prints the current population.'''
        print '\nWe have {0:d} Person.\n'.format(Robot.population)


droid1 = Person('karam')
Person.howMany()

droid2 = Person('STEEV')
Person.howMany()


del droid1
del droid2

Person.howMany()



الخرج:
CODE: تحديد الكل
(Initializing karam)

We have 1 Person.

(Initializing STEEV)

We have 2 Person.

karam is being destroyed!
STEEV is being destroyed!

We have 0 Person.
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » الأربعاء مارس 02, 2011 9:52 pm

references and functions


سبق وأنا تحدثنا عن موضوع الـ pointers والـ references

القاعدة تقول :
أيّاً كان Obj وسيط لتابع ما ..
CODE: تحديد الكل
def func(Obj):
   ...

  • لا يمكننا تغير الـ pointer الذي يحتفظ بالـ Obj
  • يمكنن تغيير مؤشرات حقول الـ Obj


حاولو دراسة المثال التالي (شوفو الفرق بين كلا التابعين Swap1 و Swap2)

CODE: تحديد الكل
class Node:
    def __init__(self, val = 0):
        self.value = val


def Swap1(Obj1, Obj2):
    temp = Obj1
    Obj1 = Obj2
    Obj2 = temp

def Swap2(Obj1, Obj2):
    temp = Obj1.value
    Obj1.value = Obj2.value
    Obj2.value = temp


# main level
node1 = Node( )
node2 = Node(node1.value + 9)

print "before: ", node1.value, node2.value

Swap1(node1, node2)
print "after (Swap1): ", node1.value, node2.value

Swap2(node1, node2)
print "after (Swap2): ", node1.value, node2.value



الخرح
CODE: تحديد الكل
before:  0 9
after (Swap1):  0 9
after (Swap2):  9 0
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » الجمعة مارس 04, 2011 1:25 am

Operator Overloading in Python


ويُطلق على هذه التقنية في لغة Python مصطلح Special Methods حيث يستخدم في الـ [googlesearch]data modelling[/googlesearch]


(* شرح إضافي لمن ليس لديه فكرة عن الـ operator overloading و الـ data modelling *)


هي طريقة لتعريف عمليات لنمط abstract .. حيث تساعد هذه العمليات في رسم العلاقات بين االأنماط وتسهّل العمل على المبرمج ..
مثال:
سنقوم بتعريف class اسمه Point
بداخله حقلان X, Y ..

الطريقة العاديّة
وسنعرّف تابع اسمه sum سيقوم بجمعّ متحولين من النمط السابق ..

تعريف عملية الجمع
Point(x_1, y_1) + Point(x_2, y_2) = Point(x_1 + x_2, y_1 + y_2)

الكود ..
CODE: تحديد الكل
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

def Sum(P1, P2):
    x = P1.x + P2.x
    y = P1.y + P2.y

    return Point(x, y)


a = Point(1, 3)
b = Point(3, 1)
z = Sum(a, b)

print z.x, z.y


الخرج
CODE: تحديد الكل
4 4



طريقة الـ operator overloading
سنعرف عملية الجمع ( + ) بين متحولين من النمط السابق

تعريف عملية الجمع
Point(x_1, y_1) + Point(x_2, y_2) = Point(x_1 + x_2, y_1 + y_2)

الكود ..
CODE: تحديد الكل
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
        x = self.x + other.x
        y = self.y + other.y

        return Point(x, y)

a = Point(1, 3)
b = Point(3, 1)
z = a + b

print z.x, z.y


الخرج
CODE: تحديد الكل
4 4



الــــشـــرح
عندما نكتب method بين double under score مثل __add__ يصبح التابع يدعى بـ special method لأنه يصبح ذو خاصّة متعلّقة بأصل اللغة ..
ففي مثالنا عرفنا التابع __add__ الذي يُعبّر عن التصريح عن عملية ( + ) بين معاملين (الأول: self والثاني: other)
من المعامل الأول self واضح أنه يجب أن يكون على يسار عملية الجمع متحول من نمط Point
ولكن ماذا عن other .. لاحظو أنني داخل التابع اعتبرتها من نمط Point أيضاً (على الرغم أنها ممكن أن تكون من نمط آخر)
يمكن تلافي ذلك من خلال بعض تعليمات if, else, ..

ويمكننا استنتاج العبارة التالية منطقياً بالشكل التالي :
CODE: تحديد الكل
a + b   ===>    a.__add__(b)
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » الجمعة مارس 04, 2011 1:42 am

وهذا جدول بأهمّ الـ Special Methods
طبعاً في أكتر بكتير ..

صورة
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

السابقالتالي

العودة إلى منتدى البرمجيات المفتوحة المصدر

الموجودون الآن

المستخدمون المتصفحون لهذا المنتدى: لا يوجد أعضاء مسجلين متصلين و 1 زائر