Learning Python - step by step

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

المشرف: Karam

Re: Learning Python - step by step

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

del function in Python


مهمته حذف متحول من الذاكر بشكل قصري .. (مؤشرات يعني) ..

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

del x
print x #ERROR


وهنا لن ينفذ هذا الكود لأنه سيحدث Run Time Error .. لأنه عندما أردنا طباعة ( x ) لم يجدها


مثال ( 2 ):
CODE: تحديد الكل
x = [1, 2, 3]

while x != [ ]:
    print x[0]
    del x[0]

print "done"


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

Re: Learning Python - step by step

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

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

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


الوظيفة:
التحكم بقائمة تسوّق ( shoplist )
... (مجموعة من العمليات على list)


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

shoplist = ["Apple", "Mango", "Carrot", "Banana"]

print "I have", len(shoplist), "items to purchase."
print "These items are:",
for item in shoplist:
    print item,


# I also have to buy "Rice"
shoplist.append("Rice")

print "\nMy shopping list is now", shoplist


# I will sort my list now
shoplist.sort()
print "Sorted shopping list is", shoplist


print "The first item I will buy is", shoplist[0]
olditem = shoplist[0]
del shoplist[0]
print "I bought the", olditem
print "My shopping list is now", shoplist
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

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

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

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


الوظيفة:
حساب محدد مصفوفة ثنائية مكوّنة من سطرين وعامودين

صورة


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

x = [1, 2]
y = [4, 5]
Matrix = [x, y]

for Row in Matrix:
    for item in Row:
        print item, " ",
    print "\n"

det = Matrix[0][0]*Matrix[1][1] - Matrix[0][1]*Matrix[1][0]
print "det = {0}".format(det)
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » الثلاثاء فبراير 08, 2011 7:04 pm

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

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


الوظيفة:
طباعة حميع محتويات list كل عنصر على سطر

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

lst = [10, "Hello World", [1, 2, 3, ["Hye"]]]

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

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » الثلاثاء فبراير 08, 2011 7:55 pm

tuples in Python


هي مثل الـ( list ) تماماً لكنها تفتقد لخاصيّة الإضافة أو الحذف أو الـ assignment (التعديل على العناصر)

طريقة تعريف tuple :
CODE: تحديد الكل
aTuple = (obj1, obj2, obj3, ...)



وله تابعين فقط:


قد تتساءل ماهي أهميّة الـ tuple طالما هناك list ؟!؟

أولاً :
تستهلك قدراً أقل من الذاكرة من list

ثانياً:
تبرز أهميتها في التوابع بشكل كبير جداً .. مثل: (سنقوم بشرحها فيما بعد :) )
  • many arguments
  • many outputs
  • وفي تقنية assignment by tuple
آخر تعديل بواسطة Karam في الثلاثاء فبراير 08, 2011 7:59 pm، عدل 1 مرة
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » الثلاثاء فبراير 08, 2011 7:58 pm

البرنامج ( 9 ) بلغة بايثون هذا المثال مُقتبس من كتاب Byte Of Python

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


الوظيفة:
مجموعة من العمليّات على tuple


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

zoo = ("Python", "Elephant", "Penguin")
print "Number of animals in the zoo is", len(zoo)

new_zoo = ("Monkey", "Camel", zoo)
print "Number of cages in the new zoo is", len(new_zoo)
print "All animals in new zoo are", new_zoo
print "Animals brought from old zoo are", new_zoo[2]
print "Last animal brought from old zoo is", new_zoo[2][2]
print "Number of animals in the new zoo is", (len(new_zoo) - 1) + len(new_zoo[2])
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

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

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

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


الوظيفة:
تبديل المتحوليين x و y بدون استخدام متحول وسيط .. وبسطر واحد فقط


الكود:
CODE: تحديد الكل
x = input('input (x): ')
y = input('input (y): ')

print x, y

x, y = y, x

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

Re: Learning Python - step by step

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

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

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


الوظيفة:
طباعة العنصر الأول من الـ( x ) .. من خلال الـ( z )

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

x = (1, 2, 3)
y = (4, 5, 6, x)
z = (8, 8, 9, y)

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

Re: Learning Python - step by step

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

Dictionaries in Python


بنية معطيات متقدمة ,تعمل على مبدأ مفتاح وقيمة

صورة


أهمّ ما يميزها:
  • يمكن لك من المفتاح key والقيمة value أن يكون من أي class - مثلاً ( int, float, str, complex, abstract)
  • قابلية الحذف والإضافة القصريّة عن طريق del
  • ديناميكية (تتوسع أثنا الـ Run Time)
  • مدعومة بأكثر من 43 method
  • متعددة الأنماط - أي يمكن أن تحوي في نفس الوقت integer و string و file و mp3 و image و ..
  • أهم ميّزة الـ reference


