الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Assert, Filter , Global , Lambda

بدأه MuStafa - HaSsan في 21 سبتمبر 2012 · 2 رد · 1,341 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

اليوم موضوع جميل ومهم وبسيط (فقط اذا ركزت) موضوع مهم تحتاجه في كتابة اكوادك ولكل دالة من هذه الدوال تفيدك بشي وتختصر لك شيء وكثير من

من المبتدئين يعانون منها فقط يثبتون على الامثلة التي يرونها ويشعرون كانهم وضيفتها لكن في الاصل لا شيء معتمدين على امثلة المواقع المهم ,,,

كثير منا ينسى هذه الدوال بالطبع لعدم وجود التركيز والتطبيق الكثير ولذلك يكون النسيان قوي اما اذا قارنته بالشخص الذي يطبق ويكون متعمد ان يكتب احد هذه

الدوال في مشروعه سوف تكون في افكاره ولا ينساها المهم سوف نبدء في دراسة هذه الدوال واعطاء امثلة للاخذ الفكرة المهم اصدقائي ,, انا احتاج منكم فقط

التركيز + التطبيق = الاتقان فـ بالبداية سمي باسم الله تعالى وااترك كلشي في بالك ولا تدرس هذه الدوال وانت مشغول في ال yahoo , or facebook وغيرها

او منتديات وكل5ثواني تشاهد لك شيء لا هذا خطا اغلق كل شيء وابدء بالمشاهدة .

بسم الله الرحمن الرحيم

دالة F i l t e r

من اسمها تبين فانها تنقي حسب الطلب اي يعني انتة لديك كود فيه اسماء وارقام ورموز تريد ان تنقي فقط الارقام وتترك الرموز والاسماء

يمكنك ببساطة عن طريق دالة filter ان تنقي ماتشاء

ووتعتمد هي على Functiion +sequence

اي دالة واسم القائمة

نعطي مثال معين

names = ["omar","oday","or","orange"]
def name(chars):
if chars[0]=="o":
retuern True
retuen False
filters = filter(name,names)
print filters

lنشرح الكود, باسم الله

في البداية

عملنا متغير من نوع list