طريقة تعريف dictionary :
CODE: تحديد الكل
aDict = { key1: value1,
          key2: value2,
          key3: value3,
          ... : ...
          keyn: valuen }


التوابع الهامة :
    التابع clear :
    يقوم بإفراغ الـ dictionary تماماً

    مثال:
    CODE: تحديد الكل
    x = {1: "A", 2: "B", 3: "C"}
    print x

    x.clear()
    print x


    التابع copy :
    تقوم ردّ نسخة عن الـ dictionary .. ولكن ما أهميته ؟!
    لأننا إن قمنا بإسناد dictionary إلى آخر فإنهما يصبحان يؤشران على نفس العنوان .. أي أنّ أي تعديل على أحدهما يؤثر في الآخر

    مثال (بدون استخدام النسخ)
    CODE: تحديد الكل
    x = {1: "A", 2: "B", 3: "C"}
    y = x

    y[1] = "Z"
    print x


    مثال (باستخدام النسخ)
    CODE: تحديد الكل
    x = {1: "A", 2: "B", 3: "C"}
    y = x.copy( )

    y[1] = "Z"
    print x


    التابع items :
    يقوم بردّ list كل عنصر فيها tuple تحوي (key و value)

    مثال:
    CODE: تحديد الكل
    x = {1: "A", 2: "B", 3: "C"}

    y = x.items( )
    print y

    الخرج:
    CODE: تحديد الكل
    [(1, 'A'), (2, 'B'), (3, 'C')]


    التابع keys :
    يردّ list تحو كل مفاتيح (keys) الـ dictionary

    مثال:
    CODE: تحديد الكل
    x = {1: "A", 2: "B", 3: "C"}
    y = x.keys( )

    print y

    الخرج:
    CODE: تحديد الكل
    [1, 2, 3]


    التابع values :
    يردّ list تحو كل قيّم (values) الـ dictionary

    مثال:
    CODE: تحديد الكل
    x = {1: "A", 2: "B", 3: "C"}
    y = x.values( )

    print y

    الخرج:
    CODE: تحديد الكل
    ['A', 'B', 'C']

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

Re: Learning Python - step by step

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

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

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

الوظيفة:
تخزين ايميلات contacts في example .. واجراء بعض العمليات عليه


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


AddressBook = { "a7la sham" : "example@a7la.sham.com",
                "Sola"      : "example@Sola.org",
                "kh.ri"     : "example@kh.ri.org",
                "HammoD"    : "example@HammoD.com",
                "Karam"     : "example@Karam.com"
                }

print "Sola's mail is", AddressBook['Sola']

# Deleting a key-value pair
del AddressBook['Karam']

print "\nThere are {0} contacts in the address-book\n".format(len(AddressBook))

for name, address in AddressBook.items():
    print "Contact {0} at {1}".format(name, address)

# Adding a key-value pair
AddressBook["Guido"] = "guido@python.org"
if "Guido" in AddressBook: # OR ab.has_key('Guido')
    print "\nGuido's address is", AddressBook["Guido"]
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

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

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

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

الوظيفة:
انشاء مصفوفة ثنائية عن طريق dictionary ثم طباعتها ..

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

Matrix = { (0, 0) : 1, (0, 1) : 2, (0, 2) : 3,
           (1, 0) : 4, (1, 1) : 5, (1, 2) : 6,
           (2, 0) : 7, (2, 1) : 8, (2, 2) : 9 }


for i in range(0, 2 + 1):
    for j in range(0, 2 + 1):
        print Matrix[i, j], " ",
    print ""
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

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

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

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

الوظيفة:
انشاء أرشيف مرقّم لطلاب جامعة .. كل طالب له :
  • اسم name
  • عمر age
  • كليّة college

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

Student = { }

Student[1]= {"name": "Karam", "age": 20, "College": "ITE"}
Student[2]= {"name": "Swaroop", "age": 24, "College": "Dentistry"}

print "there are", len(Student), "student"

for Stu in Student.items( ):
    print "Student number(%d):" % Stu[0]
    for option in Stu[1].items( ):
        print '\t', option[0], ':', option[1]
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » الخميس فبراير 10, 2011 12:38 am

function in Python



إليكم بعض القواعد الهامة في بناء التوابع بلغة Python:
  • لا يتم تحديد نمط الدخل ونمط الخرج للتابع
  • يمكن أن يكون للتابع مُدخلات غير محددة (دخل واحد أو 10 أو 1000 ) في الوقت ذاته
  • يمكن أن يردّ التابع أكثر من شيء في الوقت ذاته
  • إذا انتهى التابع ولم يمرّ بتعليمة return فإنه يقوم بإرجاع القيمة الخاصة None (مثل nil في باسكال و NULL في C)


طريقة تعريف تابع
CODE: تحديد الكل
def <function name> (arg1, arg2, arg3, ...):
    #processing


مثال ( 1 ):
هاذا التابع يدخل له عددين ويقوم بردّ القيمة الأكبر
CODE: تحديد الكل
def MAX(obj1, obj2):
    if obj1 > obj2:
        return obj1
    else:
        return obj2

print MAX(13, 1)


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


مثال ( 2 ):
هذا التابع يدخل له عددين ويقوم بطباعة الأكبر (طباعته وليس ردّه)
CODE: تحديد الكل
def MAX(obj1, obj2):
    if obj1 > obj2:
        print obj1
    else:
        print obj2

MAX(13, 1)


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


ولكن ماذا لو قمنا بطباعة خرج MAX علماً أنه لا يردّ أي شيء
CODE: تحديد الكل
print MAX(13, 1)


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

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » الخميس فبراير 10, 2011 12:56 am

many arguments in a function


كما أسلفنا سابقاً .. يمكن للتابع أن يأخذ عدد غير محدد من الوسائط وذلك عن طريق تقنيات tuple (بتتذكرو :wink: )

عنوان: Learning Python - step by step

Karam كتب:قد تتساءل ماهي أهميّة الـ tuple طالما هناك list ؟!؟

أولاً :
تستهلك قدراً أقل من الذاكرة من list

ثانياً:
تبرز أهميتها في التوابع بشكل كبير جداً .. مثل: (سنقوم بشرحها فيما بعد :) )
  • many arguments
  • many outputs
  • وفي تقنية assignment by tuple



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



مثال:
CODE: تحديد الكل
def multiplication(*variables):
    out = 1
    for var in variables:
        out = out * var
    return out

print multiplication()
print multiplication(3)
print multiplication(1, 2, 3, 4, 5)


الخرج:
CODE: تحديد الكل
1
3
120


"كيف اشتغلت .. طولو بالكن .. جاي الشرح :ism: "

عند السطر :
CODE: تحديد الكل
print multiplication()


لم يجد الـ Interpreter أي دخل فقام بتوليد tuple فارغة ووضعها في variables
وبما أنّ variables فارغة فلم يجد أيّ شيء يضربه بـ out فقام بردّ out



عند السطر :
CODE: تحديد الكل
print multiplication(3)


وجد الـ Interpreter دخل واحد وهو ( 3 ) فقام بتوليد tuple تحوي العدد ( 3 ) فقط ووضعها في variables
ثم قام بضرب عناصر variables بـ out
ثمّ ردّ out


عند السطر :
CODE: تحديد الكل
print multiplication(1, 2, 3, 4, 5)


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

Re: Learning Python - step by step

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

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

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

الوظيفة:
تابع يقوم بجمع عدد غير محدد من الـ strings

الكود:
CODE: تحديد الكل
def concat(*stringz):
    out = ""
    for s in stringz:
        out = out + s
    return out

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

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » الجمعة فبراير 11, 2011 8:44 pm

many outputs in a function



أيضاً إعتماداً على تقنية tuple يمكن للتابع في لغة Python أنّ يردّ أكثر من قيمة واحدة في الوقت ذاته

طريقة تعريف تابع يردّ عدد غير محدد من الـ objects هي كالتالي:
CODE: تحديد الكل
def <function name> ( <arguments> ):
    #processing
    return Obj1, Obj2, Obj3, ...


مبدأ عمل هذه التقنية (كما أسلفنا سابقاً يعتمد على tuple) :
عندما يجد الـ Interpreter أكثر من Object بعد تعليمة return يقوم بوضعهم في tuple ويردّ تلك الـ tuple



مثال ( 1 ):
CODE: تحديد الكل
def func( ):
    return 1, 2, 3, 4

Tup = func( )
print Tup

الخرج
CODE: تحديد الكل
(1, 2, 3, 4)


مثال ( 2 ):
CODE: تحديد الكل
def power(x, y, z):
    return x**2, y**2, z**2

print power(2, 3, 4)

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

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » الجمعة فبراير 11, 2011 8:51 pm

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

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


الوظيفة:
تابع يقوم بإعادة أكبر عتصرين في list
يعني نقوم بتمرير list إلى التابع وهو يردّ أكبر عددين داخلها

اسم التابع Top_Tow_Numbers


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

def Top_Tow_Numbers(Array):
      if len(Array) > 1:
            top1 = Array[0]
            top2 = None
            for item in Array:
                  if item > top1:
                        top2 = top1
                        top1 = item
                  elif item > top2:
                        top2 = item

            return top1, top2


My_List = [3, 55, 6, 1, -9, 4.76, 23, 4]

x = Top_Tow_Numbers(My_List)