names = ["omar","oday','or','orange]

ومن ثم عملنا دالة

def name(chars):
if chars[0]=="o"

اشترطت الدالة في اخذ اول حرف من الاسماء وهو حرف O

ومن ثم عملنا

retuern True
retuen False

اذا كان صحيح سوف يقوم بطباعته واذا خطا سوف يعيد مرة اخرى

ثم عملنا متغير

filters = filter(name,names)

وضعنا فيه (لاحض) تضع في البداية اسم الدالة ومن ثم اسم المتغير الذي يحوي الشيء الذي كتبته انت من اسماء وغيرها

ثم تقوم بطباعته لكي يضهر

ناخذ مثال ثاني

سكربت يقوم باخذ الاعداد الزوجية (num%2==0)

باسم الله الرحمن الرحيم

num = [1,2,3,4,5,6]
def nums(numper):
    if (numper%2==0):

        return True
    return False

n = filter(nums,num)
print n

اختصر من الشرح

في البداية عملنا متغير

يحتوي ارقام

ومن ثم عملنا دالة تاخذ paramate واحد

ثم قسمنا الارقام على 2

وكذلك ايضا قمنا باعادة القيمة اذا كانت True سوف يطبعه واذا كانت False سوف يطبع خطا ويعيد مرة اخرى

تمرين .

اكتب مثال يحتوي على متغير من نوع list يحتوي على كلمات وارقام وقم باخذ باخذ فقط الارقام

تم بحمد الله تعالى

2- دالة Lambda

لكل شخص له تعريف عليها بالنسبة لي هي تشبه ال def لكنها تعتبر جسم لها في بعض الاحيان وايضا هي تاخذ بارامتر

وتستخدم في حالة اختصارية اي لديك كثير من الكود يمكنك ان تختصرها في هذه الدالة وايضا نقول تستخدم في حالات لاتريد ان تعمل دالة تريد ان تختصر الكود

لنرى الامثلة سوف تفهم

lam = lambda n1,n2:n1+n2
lam(5,2)

لو تكتبه في def 
راح تلاحض طويلة 
ولكن lambda 
قليلة

OR

lam = lambda **num:num
print lam("names = name,num=123456,r=*^%$$%")

fوضعنا له بارمترات

اعتقد مفهومة الحالة جدا .

تم بحمدالله

3 - دالة Global

وهي دالة فرعية اي انها تقوم بتغير الناتج الداخلي والخارجي

مفهوم اكثر مثل لديك في داخل الدالة رقم 1 وخارج اكواد الدالة متغير يحتوي على رقم 2

تريد ان تجعل هذا المتغير يحمل رقم واحد اي تغيره

لازم تكتب اكواد كثير وتعمل replace d حتى تغير لكن global تسهل عليك هذا الشيء

After >>>> before

fوايضا في بعض الاحيان تستعمل لتعريف متغيرات

متغيرات فارغة ويمكنك من خلالها ان تقوم باستعمالها

المهم

نبدا بالامثلة للتوضيح اكثر

المهم

نبدا بالتوضيح

def chan():
    global x
    x = 4
    return x
print "is num"
x = 5
print "Now Is Num New"
print chan()
print x

بسم الله نبدء بشرح الكود

في البداية عملنا دالة

def chan()

ومن ثم عينا متغير من نوع global

الذي سوف يتم تغير كل المتغيرات التي يحملن ارقام الى الرقم الذي يملكه هذا المتغير

كما ذكرنا

global x

ومن ثم اسندنا للمتغير قيمة التي سوف يصل تاثيرها لخارج الدالة

x =4

ومن ثم قمنا باعادة القيمة

return x

ثم عملنا متغير ويحتوي على رقم

5 ولاننا نريد ان يتغير هذا الرقم الى الرقم الذي في داخل الدالة

x =5

ثم قمنا بطباعة اول شيء الدالة ليتم العمل على المتغيرات

print chan

ومن ثم قمنا بطبع المتغير الذي سوف نغيره

اعتقد المثال واضح

ولا تثبت على هذا المثال يوجد عدة امثلة ابحث وانت واكتب بنفسك امثلة

تم بحمد الله تعالى

4 - Assert

دالة تحققية اي انها تتاكد من وجود شيء انت تحدده سواء كان رقم او اسم او رمز وغيرها ... وهي بسيطة العمل

مثال بسيط

s = "mustafa"
assert (s)=="ahmed"
print "hello"

عملنا متغير يحتوي على اسم lمصطفى

ثم تاكدنا ان المتغير يحتوي على اسم

ثم طبعنا كلمة hello

تمرين *

اعمل متغير يحتوي ارقام واتاكد هل المتغير يحتوي على رقم 5

ثم اطبع اي جملة !!

iتم كل شيء بحمد وفضل الله تعالى

هذه اغلب الدوال التي كان يعانيي منها المتبدئين في تطبيقها

قمت باختصار شديد للامثلة واختصار للكلام لكي يسهل ولا حبيت ان اتعمق في عمل الدوال يبقى عليك انت فقط

عليك بالذهاب كتابة في الكوكل اسم الدالة مع بايثون بالانكليزي واقرء عليها واتعمق لكي تسهل عليك

*ملاحضة لاتنسى التمارين

ومارس يدك كثيرا

اذا كان الموضوع يستحق التثبيت خيرا على خيرا واذا كان لا ايضا خيرا على خيرا المهم الفائدة تعم

ادعولي فقط في اتقانه هذه اللغة

احترامي

تم تعديل هذه المشاركة بواسطة MuStafa - HaSsan في 21 سبتمبر 2012 في 03:29

1

salah.jpg

#2

يوجد بعض الأخطاء الكتابية في الأكواد خصوصا الدمج بين " و ' حول string ما والمسافات البادئة indentations

بخصوص ال lambda فهي تنشئ دالة مجهولة الإسم وتستخدم في البرمجة الوظيفية بصورة كبيرة وغير "محبذ" إستخدامها في بايثون ولكن إستخدام الدوال العادية ( وهي first class على كل حال)

>>> l=range(10)
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> filter(lambda x : x%2==0, l)
[0, 2, 4, 6, 8]
>>> filter(lambda x : x%2!=0, l)
[1, 3, 5, 7, 9]

أنظر هنا للإستزادة

/index.php?showtopic=266113

بخصوص assert فالأمر ليس كذلك

فassert هي جملة statement وليست دالة تقوم بالتحقق من expression معين وإلا فتقوم برفع خطأ AssertionError

>>> x=5

>>> def raise_number( val ):
...     assert type(val)==int
...     global x
...     x=x+val
... 
>>> raise_number(2)
>>> x
7

>>> raise_number("ahmed")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in raise_number
AssertionError

اما global فصياغتك في الموضوع ليست واضحة ولكن لعل المثال السابق يوضحها

فهي تستخدمها عندما تريد الوصول لمتغيرات خارج الدالة (فالمتغير x في المثال السابق تم تعريفه خارج الدالة) وللتعامل معه قم بتعريف بايثون ذلك عبر

global variableName

تم تعديل هذه المشاركة بواسطة ahmed_youssef في 21 سبتمبر 2012 في 02:50

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#3

لا اعتقد اكو مشكلة من حيث دالة filter

بالنسبة الى lambda

انتة الان اعطيتها تعريف . غيرك اعطى لها تعريف لكن غير منطق

انا كتبته حسب الي افهمه انا فاشكرك على تعريفك له

بالنسبة لل assert

hانا اعرف دالة تخص statement

لكن للتوضيح اكثر للشخص فهي كانها تقوم بالتحقيق

ويبين ذلك من خلال كود انت جعلته كل شي يمرر له يكون int

اشكرك على تنبيهي بالاخطاء

واشكرك مرة ثانية

salah.jpg

مواضيع مشابهة