print "top number      : {0}".format(x[0])
print "semi top number : {0}".format(x[1])
أنا بتنفس حرية .. ما تقطع عني الهوى
صورة العضو الشخصية
Karam
مشرف منتدى البرمجيات المفتوحة المصدر
مشرف منتدى البرمجيات المفتوحة المصدر
 
مشاركات: 2039
اشترك في: الخميس أكتوبر 01, 2009 2:50 pm
مكان: Stadt Ilmenau, Thuringen, Germa
الجتس: ذكر
الشهادة الثانوية: Syria
الجامعة: Damascus
الكلية: ITE
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » الجمعة فبراير 11, 2011 9:37 pm

function documentation in Python


لم نعتاد على هذه التقنية بعد (على ما أعتقد) ..

ماذا تعني function documentation ؟

سأضرب مثال من Visual Studio .. عندما نقوم بإستخدام تابع ما .. فإننا أثناء كتابته تظهر لنا رسالة توضّح عمل التابع

صورة


وكذلك في Python

صورة



كيف يمكننا التحكّم بتلك الرسالة !!! .؟؟
عن طريق تقنية function documentation


إليكم مثال:
سأقوم بكتابة تابع factorial وتوثيقه بـرسالة documentation وهي:
CODE: تحديد الكل
fact(n) -> integer
Return factorial of (n) recursively   


كود التابع :
CODE: تحديد الكل
def fact(n):
    """fact(n) -> integer ... Return factorial of (n) recursively"""
    if n == 0:
        return 1
    else:
        return n * fact(n - 1)



عندما نكتب التابع ستظهر هذه الرسالة :

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

Re: Learning Python - step by step

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

None Special value in Python


القيمة الخاصة None هي تقوم مقام (nil في لغة Pascal) و (NULL و void في لغة C)
وهيّ تتولد من الـ Class NoneType

سبق وأن ذكرنا أنه عندما ينتهي التابع دون أن يمر بأي تعليمة return فإنه يقوم ذاتيّاً بردّ القيمة الخاصة None

مثال ( 1 ):
CODE: تحديد الكل
def func(x, y):
    if x > y:
        return x


x = func(1, 2)
print x

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




مثال ( 2 ):
CODE: تحديد الكل
def hi(man):
    print "hi {0}".format(man)

x = hi("Moubarak")
print x

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

Re: Learning Python - step by step

مشاركة غير مقروءةبواسطة Karam » الجمعة فبراير 11, 2011 10:48 pm

reference Objects argument in Python


من المعروف أنه عندما نريد التعديل على argument يجب أن نمرره بعنوانه by reference
والحال نفسه في Python (أعتقد أنّ مبرمجي Java فهمو المقصود لأن Python تعتمد نفس القاعدة)

يستطيع التابع التعديل على حقول الـ Object ولكن لا يستطيع تغيير مؤشر الـ Object أبداً


ببساطة أكثر:
لا يستطيع التابع تعديل قيّم عندما يكون الـ argument من أحد الأنماط البسيطة (int , complex, float, str)

ولكنه يستطيع التعديل على (list, dictionary, Abstract Class)


مثال ( 1 ):
CODE: تحديد الكل
def change(var):
    var = 5

x = 1
print x

change(x)
print x


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


لماذا لم تتغير قيمة ( x ) لأنه ممنوع تغيير مؤشر أي Object إذا كان وسيط لتابع ما



مثال ( 2 ):
CODE: تحديد الكل
def change(lst):
    lst[0] = 5

x = [1, 2]
print x

change(x)
print x


الخرج:
CODE: تحديد الكل
[1, 2]
[5, 2]


لاحظو أنّ الذي تغيّر هو أحد حقول الـ list وليس مؤشر الـ list



مثال ( 3 ): (بالرغم من أننا لم نصل إلى الـ OOP) لكن من المهم أن أذكر هذا المثال ..

إذا كان لدينا Class وليكن اسمه A بداخله الحقل ( val ) قيمته الابتدائية 2 أي ( val = 2 )
CODE: تحديد الكل
class A:
    def __init__(self):
        self.val = 2


ولدينا التابعين التاليين (الأول يقوم بتغيير قيمة الحقل var في الـ Object) و (الثاني يقوم يتغيير مؤشر الـ Object):
CODE: تحديد الكل
def func1(x):
    x.val = "A"

def func2(x):
    x = "A"


ولدينا البرنامجين التاليين (الأول نستخدم فيه التابع الأول - والثاني نستخدم فيه التابع الثاني):

البرامج ( 1 ):
CODE: تحديد الكل
obj = A( )
print 2 * obj.val

func1(obj)
print 2 * obj.val

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


البرامج ( 2 ):
CODE: تحديد الكل
obj = A( )
print 2 * obj.val

func2(obj)
print 2 * obj.val


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

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

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

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

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