You are on page 1of 36

The Way To Python 3 … Functions…. ‫ الطريق إلى برمجة بلغة البايثون‬..

… Author , Eng/ Mahmoud 1


‫جذول انمحتىياث‬

‫انفصم األول ‪ :‬مقذمت في دوال انبايثىن ‪3 ...................................... Introduction To Functions‬‬

‫انفصم انثاوي ‪ :‬معامالث انذوال انتكزاريت ‪9 ........................................... Functions Arguments‬‬

‫انفصم انثانث ‪ :‬انتكزاريت أو اطتذعاء انىفض ‪13 ....................... ................................ Recursion‬‬

‫انفصم انزابع ‪ :‬انذانت انمجهىنت ‪ /‬المذا ‪16 .............................. Anonymous /Lambda Function‬‬

‫انفصم انخامض ‪ :‬انمتغيزاث انعانميت وانمحهيت وانغيز محهيت ‪19 ..... Global &Local & Nonlocal variables‬‬

‫انفصم انظادص ‪ :‬انكهمت انمحجىسة عانمي ‪23 .............. ................................ Global Keyword‬‬

‫انفصم انظابع ‪ :‬انىحذاث ‪22 ............... ................................ ................................ Modules‬‬

‫انفصم انثامه ‪ :‬انحشمت ‪33 ................. ................................ ................................ Package‬‬

‫انخاتمت ‪35 .................................................................................................‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪2‬‬
‫ميحرلا نمحرلا هللا‬ ‫بسم‬
‫انطزيق إنى انبزمجت بهغت انبايثىن‬
‫‪The Way to Python programming‬‬

‫انذرص األول ‪ :‬مقذمت في انذوال‬


‫)‪(Introduction to Functions‬‬
‫رُ ئػذاد ٘زا اٌىزبة وبِلا ِٓ ػذح ِظبدس أ‪ٌٙٚ‬ب ‪ٚ‬أّ٘‪ٙ‬ب ِ‪ٛ‬لغ ‪. https://www.programiz.com‬‬

‫ف‪٘ ٟ‬زٖ اٌغضء ‪ ،‬عززؼشف ػٍ‪ ٝ‬اٌذ‪ٚ‬اي أ‪ ٚ‬اٌ‪ٛ‬ظبئف ‪ِٚ ،‬ب ٘‪ ٟ‬اٌذاٌخ ‪ِٚ ،‬ب ٘‪ ٛ‬ثٕبء اٌغٍّخ ٌٍذ‪ٚ‬اي ‪، syntax‬‬
‫ؼب و‪١‬ف‪١‬خ ئٔشبء داٌخ ف‪. Python ٟ‬‬ ‫‪ٚ‬اٌّى‪ٔٛ‬بد ‪ٚ ، components‬أٔ‪ٛ‬اع اٌذ‪ٚ‬اي ‪ ،‬وّب عززؼٍُ أ‪ ٠‬ا‬

‫‪ : Functions ‬اٌذ‪ٚ‬اي أ‪ ٚ‬اٌ‪ٛ‬ظبئف‬


‫اٌذاٌةةخ ‪ Function‬أ‪ ٚ‬اٌ‪ٛ‬ظ‪١‬فةةخ ٘ةة‪ ٟ‬ػجةةبسح ػةةٓ ِغّ‪ٛ‬ػةةخ ِةةٓ اٌؼجةةبساد ‪ statements‬اٌ ُّشرجطةةخ ثجؼؼةة‪ٙ‬ب‬
‫‪ٚ‬اٌز‪ ٟ‬رإد‪ِّٙ ٞ‬خ ِؾذدح أ‪ٚ ٚ‬ظ‪١‬فخ ِؾذدح ‪.‬‬

‫رغبػذ اٌذ‪ٚ‬اي ف‪ ٟ‬رمغ‪ ُ١‬ثشٔبِغٕب ئٌ‪ ٝ‬أعضاء أطةرش أ‪ ٚ‬رمغةّخ ئٌة‪ٚ ٝ‬ؽةذاد ‪ِٚ modular‬ةغ ّٔة‪ ٛ‬ثشٔبِغٕةب‬
‫ثشىً أوجش ‪ٚ‬أوجش‪ ،‬فاْ اٌذ‪ٚ‬اي رغؼٍٗ أوضش رٕظ‪ّ١‬ب ا ‪ٚ‬أوضش لبثٍ‪١‬خ ٌإلداسح ‪ٚ‬اٌزؾىُ ‪.‬‬

‫‪١٘ ‬ىً ‪ٚ‬شىً ثٕبء اٌغٍّخ ‪Syntax :‬‬


‫‪def function_name(parameters):‬‬

‫"""‪"""docstring‬‬

‫)‪statement(s‬‬

‫‪return‬‬

‫‪ِ : def ‬ؼٕب٘ب رؼش‪٠‬ف ‪ ٝ٘ٚ‬اخزظبس وٍّخ ‪definition‬‬


‫٘‪ ٝ‬وٍّخ سئ‪١‬غ‪١‬خ ‪ Keyword‬رّضً ثذا‪٠‬خ سأط اٌذاٌخ ‪ٚ‬رغزخذَ ٌزؼش‪٠‬ف اٌذ‪ٚ‬اي ‪ٚ‬اٌفئبد ‪.‬‬

‫‪ : function_name ‬اعُ اٌذاٌخ‬


‫اعُ اٌذاٌخ ‪٠‬غت أْ ‪٠‬ى‪ ْٛ‬اعُ فش‪٠‬ذ ‪ٚ‬رزجغ رغّ‪١‬خ اٌذ‪ٚ‬اي ٔفظ ل‪ٛ‬اػذ وزبثخ اٌّؼشفبد ف‪ ٟ‬ثب‪٠‬ض‪. ْٛ‬‬

‫‪ : parameters ‬اٌّؼبِلد أ‪ ٚ‬اٌ‪ٛ‬عبئؾ ‪ ٝ٘ٚ arguments‬اٌؼ‪ٛ‬اًِ اٌز‪ ٟ‬رزر‪١‬ش ف‪ ٟ‬اٌزغشثخ‬


‫‪ِ ٝ٘ٚ‬زر‪١‬شاد اٌز‪ ِٓ ٟ‬خلٌ‪ٙ‬ب ّٔشس اٌم‪ ُ١‬ئٌ‪ ٝ‬داٌخ ‪ ٝ٘ٚ ،‬ل‪ ُ١‬اخز‪١‬بس‪٠‬خ‪.‬‬

‫‪ ‬إٌمطزبْ (‪ ):‬رغزخذَ ٌزؾذ‪٠‬ذ ٔ‪ٙ‬ب‪٠‬خ سأط اٌذاٌخ‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪3‬‬
‫‪ : docstring ‬عٍغٍخ اٌز‪ٛ‬ص‪١‬ك ‪ ٝ٘ٚ‬اخزظبس ٌغٍّخ ‪documentation string‬‬
‫رغزخذَ ٘زٖ اٌغٍغٍخ ٌ‪ٛ‬طف ػًّ اٌذاٌخ أ‪ ٚ‬اٌ‪ٛ‬ظ‪١‬فخ ‪ ٝ٘ٚ ،‬ل‪ّ١‬خ اخز‪١‬بس‪٠‬خ ‪.‬‬

‫‪ : statement ‬عٍّخ أ‪ ٚ‬عًّ ثب‪٠‬ض‪ ٝ٘ٚ ْٛ‬ػجبسح ػٓ عٍّخ ‪ٚ‬اؽذ أ‪ ٚ‬أوضش ِٓ عٍّخ ‪ٚ‬اٌز‪ ٟ‬رشىً عغُ‬
‫اٌذاٌخ ‪٠ٚ ،‬زُ رٕف‪١‬ز٘ب ف‪ ٟ‬وً ِشح ‪٠‬زُ اعزذػبء اٌذاٌخ ‪٠ٚ ،‬غت أْ رؾز‪٘ ٞٛ‬زٖ اٌ ُغًّ ‪ statements‬ػٍ‪ٝ‬‬
‫ٔفظ ِغز‪ ٜٛ‬اٌّغبفخ اٌجبدئخ (ػبدح ا ‪ِ 4‬غبفبد)‪.‬‬
‫‪ : return ‬ئسعبع‬
‫رغزخذَ ٘زٖ اٌىٍّخ إلسعبع ل‪ّ١‬خ ِٓ اٌذاٌخ ‪ ٝ٘ٚ ،‬وٍّخ اخز‪١‬بس‪٠‬خ ‪.‬‬

‫و‪١‬ف‪١‬خ رؼش‪٠‬ف داٌخ ‪definition a function‬‬

‫‪ِ ‬ضبي ػٍ‪ ٝ‬رؼش‪٠‬ف ‪ٚ‬ئٔشبء داٌخ داخً ٌرخ ‪: python‬‬


‫‪def greet(name):‬‬
‫"""‬
‫‪This function greets to‬‬
‫‪the person passed in as‬‬
‫‪a parameter‬‬
‫"""‬
‫)"!‪print("Hello, " + name + ". Good morning‬‬

‫‪ ‬لّٕب ثزؼش‪٠‬ف داٌخ ػٓ ؽش‪٠‬ك اٌىٍّخ ‪ٚ ، def‬لّٕب ثبػطبئ‪ٙ‬ب اعُ ‪٘ٚ greet‬زٖ اٌذاٌخ رأخز ِؼبًِ ‪، name‬‬
‫‪ٚ‬ثبٌزبٌ‪ ٟ‬ػٓ رّش‪٠‬ش أ‪ ٞ‬ل‪ّ١‬خ ٔظ‪١‬خ داخً اٌذاٌخ ع‪ٛ‬ف ‪٠‬أخز ٘زٖ اٌم‪ّ١‬خ ‪٠ٚ‬م‪ َٛ‬ثطبثؼز‪ٙ‬ب ‪.‬‬

‫‪ ‬رغّ‪ ٝ‬اٌغٍغٍخ األ‪ ٌٝٚ‬ثؼذ سأط اٌذاٌخ ثبعُ ‪ ٟ٘ٚ docstring‬اخزظبس ٌغٍّخ عٍغٍخ اٌز‪ٛ‬ص‪١‬ك‬
‫‪٠ٚ ، documentation string‬زُ اعزخذاِ‪ٙ‬ب ٌفزشح ‪ٚ‬ع‪١‬ضح ٌششػ ػًّ اٌذاٌخ ‪.‬الؽع وً إٌض‬
‫اٌّ‪ٛ‬ع‪ٛ‬د ث‪ ٛ٘ """ """ ٓ١‬ػجبسح ػٓ ‪ٚ‬طف ٌٍذاٌخ ‪ٚ‬ششػ ٌ‪ٙ‬ب ٌزغ‪ ً١ٙ‬ف‪ ُٙ‬األو‪ٛ‬اد ‪.‬‬

‫‪ ‬ػٍ‪ ٝ‬اٌشغُ ِٓ أْ اٌز‪ٛ‬ص‪١‬ك اخز‪١‬بس‪ ، ٞ‬ئال أٔٗ ‪٠‬ؼذ ِّبسعخ ثشِغخ ع‪١‬ذح ؽ‪١‬ش ‪٠‬زوشن ثبألو‪ٛ‬اد ‪.‬‬

‫‪ ‬ػٕذ رّش‪٠‬ش ل‪ّ١‬خ ‪ name‬ع‪ٛ‬ف ‪٠‬زُ اعزخذاِ‪ٙ‬ب ف‪ ٟ‬عٍّخ اٌطجبػخ وّب ٘‪ِ ٛ‬ىز‪ٛ‬ة داخً عغُ اٌذاٌخ ‪.‬‬

‫‪ ‬فىشح ػًّ اٌذ‪ٚ‬اي ٘‪ٔ ٝ‬فغ‪ٙ‬ب فىشح ػًّ رؼش‪٠‬ف اٌّزر‪١‬شاد ‪ٔ ٝ٘ٚ ،‬فغ‪ٙ‬ب فىشح ػًّ اٌفئبد ‪، classes‬‬
‫ألْ وً شئ داخً ٌرخ اٌجب‪٠‬ض‪ ْٛ‬ػجبسح ػٓ وبئٓ ‪ ،‬فىّب ٔم‪ َٛ‬ثزؼش‪٠‬ف ِزر‪١‬ش صُ اعزذػبئٗ ثؼذ رٌه ‪ ،‬فإٔب‬
‫أ‪٠‬ؼب ا ثؼذ رؼش‪٠‬ف اٌذاٌخ ٔم‪ َٛ‬ثبعزذػبئ‪ٙ‬ب (ثٕبد‪ ٞ‬ػٍ‪ٙ١‬ب ‪٠‬ؼٕ‪.)ٝ‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪4‬‬
‫و‪١‬ف‪١‬خ اعزذػبء اٌذاٌخ ‪call a function‬‬
‫ثّغشد رؾذ‪٠‬ذ اٌذاٌخ ثبعزخذاَ ‪ّ٠ ، def‬ىٕٕب رغّ‪١‬ز‪ٙ‬ب ِٓ خلي داٌخ آخش‪ ٜ‬أ‪ ٚ‬ثشٔبِظ آخش أ‪ ٚ‬ؽز‪ِٓ ٝ‬‬
‫شبشخ أ‪ٚ‬اِش اٌجب‪٠‬ض‪ ْٛ‬أ‪ِٛ ٚ‬عٗ اٌجب‪٠‬ض‪ٚ Python prompt ْٛ‬العزذػبء داٌخ ‪ٔ ،‬م‪ َٛ‬ثجغبؽخ ثىزبثخ اعُ‬
‫اٌذاٌخ ِغ ِؼبِلد اٌزّش‪٠‬ش إٌّبعجخ وب‪٢‬ر‪: ٟ‬‬

‫)'‪>>> greet('Paul‬‬

‫‪ ‬الحظ أن عند استدعاء الدالة فالبد أن نمرر لها اسم ‪ ،‬فأي قيمة ستكتبها بين القوسين ) ( فهذه سوف‬
‫تستخدم داخل جسم الدالة فعندما مررنا كلمة ‪ Paul‬تم طباعتها ‪.‬‬

‫‪output‬‬
‫!‪Hello, Paul. Good morning‬‬

‫‪ ‬ف‪ ٟ‬اٌّضبي اٌغبثك ‪ٌ ،‬ذ‪ٕ٠‬ب عٍغٍخ ‪ docstring‬أعفً سأط اٌ‪ٛ‬ظ‪١‬فخ ِجبششح‪ٔ .‬غزخذَ ثشىً ػبَ ػلِبد‬
‫االلزجبط اٌضلص‪١‬خ ثؾ‪١‬ش ‪ّ٠‬ىٓ أْ رّزذ عٍغٍخ ‪ docstring‬ئٌ‪ ٝ‬أعطش ِزؼذدح‪.‬‬

‫‪٘ ‬زٖ اٌغٍغٍخ ِزبؽخ ٌٕب وظفخ ٌٍذاٌخ ‪ّ٠ٚ attribute of the function‬ىٓ اعزذػبء ٘زٖ ‪ docstring‬ػٓ‬
‫ؽش‪٠‬ك وٍّخ __‪. __doc‬‬

‫)__‪>>> print(greet.__doc‬‬

‫‪output‬‬
‫‪This function greets to‬‬
‫‪the person passed in as‬‬
‫‪a parameter‬‬

‫‪ِ : Access point ‬ؼبًِ اٌذخ‪ٛ‬ي ‪٠ٚ‬شِض ٌٗ ثبٌشِض ) ‪( .‬‬


‫٘‪ِ ٛ‬ؼبًِ ‪٠‬غزخذَ ٌٍذخ‪ٛ‬ي داخً اٌذاٌةخ ‪ function‬أ‪ ٚ‬داخةً اٌفئةخ ‪ٚ ، class‬ثبٌزةبٌ‪ّ٠ ٟ‬ىٕٕةب ِةٓ اٌؾظة‪ٛ‬ي‬
‫ػٍ‪ ٝ‬خبط‪١‬خ أ‪ ٚ‬ل‪ّ١‬خ ِزر‪١‬ش ِٓ داخً اٌذاٌخ ‪.‬‬

‫‪ : return keyword ‬ئسعبع‬


‫عٍّخ رُغزخذَ إلٔ‪ٙ‬بء اٌذاٌخ أ‪ٌ ٚ‬إلسعبع أ‪ٌٍ ٚ‬خش‪ٚ‬ط ِٓ اٌذاٌخ ‪ٚ‬اٌؼ‪ٛ‬دح ئٌ‪ ٝ‬اٌّىبْ اٌز‪ ٞ‬رُ اعزذػبءٖ ِٕٗ‪.‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪5‬‬
‫‪ّ٠ ‬ىٓ أْ رؾز‪٘ ٞٛ‬زٖ اٌؼجبسح ػٍ‪ ٝ‬رؼج‪١‬ةش ‪٠ expression‬ةزُ رم‪ّ١١‬ةٗ صةُ ئسعةبع ل‪ّ١‬ةخ ٘ةزا اٌزؼج‪١‬ةش ‪ٚ ،‬ئرا ٌةُ‬
‫‪٠‬ىٓ ٕ٘بن رؼج‪١‬ش ف‪ ٟ‬اٌؼجبسح أ‪ ٚ‬ئرا وبٔذ ػجبسح ‪ٔ return‬فغ‪ٙ‬ب غ‪١‬ش ِ‪ٛ‬ع‪ٛ‬دح داخً داٌخ ‪ ،‬فةاْ اٌذاٌةخ عةزؼ‪١‬ذ‬
‫اٌىبئٓ ‪. None‬‬

‫))"‪>>> print(greet("May‬‬
‫!‪Hello, May. Good morning‬‬
‫‪None‬‬

‫‪ ‬الؽع أْ ‪ ٛ٘ None‬اٌم‪ّ١‬خ اٌز‪ ٟ‬رُ ئسعبػ‪ٙ‬ب ثؼذ ؽجبػخ االعُ ِجبششح ‪ٚ‬ال ‪٠‬زُ اعزخذاَ عٍّخ ‪. return‬‬

‫‪ِ ‬ضبي ػٍ‪ ٝ‬اعزخذاَ ‪ return‬داخً ٌرخ ‪: python‬‬


‫‪def absolute_value(num):‬‬
‫‪"""This function returns the absolute‬‬
‫"""‪value of the entered number‬‬

‫‪if num >= 0:‬‬


‫‪return num‬‬
‫‪else:‬‬
‫‪return -num‬‬

‫))‪print(absolute_value(2‬‬

‫))‪print(absolute_value(-4‬‬

‫‪output‬‬
‫‪2‬‬
‫‪4‬‬

‫و‪١‬ف رؼًّ اٌذ‪ٚ‬اي داخً ٌرخ اٌجب‪٠‬ض‪ ْٛ‬؟‬


‫‪ ‬أوالً نقوم بتعريف الدالة ‪.‬‬
‫‪ ‬ثانيا ً نقوم باستدعاء الدالة لتنفيذ االكواد بداخلها ‪.‬‬
‫‪ ‬وفي كل مرة نستدعي الدالة يتم تنفيذ األكواد بداخلها ‪.‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪6‬‬
‫‪ٔ : Scope and Lifetime of variables‬طبق اٌّزر‪١‬شاد ‪ٚ‬ػّش٘ب ‪.‬‬
‫‪ٔ : Scope of variables ‬طبق اٌّزر‪١‬ش أ‪ِ ٚ‬ذ‪ ٜ‬اٌّزر‪١‬ش‬
‫ٔطبق اٌّزر‪١‬ش ٘‪ ٛ‬عضء اٌجشٔبِظ ؽ‪١‬ش ‪٠‬زُ اٌزؼشف ػٍ‪ ٝ‬اٌّزر‪١‬ش ‪ ،‬ال ‪ّ٠‬ىٓ سؤ‪٠‬خ اٌّؼٍّبد ‪Parameters‬‬
‫‪ٚ‬اٌّزر‪١‬شاد ‪ variables‬اٌز‪ ٟ‬رُ رؾذ‪٠‬ذ٘ب داخً داٌخ ِٓ خبسط اٌذاٌخ ‪ٚ‬ثبٌزبٌ‪ ٟ‬فاْ ٘زٖ ‪ٚ Parameters‬‬
‫‪٠ variables‬ى‪ٌّٙ ْٛ‬ب ٔطبق ِؾٍ‪. local scope ٟ‬‬

‫ػّش اٌّزر‪١‬ش أ‪ ٚ‬ؽ‪١‬بح اٌّزر‪١‬ش‬‫‪ُ : Lifetime of variables ‬‬


‫ػّش اٌّزر‪١‬ش ٘‪ ٛ‬اٌفزشح اٌز‪ٕ٠ ٟ‬ز‪ ٟٙ‬ف‪ٙ١‬ب اٌّزر‪١‬ش ف‪ ٟ‬اٌزاوشح ‪ٚ ،‬ػّش اٌّزر‪١‬شاد داخً داٌخ ٘‪ِ ٛ‬ب داِذ‬
‫‪٠‬زُ رٕف‪١‬ز اٌذاٌخ ‪٠ ٚ ، function executes‬زُ رذِ‪١‬ش٘ب ثّغشد ػ‪ٛ‬درٕب ِٓ اٌذاٌخ ‪ٚ‬ثبٌزبٌ‪ ، ٟ‬ال رززوش اٌذاٌخ‬
‫ل‪ّ١‬خ ِزر‪١‬ش ِٓ اعزذػبءار‪ٙ‬ب اٌغبثمخ‪.‬‬

‫‪ِ ‬ضبي داخً ٌرخ ‪: python‬‬


‫‪def my_func():‬‬
‫‪x = 10‬‬
‫)‪print("Value inside function:",x‬‬

‫‪x = 20‬‬
‫)(‪my_func‬‬
‫)‪print("Value outside function:",x‬‬

‫‪output‬‬
‫‪Value inside function: 10‬‬
‫‪Value outside function: 20‬‬

‫‪ٔ ‬لؽع أْ ل‪ّ١‬خ ‪ x‬رغب‪ 02 ٞٚ‬ف‪ ٟ‬اٌجذا‪٠‬خ ‪ ،‬ػٍ‪ ٝ‬اٌةشغُ ِةٓ أْ اٌذاٌةخ ()‪ my_func‬لةذ غ‪١‬ةشد ل‪ّ١‬ةخ ‪x‬‬
‫ئٌ‪ ، 02 ٝ‬ئال أٔ‪ٙ‬ب ٌُ رإصش ػٍ‪ ٝ‬اٌم‪ّ١‬خ خبسط اٌذاٌخ ‪٘ٚ‬زا اٌغجت ألْ اٌّزر‪١‬ش ‪ x‬داخً اٌذاٌخ ِزر‪١‬ش ِؾٍ‪ٟ‬‬
‫‪ local variable‬ثبٌٕغجخ ٌٍذاٌخ ‪ِ ٛ٘ٚ‬زر‪١‬ش ِخزٍف ػٓ اٌّزر‪١‬ش اٌّ‪ٛ‬ع‪ٛ‬د خبسط اٌذاٌخ ػٍة‪ ٝ‬اٌةشغُ ِةٓ‬
‫أٔ‪ّٙ‬ب ‪٠‬ؾّلْ ٔفظ األعّبء ‪ ،‬ئال أٔ‪ّٙ‬ب ِزر‪١‬ش‪ِ ٓ٠‬خزٍف‪ٌّٙ ٓ١‬ب ٔطبلبد ‪ِ scopes‬خزٍفخ ‪.‬‬

‫‪ٔ ِٓ ‬بؽ‪١‬خ أخش‪ّ٠ ، ٜ‬ىٓ سؤ‪٠‬خ اٌّزر‪١‬شاد اٌّ‪ٛ‬ع‪ٛ‬دح خبسط اٌذاٌخ ِٓ داخةً اٌذاٌةخ ()‪ٚ my_func‬رٌةه‬
‫ألْ اٌّزر‪١‬ش اٌّ‪ٛ‬ع‪ٛ‬د خبسط اٌذاٌخ ٌذ‪ٔ ٗ٠‬طبق ػبٌّ‪ٚ global scope ٟ‬ثبٌزةبٌ‪ّ٠ ٟ‬ىٕٕةب لةشاءح ٘ةزٖ اٌمة‪ُ١‬‬
‫ِٓ داخً اٌذاٌخ ‪ٌٚ‬ىٓ ال ‪ّ٠‬ىٕٕب رر‪١١‬ش٘ب (وزبثز‪ٙ‬ب)‪ٌٚ .‬ى‪ ٟ‬رم‪ َٛ‬ثزؼذ‪ ً٠‬ل‪ّ١‬خ اٌّزر‪١‬ةشاد اٌّ‪ٛ‬عة‪ٛ‬دح خةبسط‬
‫اٌذاٌخ ‪٠‬غت اإلػلْ ػٕ‪ٙ‬ب وّزر‪١‬شاد ػبٌّ‪١‬خ ثبعزخذاَ اٌىٍّخ األعبع‪١‬خ ‪. global‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪2‬‬
‫‪ : Types of Functions‬أٔ‪ٛ‬اع اٌذ‪ٚ‬اي‬
‫ف‪ ٟ‬األعبط ‪ّ٠ ،‬ىٕٕب رمغ‪ ُ١‬اٌذ‪ٚ‬اي ئٌ‪ ٝ‬إٌ‪ٛ‬ػ‪ ٓ١‬اٌزبٌ‪:ٓ١١‬‬
‫‪ : Built-in functions ‬د‪ٚ‬اي ِذِغخ أ‪ِ ٚ‬ؼّٕخ‬
‫‪ ٝ٘ٚ‬د‪ٚ‬اي ِجٕ‪١‬خ ‪ِٚ‬ضؾذدح ِغجمب ُ داخً ٌرخ ثب‪٠‬ض‪ٕ٘ٚ ، ْٛ‬بن اٌّئبد ِٓ اٌذ‪ٚ‬اي اٌ ُّؾؾذح ِغجمب ا ‪ِٛٚ‬ع‪ٛ‬دح‬
‫داخً ٌرخ اٌجب‪٠‬ض‪ِ ْٛ‬ضً داٌخ اٌطجبػخ )(‪ٚ print‬داٌخ االدخبي )(‪ٚ input‬غ‪١‬ش٘ب ‪...‬‬

‫‪ : User-defined functions ‬د‪ٚ‬اي ‪٠‬ؾذد٘ب اٌّغزخذَ‬


‫‪ ٝ٘ٚ‬د‪ٚ‬اي ‪٠‬ؾذد٘ب ‪ٕ٠ٚ‬شأ٘ب اٌّغزخذَ ٔفغٗ ‪ّ٠ ،‬ىٓ ئٔشبء د‪ٚ‬اي ال ؽظش ٌ‪ٙ‬ب ِضً اٌذاٌخ اٌز‪ ٟ‬لّٕب ثبٔشبئ‪ٙ‬ب‬
‫ِغجمب ُ ِضً داٌخ ()‪ٚ my_func‬داٌخ )(‪٘ٚ greet‬ىزا ‪..‬‬

‫ِّ‪١‬ضاد اٌذ‪ٚ‬اي اٌز‪٠ ٟ‬ؾذد٘ب اٌّغزخذَ ‪User-defined functions‬‬


‫‪ ‬رغبػذ اٌذ‪ٚ‬اي اٌز‪٠ ٟ‬ؾذد٘ب اٌّغزخذَ ػٍ‪ ٝ‬رفى‪١‬ه ثشٔبِظ وج‪١‬ش ئٌ‪ ٝ‬أعضاء طر‪١‬شح ِّب ‪٠‬غ‪ ًٙ‬ف‪ُٙ‬‬
‫اٌجشٔبِظ ‪ٚ‬ط‪١‬بٔزٗ ‪ٚ‬رظؾ‪١‬ؼ األخطبء‪.‬‬
‫‪ ‬ئرا ‪ٚ‬ع‪ٛ‬د أو‪ٛ‬اد ِىشسح ف‪ ٟ‬اٌجشٔبِظ ‪ّ٠‬ىٓ اعزخذاَ اٌذاٌخ ٌزؼّ‪ ٓ١‬رٍه األو‪ٛ‬اد ‪ٚ‬رٕف‪١‬ز٘ب ػٕذ اٌؾبعخ‬
‫ػٓ ؽش‪٠‬ك اعزذػبء ٘زٖ اٌذاٌخ‪.‬‬
‫‪ّ٠ ‬ىٓ ٌٍّجشِغ‪ ٓ١‬اٌز‪٠ ٓ٠‬ؼٍّ‪ ْٛ‬ف‪ِ ٟ‬شش‪ٚ‬ع وج‪١‬ش رمغ‪ ُ١‬ػتء اٌؼًّ ػٓ ؽش‪٠‬ك ػًّ د‪ٚ‬اي ِخزٍفخ‪.‬‬

‫‪ِ ‬ضبي داخً ٌرخ ‪: python‬‬


‫‪# Program to illustrate‬‬
‫‪# the use of user-defined functions‬‬

‫‪def add_numbers(x,y):‬‬
‫‪sum = x + y‬‬
‫‪return sum‬‬

‫‪num1 = 5‬‬
‫‪num2 = 6‬‬

‫))‪print("The sum is", add_numbers(num1, num2‬‬

‫‪output‬‬
‫‪Enter a number: 2.4‬‬
‫‪Enter another number: 6.5‬‬
‫‪The sum is 8.9‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪8‬‬
‫ ُمعامالث انذوال‬: ‫انذرص انثاوي‬
(Python Functions Arguments)

‫ذ‬٠‫خ رؾذ‬١‫ف‬١‫ف رزؼٍُ و‬ٛ‫ ٘زٖ اٌذسط ع‬ٟ‫ف‬ٚ ، arguments ‫عبئؾ‬ٌٛ‫شا ِٓ ا‬١‫ِزر‬
‫ا‬ ‫ذ داٌخ رأخز ػذداا‬٠‫ّىٕه رؾذ‬٠
. arbitrary arguments ٚ keyword ٚ default ً‫خ ِض‬١‫غ‬١‫اي ثبعزخذاَ اٌىٍّبد اٌشئ‬ٚ‫٘زٖ اٌذ‬

‫اٌّؼبِلد‬ٚ‫عبئؾ أ‬ٌٛ‫ ا‬ٚ‫ ِؼٕب٘ب اٌؾغظ أ‬:Arguments 


. ‫ش‬١‫لذ رزر‬ٚ ‫ش٘ب داخً اٌذاٌخ‬٠‫زُ رّش‬٠ ُ١‫ ل‬ٝ٘ Argument ‫طبد‬١‫ع‬ٌٛ‫ا‬

def greet(name, msg):


"""This function greets to
the person with the provided message"""
print("Hello", name + ', ' + msg)

greet("Monica", "Good morning!")

output
Hello Monica, Good morning!

‫ٔظشا ا ألٕٔب‬ٚ ، msg ٟٔ‫ؾ اٌضب‬١‫ع‬ٌٛ‫ا‬ٚ name ‫ي‬ٚ‫ؾ األ‬١‫ع‬ٌٛ‫ ا‬2 Arguments ْ‫ ٘زٖ اٌذاٌخ رأخز ِؼبِل‬
. ‫ذ‬١‫ز اٌذاٌخ ثشىً ع‬١‫زُ رٕف‬٠ٚ ‫ؾذس خطأ‬٠ ‫ش ِؼبِلْ فأٗ ال‬٠‫لّٕب ثزّش‬ٚ ‫ٕب ٘زٖ اٌذاٌخ‬١‫اعزذػ‬
: ٟ‫ر‬٢‫ؾذس خطأ وب‬٠ ٗٔ‫اؽذ فا‬ٚ Argument ‫ش‬٠‫الؽع ػٕذ رّش‬
>>> greet("Monica") # only one argument
TypeError: greet() missing 1 required positional argument: 'msg'

: ٟ‫ر‬٢‫ؾذس خطأ وب‬٠ ٗٔ‫ فا‬Argument ٞ‫ش أ‬٠‫الؽع ػٕذ ػذَ رّش‬
>>> greet() # no arguments
TypeError: greet() missing 2 required positional arguments: 'name' and 'msg'

Variable Function Arguments ‫شح‬١‫ِؼبِلد اٌذاٌخ اٌّزر‬


‫ف‬٠‫ ٌزؼش‬ٜ‫عذ ؽشق أخش‬ٛ‫ ر‬، ْٛ‫ض‬٠‫ ثب‬ٟ‫ف‬ٚ ، Arguments ‫عبئؾ‬ٌٛ‫اي ػذد صبثذ ِٓ ا‬ٚ‫ وبْ ٌٍذ‬، ْ٢‫ ا‬ٝ‫ؽز‬
. Arguments ‫عبئؾ‬ٌٛ‫شا ِٓ ا‬١‫ِزر‬
‫ا‬ ‫ب أْ رأخز ػذداا‬ٕٙ‫ّى‬٠ ‫داٌخ‬

The Way To Python 3 … Functions…. ‫ الطريق إلى برمجة بلغة البايثون‬..… Author , Eng/ Mahmoud 9
‫‪٠ ‬زُ ‪ٚ‬طف صلصخ أشىبي ِخزٍفخ ِٓ ٘زا إٌ‪ٛ‬ع وب‪٢‬ر‪: ٟ‬‬
‫‪ ‬أ‪ٚ‬الا ‪ِ : Default Arguments :‬ؼبِلد رؾز‪ ٞٛ‬ػٍ‪ ٝ‬ل‪ ُ١‬افزشاػ‪١‬خ‬
‫‪ّ٠‬ىٕٕب اعزخذاَ ل‪ّ١‬خ افزشاػ‪١‬خ ‪ Default‬داخً ِؼبِلد اٌذاٌخ ثبعزخذاَ ػبًِ اإلعٕبد (=) ‪.‬‬

‫‪def greet(name, msg="Good morning!"):‬‬


‫"""‬
‫‪This function greets to‬‬
‫‪the person with the‬‬
‫‪provided message.‬‬

‫‪If the message is not provided,‬‬


‫‪it defaults to "Good‬‬
‫"!‪morning‬‬
‫"""‬

‫)‪print("Hello", name + ', ' + msg‬‬

‫)"‪greet("Kate‬‬
‫)"?‪greet("Bruce", "How do you do‬‬

‫‪output‬‬
‫!‪Hello Kate, Good morning‬‬
‫?‪Hello Bruce, How do you do‬‬

‫‪ ‬اٌم‪ ُ١‬االفزشاػ‪١‬خ ‪ ٝ٘: default values‬لة‪٠ ُ١‬ةزُ اعةزخذاِ‪ٙ‬ب داخةً ‪ٚ‬عة‪١‬طبد اٌذاٌةخ ‪٠ٚ ،‬ةزُ اعةزخذاِ‪ٙ‬ب فة‪ٟ‬‬
‫ؽبٌخ ػذَ ادخبي اٌّغزخذَ ل‪ّ١‬خ غ‪١‬ش٘ب ‪ٚ ،‬ئرا ٌةُ ‪٠‬ةذخً اٌّغةزخذَ ل‪ّ١‬ةخ غ‪١‬ش٘ةب فغة‪ٛ‬ف ‪٠‬ةزُ اعةزخذاَ اٌم‪ّ١‬ةخ‬
‫االفزشاػ‪١‬خ اٌز‪ ٟ‬رُ رؾذ‪٠‬ذ٘ب ِغجمب ا ‪.‬‬

‫‪ ‬ف‪ ٟ‬اٌّضبي اٌغبثك ٔلؽع أْ اٌذاٌخ )(‪ greet‬رؾز‪ ٞٛ‬ػٍ‪ٚ ٝ‬ع‪١‬ط‪ 2 Arguments ٓ١‬وب‪٢‬ر‪: ٟ‬‬
‫‪ِ : name parameter ‬ؼبِةةً أ‪ٚ ٚ‬عةة‪١‬ؾ ‪٘ٚ name‬ةةزا ‪ Argument‬ال ‪٠‬ؾزةة‪ ٞٛ‬ػٍةة‪ ٝ‬ل‪ّ١‬ةةخ افزشاػةة‪١‬خ‬
‫ٌزٌه ٘زا اٌ‪ٛ‬ع‪١‬ؾ ل‪ّ١‬خ ِطٍ‪ٛ‬ثخ ثشىً ئٌضاِ‪ mandatory ٟ‬أصٕبء اعزذػبء اٌذاٌخ ‪.‬‬

‫‪ : msg parameter ‬اٌ‪ٛ‬ع‪١‬ؾ ‪٘ٚ msg‬زا ‪٠ Argument‬ؾز‪ ٞٛ‬ػٍة‪ ٝ‬ل‪ّ١‬ةخ افزشاػة‪١‬خ ‪default value‬‬
‫ل‪ّ١‬ز‪ٙ‬ةب "!‪ٌ "Good morning‬ةزٌه ٘ةزا اٌ‪ٛ‬عة‪١‬ؾ غ‪١‬ةش ئٌضاِة‪ ٟ‬ف‪ٙ‬ة‪ ٛ‬ل‪ّ١‬ةخ اخز‪١‬بس‪٠‬ةخ ‪optional value‬‬
‫أصٕبء اعزذػبء اٌذاٌخ ‪ٚ ،‬ئرا رُ ر‪ٛ‬ف‪١‬ش ل‪ّ١‬خ ‪ ،‬فغ‪١‬زُ اعزجذاٌ‪ٙ‬ب ‪ overwrite‬ثبٌم‪ّ١‬خ االفزشاػ‪١‬خ‪.‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪11‬‬
ْٛ‫ى‬٠ ْ‫ٌىٓ ثّغشد أ‬ٚ . ‫خ‬١‫ُ افزشاػ‬١‫ب ل‬ٌٙ ٟ‫ اٌز‬Arguments ِٓ ‫ ػذد‬ٞ‫ْ داخً اٌذاٌخ أ‬ٛ‫ى‬٠ ْ‫ّىٓ أ‬٠ 
ٍٝ‫دح ػ‬ٛ‫ع‬ٌّٛ‫ ا‬arguments ‫غ‬١ّ‫ ع‬ٞٛ‫غت أْ رؾز‬١‫ ف‬default argument ٟ‫ٕب ِؼبًِ افزشاػ‬٠‫ٌذ‬
non-default ‫خ‬١‫ش افزشاػ‬١‫ّىٓ ٌٍّؼبِلد اٌر‬٠ ‫ أٔٗ ال‬ٟٕ‫ؼ‬٠ ‫٘زا‬ٚ ، ‫خ‬١‫ُ افزشاػ‬١‫ ل‬ٍٝ‫ؼب ػ‬
‫ ا‬٠‫ٓ أ‬١ّ١ٌ‫ا‬
‫ اٌذاٌخ‬ٟ‫ فّضلا ػٕذِب ٔغزذػ‬، default arguments ‫خ‬١‫ أْ رزجغ اٌّؼبِلد االفزشاػ‬arguments
: ٟ‫ر‬٢‫ٓ ِؼبِلد اٌذاٌخ وب‬١‫ً ث‬٠‫َ ثبٌزجذ‬ٛ‫ٔم‬ٚ

def greet(msg = "Good morning!", name):

: ‫غخ‬١‫ْ ٘زٖ إٌز‬ٛ‫عزى‬

SyntaxError: non-default argument follows default argument

‫خ‬١‫غ‬١‫ وٍّبد سئ‬ٍٝ‫ ػ‬ٞٛ‫ ِؼبِلد رؾز‬: Keyword Arguments : ‫ب ا‬١ٔ‫ صب‬
arguments ‫ اٌّؼبِلد‬ٌٟ‫ُ ئ‬١‫ض ٘زٖ اٌم‬١‫زُ رخظ‬٠ ، values ُ١‫ داٌخ ِغ ثؼغ اٌم‬ٟ‫ػٕذِب ٔغزذػ‬
‫ض‬١‫رخظ‬ٚ ‫ اٌذاٌخ‬ٟ‫ ػٕذِب ٔغزذػ‬، greet() ‫ اٌذاٌخ‬ٟ‫ ف‬، ‫ً اٌّضبي‬١‫ عج‬ٍٝ‫ػ‬. position ‫ب‬ٙ‫ػؼ‬ٌّٛ ‫ؽجمب ا‬
:ٟ‫ر‬٢‫ب وب‬ٌٙ ُ١‫ثؼغ اٌم‬
greet("Bruce", "How do you do?")

How do you do ‫ّخ‬١‫ٓ اٌم‬١١‫زُ رؼ‬٠ ً‫ثبٌّض‬ٚ name ‫ي‬ٚ‫ " ٌٍّؼبًِ األ‬Bruce" ‫ّخ‬١‫ٓ اٌم‬١١‫زُ رؼ‬١‫فغ‬
.msg ٟٔ‫ اٌّؼبًِ اٌضب‬ٌٝ‫ئ‬

، Keyword Arguments ‫خ‬١‫غ‬١‫اي ثبعزخذاَ ِؼبِلد اٌىٍّبد اٌشئ‬ٚ‫ ثبعزذػبء اٌذ‬Python ‫رغّؼ‬
: ٟ‫ر‬٢‫ػغ) اٌّؼبِلد وب‬ِٛ( ‫ت‬١‫ش رشر‬١١‫ّىٓ رر‬٠ ، ‫مخ‬٠‫زٖ اٌطش‬ٙ‫اي ث‬ٚ‫ اٌذ‬ّٟ‫ػٕذِب ٔغ‬ٚ

# 2 keyword arguments
greet(name = "Bruce",msg = "How do you do?")

# 2 keyword arguments (out of order)


greet(msg = "How do you do?",name = "Bruce")

1 positional, 1 keyword argument


greet("Bruce", msg = "How do you do?")

. ‫ؾخ‬١‫غ ؽشق االعزذػبء اٌغبثمخ طؾ‬١ّ‫ الؽع ع‬


‫ ِغ ِؼبِلد‬positional arguments ‫خ‬١‫ػؼ‬ٌّٛ‫عبئؾ ا‬ٌٛ‫ّىٕٕب ِضط ا‬٠ ‫ ػٕذ اعزذػبء اٌذاٌخ‬ٜ‫ وّب ٔش‬
‫ اػزجبسٔب أْ ِؼبِلد اٌىٍّبد‬ٟ‫غت أْ ٔؼغ ف‬٠ ٓ‫ ٌى‬keyword arguments ‫خ‬١‫غ‬١‫اٌىٍّبد اٌشئ‬
. positional arguments‫خ‬١‫ػؼ‬ٌّٛ‫غت أْ رزجغ اٌؾغظ ا‬٠ keyword arguments ‫خ‬١‫غ‬١‫اٌشئ‬

The Way To Python 3 … Functions…. ‫ الطريق إلى برمجة بلغة البايثون‬..… Author , Eng/ Mahmoud 11
‫خ‬١‫غ‬١‫ ثؼذ ِؼبِلد اٌىٍّبد اٌشئ‬positional argument ‫خ‬١‫ػؼ‬ِٛ ‫د ِؼبِلد‬ٛ‫ع‬ٚ ٞ‫إد‬١‫ ع‬
: ٌٟ‫ اٌزب‬ٛ‫ إٌؾ‬ٍٝ‫س أخطبء ِضً اعزذػبء اٌذاٌخ ػ‬ٚ‫ ؽذ‬ٌٝ‫ ئ‬keyword arguments

greet(name="Bruce","How do you do?")

output
SyntaxError: non-keyword arg after keyword arg

‫خ‬١‫ائ‬ٛ‫ ِؼبِلد ػش‬ٚ‫خ أ‬١‫ ِؼبِلد رؼغف‬: Arbitrary Arguments : ‫ صبٌضب ا‬
‫ ٌزٌه‬، ‫ داٌخ‬ٌٝ‫ش٘ب ئ‬٠‫زُ رّش‬١‫ ع‬ٟ‫ اٌز‬Arguments ‫ ال ٔؼشف ِغجماب ػذد اٌّؼبِلد‬، ْ‫ب‬١‫ ثؼغ األؽ‬ٟ‫ف‬
ٟ‫ائ‬ٛ‫الف ِٓ خلي اعزذػبءاد داٌخ ِغ ػذد ػش‬ٌّٛ‫ع ِٓ ا‬ٌٕٛ‫ اٌزؼبًِ ِغ ٘زا ا‬Python ‫ؼ ٌٕب ٌرخ‬١‫رز‬
ًِ‫ك اعزخذاَ ػلِخ إٌغّخ (*) لجً اعُ اٌّؼب‬٠‫فخ ػٓ ؽش‬١‫ظ‬ٌٛ‫ف ا‬٠‫ رؼش‬ٟ‫زُ رٌه ف‬٠ٚ ، ‫ِٓ اٌّؼبِلد‬
ٌٟ‫ الؽع اٌّضبي اٌزب‬. ‫ع ِٓ اٌّؼبِلد‬ٌٕٛ‫ ٘زا ا‬ٌٝ‫ٌإلشبسح ئ‬

def greet(*names):
"""This function greets all
the person in the names tuple."""

# names is a tuple with arguments


for name in names:
print("Hello", name)

greet("Monica", "Luke", "Steve", "John")

output
Hello Monica
Hello Luke
Hello Steve
Hello John

‫ ٘زٖ اٌّؼبِلد‬wrapped ‫ف‬١ٍ‫زُ رر‬٠ . ‫ ِٓ اٌّؼبِلد‬ٟ‫ائ‬ٛ‫ الؽع ٌمذ لّٕب ثبعزذػبء اٌذاٌخ ِغ ػذد ػش‬
‫غ اٌّؼبِلد‬١ّ‫ داخً اٌذاٌخ العزؼبدح ع‬for ‫ٔغزخذَ ؽٍمخ‬ٚ ، ‫ اٌذاٌخ‬ٌٝ‫ش٘ب ئ‬٠‫ لجً رّش‬tuple ‫خ‬١ٕ‫داٌخ ث‬
.ٜ‫ِشح أخش‬

The Way To Python 3 … Functions…. ‫ الطريق إلى برمجة بلغة البايثون‬..… Author , Eng/ Mahmoud 12
‫انذرص انثانث ‪ :‬انتكزاريت‬
‫)‪(Recursion‬‬
‫ف‪٘ ٟ‬زا اٌذسط ‪ ،‬عززؼٍُ و‪١‬ف‪١‬خ ئٔشبء داٌخ رىشاس‪٠‬خ ‪( recursive function‬داٌخ رغزذػ‪ٔ ٟ‬فغ‪ٙ‬ب)‪.‬‬

‫‪ِ : Recursion ‬ؼٕب٘ب اٌؼُ‪ٛ‬د‪٠‬خ‬


‫اٌؼ‪ٛ‬د‪٠‬خ ‪ ٝ٘ Recursion‬ػٍّ‪١‬خ رؼش‪٠‬ف ش‪ٟ‬ء ِب ِٓ ؽ‪١‬ش رارٗ (داٌخ رغزذػ‪ٔ ٟ‬فغ‪ٙ‬ب)‪.‬‬

‫‪ : Python Recursive Function‬اٌذاٌخ اٌزىشاس‪٠‬خ داخً اٌجب‪٠‬ض‪ْٛ‬‬


‫ف‪ ٟ‬ثب‪٠‬ض‪ٔ ، ْٛ‬ؼٍُ أْ اٌذاٌخ ‪ّ٠‬ىٕ‪ٙ‬ب اعزذػبء د‪ٚ‬اي أخش‪١ٌ ، ٜ‬ظ ٘زا فمؾ ثً ِٓ اٌّّىٓ أْ رم‪ َٛ‬اٌذاٌخ أ‪٠‬ؼب ا‬
‫ثبعزذػبء ٔفغ‪ٙ‬ب ‪ٚ ،‬رغّ‪٘ ٝ‬زٖ األٔ‪ٛ‬اع ِٓ اإلٔشبءاد ثبٌذ‪ٚ‬اي اٌزىشاس‪٠‬خ ‪.‬‬

‫‪ ‬ؽش‪٠‬مخ ػًّ داٌخ رىشاس‪٠‬خ رغّ‪.recurse ٝ‬‬

‫‪ : factorial ‬اٌّؼش‪ٚ‬ة ٘‪ ٛ‬ؽبطً ػشة عّ‪١‬غ األػذاد اٌظؾ‪١‬ؾخ ِٓ ‪ 0‬ئٌ‪٘ ٝ‬زا اٌشلُ ‪ ،‬ػٍ‪ ٝ‬عج‪ً١‬‬
‫اٌّضبي ‪ِ ،‬ؼش‪ٚ‬ة ‪ُ٠( 6‬شبس ئٌ‪ ٗ١‬ثبٌشِض !‪: ٛ٘ ) 6‬‬

‫‪ِ ‬ضبي ػٍ‪ ٝ‬داٌخ رىشاس‪٠‬خ ٌٍؾظ‪ٛ‬ي ػٍ‪ِ ٝ‬ؼش‪ٚ‬ة ‪ factorial‬ػذد طؾ‪١‬ؼ‪.‬‬

‫‪def factorial(x):‬‬
‫"""‪"""This is a recursive function to find the factorial of an integer‬‬

‫‪if x == 1:‬‬
‫‪return 1‬‬
‫‪else:‬‬
‫))‪return (x * factorial(x-1‬‬

‫‪num = 3‬‬
‫))‪print("The factorial of", num, "is", factorial(num‬‬

‫‪output‬‬
‫‪The factorial of 3 is 6‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪13‬‬
‫‪ ‬ف‪ ٟ‬اٌّضبي اٌغبثك ‪ ،‬اٌذاٌخ )(‪ ٝ٘ factorial‬داٌخ رىشاس‪٠‬خ رغذػ‪ٔ ٟ‬فغ‪ٙ‬ب‪.‬‬

‫‪ ‬ػٕذِب ٔغذػ‪٘ ٟ‬زٖ اٌذاٌخ ‪ّٔٚ‬شس ٌ‪ٙ‬ب ػذداا طؾ‪ ١‬اؾب ِ‪ٛ‬عجاب ‪ ،‬فأ‪ٙ‬ب عزغزذػ‪ٔ ٟ‬فغ‪ٙ‬ب ثشىً ِزىشس ػٓ‬
‫ؽش‪٠‬ك رمٍ‪ ً١‬اٌشلُ اٌز‪ ٞ‬رُ رّش‪٠‬شٖ ؽز‪ ٟ‬رظً ئٌ‪ ٝ‬اٌم‪ّ١‬خ ‪. 1‬‬

‫‪ٚ ‬وً داٌخ رؼشة اٌشلُ ثّؼش‪ٚ‬ة اٌشلُ اٌّ‪ٛ‬ع‪ٛ‬د أعفٍٗ ؽز‪ ٝ‬رظً ئٌ‪ ٝ‬اٌم‪ّ١‬خ ‪ّ٠ .1‬ىٓ ششػ ٘زٖ‬
‫اعزذػبء اٌذاٌخ ‪ recursive call‬ف‪ ٟ‬اٌخط‪ٛ‬اد اٌزبٌ‪١‬خ‪.‬‬

‫)‪factorial(3‬‬ ‫‪# 1st call with 3‬‬

‫)‪3 * factorial(2‬‬ ‫‪# 2nd call with 2‬‬

‫)‪3 * 2 * factorial(1‬‬ ‫‪# 3rd call with 1‬‬

‫‪3 * 2 * 1‬‬ ‫‪# return from 3rd call as number=1‬‬

‫‪3 * 2‬‬ ‫‪# return from 2nd call‬‬

‫‪6‬‬ ‫‪# return from 1st call‬‬

‫‪ ‬الؽع اٌششػ خط‪ٛ‬ح ثخط‪ٛ‬ح وّب ف‪ ٟ‬اٌظ‪ٛ‬سح اٌزبٌ‪١‬خ ‪:‬‬

‫‪ ‬رٕز‪ ٟٙ‬داٌخ ‪ recursion‬ػٕذِب ‪ٕ٠‬خفغ اٌؼذد ئٌ‪.0 ٝ‬‬


‫‪٘ٚ‬زا ِب ‪٠‬غّ‪ ٝ‬اٌششؽ األعبع‪.base condition ٟ‬‬

‫‪٠ ‬غت أْ رؾز‪ ٞٛ‬وً داٌخ رىشاس‪٠‬خ ػٍ‪ ٝ‬ششؽ أعبع‪ٟ‬‬


‫‪ٛ٠‬لف ‪ٚ recursion‬ئال ع‪ٛ‬ف رغزذػ‪ ٟ‬اٌذاٌخ ٔفغ‪ٙ‬ب‬
‫ثل ؽذ‪ٚ‬د ‪. infinitely‬‬

‫‪٠ ‬مًٍ ‪ ِٓ interpreter‬اٌزؼّك ‪ ٚ‬اعزخذاَ اٌذاٌخ‬


‫‪ٌٍّ recursion‬غبػذح ف‪ ٟ‬رغٕت اٌؼ‪ٛ‬د‪٠‬خ اٌلٔ‪ٙ‬بئ‪١‬خ‬
‫‪ِّ ، infinite recursions‬ب ‪٠‬إد‪ ٞ‬ئٌ‪stack ٝ‬‬
‫‪overflows‬‬

‫‪ ‬ثشىً افزشاػ‪ ، ٟ‬اٌؾذ األلظ‪ٌ ٝ‬ؼّك اٌؼ‪ٛ‬د‪٠‬خ ٘‪ٛ‬‬


‫‪ .0222‬ئرا رُ رغب‪ٚ‬ص اٌؾذ ‪ ،‬فأٗ ‪ٕ٠‬زظ ػٕٗ‬
‫‪ RecursionError‬دػ‪ٔٛ‬ب ٍٔم‪ٔ ٟ‬ظشح ػٍ‪ ٝ‬ؽبٌخ‬
‫‪ٚ‬اؽذح ِٓ ٘زا اٌمج‪.ً١‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪14‬‬
def recursor():
recursor()
recursor()

output
Traceback (most recent call last):
File "<string>", line 3, in <module>
File "<string>", line 2, in a
File "<string>", line 2, in a
File "<string>", line 2, in a
[Previous line repeated 996 more times]
RecursionError: maximum recursion depth exceeded

Advantages of Recursion ‫ضاد داٌخ اٌزىشاس‬١ِّ


.‫ك‬١ٔ‫أ‬ٚ ‫ف‬١‫ ٔظ‬ٚ‫جذ‬٠ ‫د‬ٛ‫خ اٌى‬٠‫اي اٌزىشاس‬ٚ‫ رغؼً اٌذ‬
. Recursion َ‫خ أثغؾ ثبعزخذا‬١‫ّبد فشػ‬ِٙ ٌٝ‫ّخ ِؼمذح ئ‬ِٙ ُ١‫ّىٓ رمغ‬٠ 
‫ً ِٓ اعزخذاَ ثؼغ اٌزىشاساد اٌّزذاخٍخ‬ٙ‫ أع‬Recursion ‫ ِغ‬Sequence ً‫ ئٔشبء اٌزغٍغ‬
. nested iteration

Disadvantages of Recursion ‫ة داٌخ اٌزىشاس‬ٛ١‫ػ‬


. Recursive ‫ساء‬ٚ ِٓ‫ظؼت ِزبثؼخ إٌّطك اٌىب‬٠ ْ‫ب‬١‫ ثؼغ األؽ‬ٟ‫ ف‬
‫ٍه‬ٙ‫ب رغز‬ٙٔ‫ ) أل‬inefficient ‫ش فؼبٌخ‬١‫ ثب٘ظخ اٌضّٓ (غ‬Recursive calls ‫ االعزذػبءاد اٌّزىشسح‬
. time ‫لذ‬ٌٛ‫ا‬ٚ memory ‫ش ِٓ اٌزاوشح‬١‫اٌىض‬
. debug ‫ب‬ٙ‫ؾ‬١‫ظؼت رظؾ‬٠ Recursive functions ‫خ‬٠‫اي اٌزىشاس‬ٚ‫ اٌذ‬

The Way To Python 3 … Functions…. ‫ الطريق إلى برمجة بلغة البايثون‬..… Author , Eng/ Mahmoud 15
‫انذرص انزابع ‪ :‬انذانت انمجهىنت ‪ /‬المذا‬
‫)‪(Anonymous /Lambda Function‬‬
‫ؼب ثبعُ داٌخ الِذا‬
‫ف‪٘ ٟ‬زا اٌذسط ‪ ،‬عززؼشف ػٍ‪ ٝ‬اٌذاٌخ اٌّغ‪ٌٛٙ‬خ ‪ٚ ، Anonymous‬اٌّؼش‪ٚ‬فخ أ‪ ٠‬ا‬
‫‪ٚ Lambda‬ع‪ٛ‬ف رزؼٍُ ِب ٘‪ٚ ، ٟ‬و‪١‬ف‪١‬خ رشو‪١‬ج‪ٙ‬ب ‪ٚ‬و‪١‬ف‪١‬خ اعزخذاِ‪ٙ‬ب ِغ أِضٍخ‪.‬‬

‫‪ : Anonymous ‬اٌذاٌخ اٌّغ‪ٌٛٙ‬خ‬


‫اٌذاٌخ اٌّغ‪ٌٛٙ‬خ ‪ ٝ٘ Anonymous‬داٌخ ِغ‪ٌٛٙ‬خ االعُ ؽ‪١‬ش ‪٠‬زُ رؼش‪٠‬ف‪ٙ‬ب ثذ‪ ْٚ‬اعُ ‪.‬‬

‫‪ : lambda functions in Python‬اٌذ‪ٚ‬اي اٌّغ‪ٌٛٙ‬خ داخً ٌرخ اٌجب‪٠‬ض‪ْٛ‬‬


‫ؼةب ‪ٚ‬ظةبئف الِةذا‪ٚ ،‬وّةب‬ ‫ف‪ٌ ٟ‬رخ ‪ ، Python‬اٌذاٌخ اٌّغ‪ٌٛٙ‬خ ٘‪ ٟ‬داٌخ ‪٠‬ةزُ رؼش‪٠‬ف‪ٙ‬ةب ثةذ‪ ْٚ‬اعةُ ‪ٚ ،‬رغةّ‪ ٝ‬أ‪ ٠‬ا‬
‫دسعةٕب ِغةجمب ا ‪٠‬ةةزُ رؾذ‪٠‬ةذ اٌذاٌةةخ اٌؼبد‪٠‬ةخ ‪ normal functions‬ثبعةةزخذاَ اٌىٍّةخ األعبعةة‪١‬خ ‪ ، def‬ث‪ّٕ١‬ةب ‪٠‬ةةزُ‬
‫رؾذ‪٠‬ذ اٌذاٌخ اٌّغ‪ٌٛٙ‬خ ‪ anonymous functions‬ثبعزخذاَ اٌىٍّخ األعبع‪١‬خ ‪.lambda‬‬

‫‪: Syntax ‬‬


‫‪lambda arguments: expression‬‬

‫‪ّ٠‬ىةةٓ أْ رؾزةة‪ ٞٛ‬د‪ٚ‬اي ‪ Lambda‬ػٍةة‪ ٝ‬أ‪ ٞ‬ػةةذد ِةةٓ اٌ‪ٛ‬عةة‪١‬طبد ‪ٌٚ arguments‬ىةةٓ رؾزةة‪ ٞٛ‬ػٍةة‪ ٝ‬رؼج‪١‬ةةش‬
‫‪ٚ expression‬اؽةةذ فمةةؾ ‪٠ ،‬ةةزُ رم‪١‬ةة‪ ُ١‬اٌزؼج‪١‬ةةش ‪ٚ‬ئػبدرةةٗ‪ّ٠ .‬ىةةٓ اعةةزخذاَ د‪ٚ‬اي ‪ Lambda‬ؽ‪١‬ضّةةب وبٔةةذ وبئٕةةبد‬
‫اٌذ‪ٚ‬اي ‪ِ function objects‬طٍ‪ٛ‬ثخ‪.‬‬

‫‪ِ ‬ضبي ػٍ‪ ٝ‬داٌخ ‪ lambda‬اٌز‪ ٟ‬رؼبػف ل‪ّ١‬خ اإلدخبي ‪.‬‬

‫‪# Program to show the use of lambda functions‬‬


‫‪double = lambda x: x * 2‬‬

‫))‪print(double(5‬‬

‫‪output‬‬
‫‪10‬‬

‫‪ ‬فةةة‪ ٟ‬اٌجشٔةةةبِظ اٌغةةةبثك ‪٠‬ةةةزُ اعةةةزخذاَ داٌةةةخ ‪ٕ٘ٚ، lambda‬ةةةب ‪٘ x‬ةةة‪ ٟ‬ػجةةةبسح ػةةةٓ اٌّؼبِةةةً أ‪ ٚ‬اٌ‪ٛ‬عةةة‪١‬ؾ‬
‫‪ٚ argument‬اٌم‪ّ١‬خ ‪ ٟ٘ x * 2‬اٌزؼج‪١‬ش اٌز‪٠ ٞ‬زُ رم‪ٚ ّٗ١١‬ئػبدرٗ‪.‬‬

‫‪٘ ‬زٖ اٌذاٌخ ٌ‪١‬ظ ٌ‪ٙ‬ب اعُ ‪ٚ ،‬رم‪ َٛ‬ثاسعبع وبئٓ اٌذاٌخ اٌز‪ ٞ‬رُ رؼ‪١ٌ ٕٗ١١‬م‪ َٛ‬ثّؼبػفخ اٌ ُّؼشف‪.‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪16‬‬
‫‪٘ : Anymouse Function Syntax ‬زٖ داٌخ الِذا‬
‫‪double = lambda x: x * 2‬‬

‫‪٘ : Normal Function Syntax ‬زٖ داٌخ ػبد‪٠‬خ ‪ ٝ٘ٚ‬رمش‪٠‬جب ا ٔفظ اٌذاٌخ اٌغبثمخ‬
‫‪def double(x):‬‬

‫‪return x * 2‬‬

‫ٔغزخذَ د‪ٚ‬اي ‪ lambda‬ػٕةذِب ٔؾزةبط ئٌة‪ ٝ‬داٌةخ غ‪١‬ةش ِؼش‪ٚ‬فةخ ٌفزةشح لظة‪١‬شح ِةٓ اٌةضِٓ‪.‬ففة‪ٌ ٟ‬رةخ اٌجةب‪٠‬ض‪، ْٛ‬‬
‫ٔغزخذِ‪ٙ‬ب ػّ‪ ٛ‬اِب و‪ٛ‬ع‪١‬طخ أ‪ ٚ‬وّؼبًِ ٌذاٌخ راد رشر‪١‬ت أػٍ‪٘ٚ( higher-order function ٝ‬ة‪ ٝ‬داٌةخ رأخةز‬
‫د‪ٚ‬اي أخش‪ ٜ‬و‪ٛ‬عبئؾ ‪.)arguments‬‬

‫رُغزخذَ ‪ٚ‬ظبئف ‪ Lambda‬عٕجاب ئٌ‪ ٝ‬عٕت ِغ اٌذ‪ٚ‬اي اٌّؼّٕخ ِضً داٌخ )(‪ٚ filter‬داٌخ )(‪ map‬ئٌخ‪.‬‬

‫‪ِ ‬ضبي ‪ 0‬ػٍ‪ ٝ‬داٌخ ‪ِ lambda‬غ داٌخ )(‪ٌ filter‬فٍزشح األسلبَ اٌض‪ٚ‬ع‪١‬خ فمؾ ِٓ اٌمبئّخ ‪list‬‬

‫‪# Program to filter out only the even items from a list‬‬
‫]‪my_list = [1, 5, 4, 6, 8, 11, 3, 12‬‬

‫))‪new_list = list(filter(lambda x: (x%2 == 0) , my_list‬‬

‫)‪print(new_list‬‬

‫‪output‬‬
‫]‪[4, 6, 8, 12‬‬

‫‪ : filter() function ‬اٌذاٌخ فٍزش‬


‫داٌخ رم‪ َٛ‬ثؼًّ رظف‪١‬خ أ‪ ٚ‬رٕم‪١‬خ ‪ ٝ٘ٚ‬رأخز ِؼبِلْ ‪:‬‬
‫‪ ‬اٌّؼبًِ األ‪ٚ‬ي ػجبسح ػٓ داٌخ ‪ٚ lambda‬اٌز‪ ٟ‬رم‪ َٛ‬ثبخزجبس رؼج‪١‬ش ‪ ٛ٘ٚ expression‬اٌزؾمك ِٓ‬
‫وً ل‪ّ١‬خ ص‪ٚ‬ع‪١‬خ داخً ‪. lsit‬‬
‫‪ ‬اٌّؼبًِ اٌضبٔ‪ ٟ‬ػجبسح ػٓ لبئّخ ‪. list‬‬

‫‪٠ ‬زُ اعزذػبء اٌذاٌخ ِغ عّ‪١‬غ اٌؼٕبطش اٌّ‪ٛ‬ع‪ٛ‬دح ف‪ ٟ‬اٌمبئّخ ‪٠ٚ my_list‬زُ ئسعبع لبئّخ عذ‪٠‬ذح ‪new_list‬‬
‫رؾز‪ ٞٛ‬ػٍ‪ ٝ‬اٌؼٕبطش اٌز‪ ٟ‬رؾمك اٌششؽ ‪ٚ‬رشعغ ‪ True‬ػٓ ؽش‪٠‬ك رم‪ ُ١١‬اٌذاٌخ ‪ٌٙ lambda‬ب ‪.‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪12‬‬
‫‪ِ ‬ضبي ‪ 0‬ػٍ‪ ٝ‬داٌخ ‪ِ lambda‬غ داٌخ )(‪ٌّ map‬ؼبػفخ وً األسلبَ اٌّ‪ٛ‬ع‪ٛ‬دح داخً اٌمبئّخ ‪list‬‬

‫)(‪# Program to double each item in a list using map‬‬

‫]‪my_list = [1, 5, 4, 6, 8, 11, 3, 12‬‬

‫))‪new_list = list(map(lambda x: x * 2 , my_list‬‬

‫)‪print(new_list‬‬

‫‪output‬‬
‫]‪[2, 10, 8, 12, 16, 22, 6, 24‬‬

‫‪ : map() function ‬اٌذاٌخ اٌخش‪٠‬طخ‬


‫داٌخ رم‪ َٛ‬ثزٕف‪١‬ز ‪ٚ‬ظ‪١‬فخ ِؾذدح ٌىً ػٕظش ف‪ ٟ‬اٌؼٕظش اٌمبثً ٌٍزىشاس ؽ‪١‬ش ‪٠‬زُ ئسعبي اٌؼٕظش ئٌ‪ ٝ‬اٌذاٌخ‬
‫وّؼبًِ أ‪ٚ ٚ‬ع‪١‬ؾ ‪ ٝ٘ٚ‬رأخز ِؼبِلْ ‪:‬‬
‫‪ ‬اٌّؼبًِ األ‪ٚ‬ي ػجبسح ػٓ داٌخ ‪ٚ lambda‬اٌز‪ ٟ‬رم‪ َٛ‬ثبخزجبس رؼج‪١‬ش ‪ ٛ٘ٚ expression‬اٌزؾمك ِٓ‬
‫وً ل‪ّ١‬خ ص‪ٚ‬ع‪١‬خ داخً ‪. lsit‬‬
‫‪ ‬اٌّؼبًِ اٌضبٔ‪ ٟ‬ػجبسح ػٓ لبئّخ ‪list‬‬

‫‪٠ ‬زُ اعزذػبء اٌذاٌخ ِغ عّ‪١‬غ اٌؼٕبطش اٌّ‪ٛ‬ع‪ٛ‬دح ف‪ ٟ‬اٌمبئّخ ‪٠ٚ my_list‬زُ ئسعبع لبئّخ عذ‪٠‬ذح ‪new_list‬‬
‫رؾز‪ ٞٛ‬ػٍ‪ ٝ‬اٌؼٕبطش اٌز‪ ٟ‬رؾمك اٌششؽ ‪ٚ‬رشعغ ‪ True‬ػٓ ؽش‪٠‬ك رم‪ ُ١١‬اٌذاٌخ ‪ٌٙ lambda‬ب ‪.‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪18‬‬
‫انذرص انخامض ‪ :‬انمتغيزاث انعانميت وانمحهيت وانغيز محهيت‬
‫)‪(Global &Local & Nonlocal variables‬‬
‫ف‪٘ ٟ‬زا اٌذسط عززؼشف ػٍ‪ِ ٝ‬زر‪١‬شاد ثب‪٠‬ض‪ ْٛ‬وبٌّزر‪١‬شاد اٌؼبٌّ‪١‬خ ‪ٚ Global varaible‬اٌّزر‪١‬شاد‬
‫اٌّؾٍ‪١‬خ ‪ٚ local varaibles‬اٌّزر‪١‬شاد غ‪١‬ش اٌّؾٍ‪١‬خ ‪ٚ Nonlocal variables‬عٕزؼشف ػٍ‪ ٝ‬أِبوٓ‬
‫اعزخذاِ‪ٙ‬ب ‪.‬رؼشفٕب عبثمب ا ف‪ ٟ‬اٌغضء األ‪ٚ‬ي ػٓ ٔطبق اٌّزر‪١‬شاد ‪. scope of variables‬‬

‫‪ : Global Variables ‬اٌّزر‪١‬شاد اٌؼبٌّ‪١‬خ أ‪ ٚ‬اٌّزر‪١‬شاد اٌشبٍِخ أ‪ ٚ‬اٌّزر‪١‬شاد اٌؼبِخ‬


‫اٌّزر‪١‬ةةشاد اٌؼبٌّ‪١‬ةةخ ‪٘ Global Variables‬ةة‪ ٝ‬اٌّزر‪١‬ةةشاد اٌزةة‪٠ ٟ‬ةةزُ اإلػةةلْ ػٕ‪ٙ‬ةةب خةةبسط اٌذاٌةةخ أ‪ ٚ‬فةة‪ٟ‬‬
‫إٌطبق اٌؼبٌّ‪٘ ، global scope ٟ‬زا ‪٠‬ؼٕ‪ ٟ‬أٔٗ ‪ّ٠‬ىٓ اٌ‪ٛ‬ط‪ٛ‬ي ئٌ‪ ٝ‬اٌّزر‪١‬ش اٌشبًِ داخً أ‪ ٚ‬خبسط اٌذاٌخ‪.‬‬

‫‪ِ ‬ضبي ػٍ‪ ٝ‬ئٔشبء ِزر‪١‬ش ػبٌّ‪: global variable ٟ‬‬

‫"‪x = "global‬‬

‫‪def foo():‬‬
‫)‪print("x inside:", x‬‬

‫)(‪foo‬‬
‫)‪print("x outside:", x‬‬

‫‪output‬‬
‫‪x inside: global‬‬
‫‪x outside: global‬‬

‫أخ‪١‬ةشا ‪،‬‬
‫ا‬ ‫‪ ‬ف‪ ٟ‬اٌّضبي اٌغبثك أٔشأٔب ِزر‪١‬شػبٌّ‪ ٟ‬اعّٗ ‪ٚ x‬ؽذدٔب داٌخ ()‪ٌ foo‬طجبػةخ اٌّزر‪١‬ةش اٌؼةبٌّ‪ x ٟ‬صةُ‬
‫ٔغزذػ‪ ٟ‬اٌذاٌخ )(‪ foo‬ؽ‪١‬ش عزطجغ ل‪ّ١‬خ ‪ِ . x‬برا ٌ‪ ٛ‬وٕذ رش‪٠‬ذ رر‪١١‬ش ل‪ّ١‬خ ‪ x‬داخً داٌخ ؟‬
‫"‪x = "global‬‬

‫‪def foo():‬‬
‫‪x = x * 2‬‬
‫)‪print(x‬‬

‫)(‪foo‬‬

‫‪output‬‬
‫‪UnboundLocalError: local variable 'x' referenced before assignment‬‬

‫‪ُ٠ ‬ظ‪ٙ‬ةةةش اإلخةةةشاط خطةةةأ ا ألْ ‪ Python‬رؼبِةةةً ‪ x‬وّزر‪١‬ةةةش ِؾٍةةة‪ٌٚ ٟ‬ةةةُ ‪٠‬ةةةزُ رؼش‪٠‬ةةةف ‪ x‬أ‪ ٠‬ا‬
‫ؼةةةب داخةةةً ()‪.foo‬‬
‫‪ٌٚ‬زؼش‪٠‬ف اٌّزر‪١‬ش وّزر‪١‬ش ػةبٌّ‪ٔ ٟ‬غةزخذَ اٌىٍّةخ األعبعة‪١‬خ اٌؼبٌّ‪١‬ةخ ‪ .global‬عةٕزؼشف ػٍ‪ٙ١‬ةب ثشةىً أوجةش‬
‫ف‪ ٟ‬اٌذسط اٌمبدَ ‪.‬‬
‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪19‬‬
‫‪ : local Variables ‬اٌّزر‪١‬شاد اٌّؾٍ‪١‬خ‬
‫اٌّزر‪١‬شاد اٌّؾٍ‪١‬خ ‪ ٝ٘ local Variables‬اٌّزر‪١‬شاد اٌز‪٠ ٟ‬ةزُ اإلػةلْ ػٕ‪ٙ‬ةب داخةً اٌذاٌةخ أ‪ ٚ‬فة‪ ٟ‬إٌطةبق‬
‫اٌّؾٍ‪٘ ، local scope ٟ‬زا ‪٠‬ؼٕ‪ ٟ‬أٔٗ ال ‪ّ٠‬ىٓ اٌ‪ٛ‬ط‪ٛ‬ي ئٌ‪ ٝ‬اٌّزر‪١‬ش اٌّؾٍ‪ ٟ‬ئال ِٓ داخً اٌذاٌخ فمؾ‪.‬‬

‫‪ِ ‬ضبي ػٍ‪ ٝ‬اٌ‪ٛ‬ط‪ٛ‬ي ئٌ‪ ٝ‬اٌّزر‪١‬ش اٌّؾٍ‪ ِٓ local scope ٟ‬خبسط ‪: scope‬‬

‫‪def foo():‬‬
‫"‪y = "local‬‬

‫)(‪foo‬‬
‫)‪print(y‬‬

‫‪output‬‬
‫‪NameError: name 'y' is not defined‬‬

‫‪ُ٠ ‬ظ‪ٙ‬ةةش اإلخةةشاط خطةةأ ا ألْ ‪ Python‬ألٕٔةةب ٔؾةةب‪ٚ‬ي اٌ‪ٛ‬طةة‪ٛ‬ي ئٌةة‪ِ ٝ‬زر‪١‬ةةش ِؾٍةة‪ y ٟ‬فةة‪ٔ ٟ‬طةةبق ػةةبٌّ‪ ٟ‬ث‪ّٕ١‬ةةب‬
‫اٌّزر‪١‬ش اٌّؾٍ‪٠ ٟ‬ؼًّ فمؾ داخً )(‪ foo‬أ‪ ٚ‬إٌطبق اٌّؾٍ‪.ٟ‬‬

‫‪ِ ‬ضبي ػٍ‪ ٝ‬ئٔشبء ِزر‪١‬ش ِؾٍ‪: local variable ٟ‬‬

‫‪def foo():‬‬
‫"‪y = "local‬‬
‫)‪print(y‬‬

‫)(‪foo‬‬

‫‪output‬‬
‫‪local‬‬

‫‪ : Global and local variables ‬اٌّزر‪١‬شاد اٌؼبٌّ‪١‬خ ‪ٚ‬اٌّؾٍ‪١‬خ‬


‫ٕ٘ب ‪ ،‬عٕ‪ٛ‬ػؼ و‪١‬ف‪١‬خ اعزخذاَ اٌّزر‪١‬شاد اٌؼبٌّ‪١‬خ ‪ٚ‬اٌّزر‪١‬شاد اٌّؾٍ‪١‬خ ف‪ٔ ٟ‬فظ اٌى‪ٛ‬د‪.‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪21‬‬
‫‪ِ ‬ضبي ‪ 0‬ػٍ‪ ٝ‬ئٔشبء اعزخذاَ اٌّزر‪١‬شاد اٌؼبِخ ‪ٚ‬اٌّؾٍ‪١‬خ ف‪ٔ ٟ‬فظ اٌى‪ٛ‬د ‪:‬‬

‫" ‪x = "global‬‬

‫‪def foo():‬‬
‫‪global x‬‬
‫"‪y = "local‬‬
‫‪x = x * 2‬‬
‫)‪print(x‬‬
‫)‪print(y‬‬

‫)(‪foo‬‬

‫‪output‬‬
‫‪global global‬‬
‫‪local‬‬

‫‪ ‬ف‪ ٟ‬اٌى‪ٛ‬د اٌغةبثك ‪ٔ ،‬ؼٍةٓ أْ ‪ِ x‬زر‪١‬ةش ػةبَ ‪ y ٚ‬وّزر‪١‬ةش ِؾٍة‪ ٟ‬داخةً اٌذاٌةخ )(‪ ، foo‬صةُ ٔغةزخذَ ػبِةً‬
‫اٌؼشة * ٌزؼذ‪ ً٠‬اٌّزر‪١‬ش اٌؼبَ ‪ٔٚ x‬طجغ وً ِٓ ‪.y ٚ x‬‬

‫‪ ‬ثؼذ اعزذػبء )(‪ ، foo‬رظجؼ ل‪ّ١‬ةخ ‪ x‬ػبٌّ‪١‬ةخ ألٕٔةب اعةزخذِٕب ‪ٌ x * 2‬طجبػةخ ِةشر‪ ٓ١‬ػبٌّ‪١‬اةب ‪، global‬‬
‫‪ٚ‬ثؼذ رٌه ‪ٔ ،‬طجغ ل‪ّ١‬خ اٌّزر‪١‬ش اٌّؾٍ‪ y ٟ‬أ‪ِ ٞ‬ؾٍ‪.ٟ‬‬

‫‪ِ ‬ضبي ‪ 0‬ػٍ‪ ٝ‬ئٔشبء اعزخذاَ اٌّزر‪١‬شاد اٌؼبِخ ‪ٚ‬اٌّؾٍ‪١‬خ ثٕفظ االعُ ‪:‬‬

‫‪x = 5‬‬

‫‪def foo():‬‬
‫‪x = 10‬‬
‫)‪print("local x:", x‬‬

‫)(‪foo‬‬
‫)‪print("global x:", x‬‬

‫‪output‬‬
‫‪local x: 10‬‬
‫‪global x: 5‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪21‬‬
‫‪ ‬ف‪ ٟ‬اٌى‪ٛ‬د اٌغةبثك ‪ ،‬اعةزخذِٕب ٔفةظ االعةُ ‪ٌ x‬ىةً ِةٓ اٌّزر‪١‬ةش اٌؼةبٌّ‪ٚ ٟ‬اٌّزر‪١‬ةش اٌّؾٍة‪ٔ .ٟ‬ؾظةً ػٍة‪ٝ‬‬
‫ٔز‪١‬غخ ِخزٍفخ ػٕذِب ٔطجغ ٔفظ اٌّزر‪١‬ش ألْ اٌّزر‪١‬ش ُِؼٍَٓ ف‪ ٟ‬وةل إٌطةبل‪ ، ٓ١‬أ‪ ٞ‬إٌطةبق اٌّؾٍة‪ٌٍ ٟ‬ذاٌةخ‬
‫)(‪ٚ foo‬داخً إٌطبق اٌؼبٍِ‪ ٟ‬خبسط اٌذاٌخ )(‪. foo‬‬

‫‪ ‬ػٕذِب ٔطجغ اٌّزر‪١‬ش اٌّ‪ٛ‬ع‪ٛ‬د داخً )(‪ foo‬فأٗ ‪٠‬خةشط ‪٘ٚ local x: 10‬ةزا ِةب ‪٠‬غةّ‪ ٝ‬ثبٌٕطةبق اٌّؾٍة‪ٟ‬‬
‫ٌٍّزر‪١‬ش‪.‬‬

‫‪ٚ ‬ثبٌّضً ‪ ،‬ػٕذِب ٔطجغ اٌّزر‪١‬ش اٌّ‪ٛ‬ع‪ٛ‬د خةبسط )(‪ ، foo‬فأةٗ ‪٠‬خةشط ‪٘ٚ ، global x: 10‬ةزا ِةب ‪٠‬غةّ‪ٝ‬‬
‫ثبٌٕطبق اٌؼبَ ٌٍّزر‪١‬ش‪.‬‬

‫‪ : Nonlocal Variables ‬اٌّزر‪١‬شاد اٌر‪١‬ش ِؾٍ‪١‬خ‬


‫اٌّزر‪١‬ةةشاد اٌر‪١‬ةةش ِؾٍ‪١‬ةةخ ‪٘ Nonlocal Variables‬ةة‪ ٝ‬اٌّزر‪١‬ةةشاد اٌزةة‪٠ ٟ‬ةةزُ اإلػةةلْ ػٕ‪ٙ‬ةةب داخةةً اٌذاٌةةخ‬
‫اٌّزذاخٍخ ‪٘ٚ ، nested functions‬زا ‪٠‬ؼٕة‪ ٟ‬أْ اٌّزر‪١‬ةش ال ‪ّ٠‬ىةٓ أْ ‪٠‬ىة‪ ْٛ‬فة‪ ٟ‬إٌطةبق اٌّؾٍة‪ ٟ‬أ‪ ٚ‬اٌؼةبَ‪.‬‬
‫‪ٚ‬إلٔشبء ِزر‪١‬شاد غ‪١‬ش ِؾٍ‪١‬خ ٔغزخذَ وٍّبد سئ‪١‬غ‪١‬خ ‪. nonlocal‬‬

‫‪ِ ‬ضبي و‪١‬ف‪١‬خ أشبء ِزر‪١‬ش غ‪١‬ش ِؾٍ‪: nonlocal variable ٟ‬‬

‫‪def outer():‬‬
‫"‪x = "local‬‬

‫‪def inner():‬‬
‫‪nonlocal x‬‬
‫"‪x = "nonlocal‬‬
‫)‪print("inner:", x‬‬

‫)(‪inner‬‬
‫)‪print("outer:", x‬‬

‫)(‪outer‬‬

‫‪output‬‬
‫‪inner: nonlocal‬‬
‫‪outer: nonlocal‬‬

‫‪ ‬ف‪ ٟ‬اٌى‪ٛ‬د اٌغبثك ‪ ،‬ر‪ٛ‬عةذ داٌةخ داخٍ‪١‬ةخ ِزذاخٍةخ اعةّ‪ٙ‬ب )(‪ٔ ، inner‬غةزخذَ اٌىٍّةخ اٌشئ‪١‬غة‪١‬خ ‪nonlocal‬‬
‫إلٔشبء ِزر‪١‬ش غ‪١‬ش ِؾٍ‪٠ .ٟ‬زُ رؼش‪٠‬ف اٌذاٌخ اٌذاخٍ‪١‬خ )(‪ inner‬ف‪ٔ ٟ‬طبق داٌخ أخش‪ ٜ‬خبسع‪١‬خ )(‪.outer‬‬
‫‪ِ ‬لؽظخ‪ :‬ئرا لّٕب ثزر‪١١‬ش ل‪ّ١‬خ اٌّزر‪١‬ش اٌر‪١‬ش ِؾٍ‪ ، ٟ‬فغزظ‪ٙ‬ش اٌزر‪١١‬شاد ف‪ ٟ‬اٌّزر‪١‬ش اٌّؾٍ‪.ٟ‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪22‬‬
‫انذرص انظادص ‪ :‬انكهمت انزئيظيت عانمي ‪global‬‬
‫(‪(Global Keyword‬‬
‫ف‪٘ ٟ‬زا اٌذسط عززؼشف ػٍ‪ ٝ‬اٌىٍّخ اٌشئ‪١‬غ‪١‬خ ‪ٚ ، global‬اٌّزر‪١‬ش اٌؼبَ ‪ِٚ global variable‬ز‪ ٝ‬رغزخذَ‬
‫اٌىٍّبد اٌشئ‪١‬غ‪١‬خ ‪. global‬‬

‫‪ : global keyword ‬اٌىٍّخ اٌشئ‪١‬غ‪١‬خ أ‪ ٚ‬اٌىٍّخ اٌّفزبؽ‪١‬خ ‪global‬‬


‫اٌىٍّخ األعبع‪١‬خ اٌؼبِخ ‪ ٝ٘ global‬ػجبسح ػٓ ‪ keyword‬رز‪١‬ؼ ٌه رؼذ‪ ً٠‬اٌّزر‪١‬ش اٌّ‪ٛ‬ع‪ٛ‬د خبسط إٌطةبق‬
‫اٌؾبٌ‪٠ٚ ، current scope ٟ‬زُ اعزخذاِٗ إلٔشةبء ِزر‪١‬ةش ػةبَ ‪ٚ global variable‬ئعةشاء رر‪١١‬ةشاد ػٍة‪ٝ‬‬
‫اٌّزر‪١‬ش ف‪ ٟ‬ع‪١‬بق ِؾٍ‪. local context ٟ‬‬

‫‪ : Rules of global Keyword ‬ل‪ٛ‬اػذ اٌىٍّبد اٌشئ‪١‬غ‪١‬خ ‪global‬‬


‫اٌم‪ٛ‬اػذ األعبع‪١‬خ ٌٍىٍّبد اٌشئ‪١‬غ‪١‬خ اٌؼبٌّ‪١‬خ ف‪: ٟ٘ Python ٟ‬‬
‫ِزر‪١‬شا داخً داٌخ ‪ ،‬فأٗ ‪٠‬ى‪ِ ْٛ‬زر‪١‬ش ِؾٍ‪ local ٟ‬افزشاػ‪١‬اب ‪. default‬‬
‫ا‬ ‫‪ ‬ػٕذِب ٕٔشئ‬

‫ِزر‪١‬شا خبسط داٌخ ‪ ،‬فأٗ ‪٠‬ى‪ِ ْٛ‬زر‪١‬ش ػبَ ‪ global‬افزشاػ‪١‬اب ‪١ٌٚ ، default‬ظ ػٍ‪١‬ه‬
‫ا‬ ‫‪ ‬ػٕذِب ٔؾذد‬
‫اعزخذاَ اٌىٍّبد اٌشئ‪١‬غ‪١‬خ ‪. global‬‬

‫‪ٔ ‬غزخذَ ‪ٌ global Keyword‬مشاءح ‪ٚ‬وزبثخ ِزر‪١‬ش ػبَ ‪ global variable‬داخً داٌخ‪.‬‬

‫‪ ‬اعزخذاَ اٌىٍّبد األعبع‪١‬خ ‪ global‬خبسط اٌذاٌخ ٌ‪١‬ظ ٌٗ أ‪ ٞ‬رأص‪١‬ش‪.‬‬

‫‪ِ ‬ضبي ‪ٌٍٛ 0‬ط‪ٛ‬ي ئٌ‪ ٝ‬اٌّزر‪١‬ش اٌؼبٌّ‪ ِٓ ٟ‬داخً داٌخ ‪:‬‬

‫‪c = 1 # global variable‬‬

‫‪def add():‬‬
‫)‪print(c‬‬

‫)(‪add‬‬

‫‪output‬‬
‫‪1‬‬

‫‪ِٚ ‬غ رٌه ‪ ،‬لذ ‪٠‬ى‪ٌ ْٛ‬ذ‪ٕ٠‬ب ثؼغ اٌغ‪ٕ١‬بس‪٘ٛ٠‬بد اٌز‪ٔ ٟ‬ؾزبط ف‪ٙ١‬ب ئٌ‪ ٝ‬رؼذ‪ ً٠‬اٌّزر‪١‬ش اٌؼبَ ِٓ داخً داٌخ‪.‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪23‬‬
‫‪ِ ‬ضبي ‪ 0‬رؼذ‪ ً٠‬اٌّزر‪١‬ش اٌؼبَ ِٓ داخً اٌذاٌخ ‪:‬‬

‫‪c = 1 # global variable‬‬

‫‪def add():‬‬
‫‪c = c + 2 # increment c by 2‬‬
‫)‪print(c‬‬

‫)(‪add‬‬

‫‪output‬‬
‫‪UnboundLocalError: local variable 'c' referenced before assignment‬‬

‫‪ ‬الؽةةع ػٕةةذ رؼةةذ‪ ً٠‬ل‪ّ١‬ةةخ اٌّزر‪١‬ةةش اٌؼةةبَ ِةةٓ داخةةً اٌذاٌةةخ عةة‪١‬ؾذس خطةةأ ٘ةةزا ألٔةةٗ ‪ّ٠‬ىٕٕةةب فمةةؾ اٌ‪ٛ‬طةة‪ٛ‬ي ئٌةة‪ٝ‬‬
‫اٌّزر‪١‬ش اٌؼبَ ‪ٌٚ‬ىٓ ال ‪ّ٠‬ىٕٕب رؼذ‪ ِٓ ٍٗ٠‬داخً اٌ‪ٛ‬ظ‪١‬فخ ‪ٚ‬اٌؾً ٌ‪ٙ‬زا ٘‪ ٛ‬اعزخذاَ اٌىٍّخ األعبع‪١‬خ ‪. global‬‬

‫‪ِ ‬ضبي ‪ 3‬رر‪١١‬ش اٌّزر‪١‬ش اٌؼبٌّ‪ ِٓ ٟ‬داخً داٌخ ثبعزخذاَ ‪: global‬‬

‫‪c = 0 # global variable‬‬

‫‪def add():‬‬
‫‪global c‬‬
‫‪c = c + 2 # increment by 2‬‬
‫)‪print("Inside add():", c‬‬

‫)(‪add‬‬
‫)‪print("In main:", c‬‬

‫‪output‬‬
‫‪Inside add(): 2‬‬
‫‪In main: 2‬‬

‫‪ ‬ف‪ ٟ‬اٌجشٔبِظ اٌغبثك ‪ٔ ،‬ؾذد اٌّزر‪١‬ش ‪ c‬وىٍّخ أعبع‪١‬خ ػبٌّ‪١‬خ داخً اٌذاٌخ ()‪.add‬‬

‫أخ‪١‬ةشا ‪،‬‬
‫ا‬ ‫‪ ‬صُ ٔم‪ َٛ‬ثض‪٠‬ةبدح اٌّزر‪١‬ةش ‪ c‬ثّمةذاس ‪ ، 0‬أ‪ .c = c + 2 ٞ‬ثؼةذ رٌةه ‪ٔ ،‬غةزذػ‪ ٟ‬اٌذاٌةخ ()‪ ، add‬صةُ‬
‫ٔم‪ َٛ‬ثطجبػخ اٌّزر‪١‬ش اٌؼبَ ‪.c‬‬

‫‪ ‬وّب ٔش‪ ، ٜ‬ؽذس اٌزر‪١١‬ش أ‪ ٠‬ا‬


‫ؼب ف‪ ٟ‬اٌّزر‪١‬ش اٌؼبَ خبسط اٌ‪ٛ‬ظ‪١‬فخ ٌزٌه ع‪١‬زُ ؽجبػخ ‪. c = 2‬‬
‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪24‬‬
‫‪ : Global Variables Across Python Modules ‬اٌّزر‪١‬شاد اٌؼبِخ ػجش اٌ‪ٛ‬ؽذاد ‪modules‬‬
‫فة‪ٌ ٟ‬رةخ ‪ٔ Python‬مة‪ َٛ‬ثأشةةبء ‪ٚ‬ؽةذح ‪ٚ‬اؽةذح ‪ single module‬ثبعةُ ‪ٌ config.py‬لؽزفةبظ ثةةبٌّزر‪١‬شاد‬
‫اٌؼبٌّ‪١‬خ ‪ِٚ‬شبسوخ اٌّؼٍ‪ِٛ‬بد ػجش ‪ٚ‬ؽذاد اٌجب‪٠‬ض‪ Python modules ْٛ‬داخً ٔفظ اٌجشٔبِظ‪.‬‬

‫ئٌ‪١‬ه و‪١‬ف ‪ّ٠‬ىٕٕب ِشبسوخ اٌّزر‪١‬شاد اٌؼبٌّ‪١‬خ ػجش ‪ٚ‬ؽذاد ث‪١‬ض‪. Python modules ْٛ‬‬

‫‪ِ ‬ضبي ‪ِ 4‬شبسوخ ِزر‪١‬ش ػبٌّ‪ ٟ‬ػجش اٌ‪ٛ‬ؽذاد ‪: modules‬‬


‫‪ ‬أ‪ٚ‬الا ‪ :‬لُ ثأشبء ٍِف ‪ٌ config.py‬زخض‪ ٓ٠‬اٌّزر‪١‬شاد اٌؼبِخ وب‪٢‬ر‪: ٟ‬‬
‫‪a = 0‬‬
‫"‪b = "empty‬‬

‫‪ ‬صبٔ‪١‬ب ا ‪ :‬لُ ثأشبء ٍِف ‪ٌ update.py‬زر‪١١‬ش اٌّزر‪١‬شاد اٌؼبِخ وب‪٢‬ر‪: ٟ‬‬


‫‪import config‬‬

‫‪config.a = 10‬‬
‫"‪config.b = "alphabet‬‬

‫‪ ‬صبٌضب ا ‪ :‬لُ ثأشبء ٍِف ‪ main.py‬الخزجبس اٌزر‪١١‬شاد ف‪ ٟ‬اٌم‪ّ١‬خ‪:‬‬


‫‪import config‬‬
‫‪import update‬‬

‫)‪print(config.a‬‬
‫)‪print(config.b‬‬

‫ػٕذِب ٔم‪ َٛ‬ثزشر‪ٍِ ً١‬ف ‪ ، main.py‬ع‪١‬ى‪ ْٛ‬إٌبرظ ا‪٢‬ر‪: ٟ‬‬


‫‪output‬‬
‫‪10‬‬
‫‪alphabet‬‬

‫‪ ‬ف‪ ٟ‬اٌّضبي اٌغبثك أٔشأٔب صلصةخ ٍِفةبد ‪ files‬أ‪ ٚ‬أٔشةأٔب صلصةخ اٌ‪ٛ‬ؽةذاد ‪٘ modules‬ةُ ‪ٚ config.py :‬‬
‫‪.main.py ٚ update.py‬‬

‫‪ ‬ف‪ٍِ ٟ‬ف ‪٠ config.py‬زُ رخض‪ ٓ٠‬اٌّزر‪١‬شاد اٌؼبِخ ٌـ ‪ٚ .b ٚ a‬ف‪ٍِ ٟ‬ةف ‪ٔ ، update.py‬مة‪ َٛ‬ثبعةز‪١‬شاد‬
‫‪ٚ‬ؽذح ‪ٚ config.py‬رؼذ‪ ً٠‬ل‪ٚ .b ٚ a ُ١‬ثبٌّضً ‪ ،‬فة‪ٍِ ٟ‬ةف ‪ٔ ، main.py‬غةز‪ٛ‬سد وةلا ِةٓ ‪config.py‬‬
‫‪ٍِٚ‬ف ‪، .update.py‬صُ أخ‪١‬شا ا ٔم‪ َٛ‬ثطجبػخ ‪ٚ‬اخزجبس ل‪ ُ١‬اٌّزر‪١‬شاد اٌؼبٌّ‪١‬خ ع‪ٛ‬اء رُ رر‪١١‬ش٘ب أَ ال‪.‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪25‬‬
‫‪ : Global in Nested Functions ‬اٌىٍّخ اٌشئ‪١‬غ‪١‬خ ‪ global‬داخً اٌذ‪ٚ‬اي اٌّزذاخٍخ‬
‫ئٌ‪١‬ه و‪١‬ف‪١‬خ اعزخذاَ ِزر‪١‬ش ػبَ ‪ global variable‬ف‪ ٟ‬داٌخ ِزذاخٍخ ‪. Nested Function‬‬

‫‪ِ ‬ضبي ‪ 5‬اعزخذاَ ِزر‪١‬ش ػبَ ف‪ ٟ‬داٌخ ِزذاخٍخ ‪:‬‬

‫‪def foo():‬‬
‫‪x = 20‬‬

‫‪def bar():‬‬
‫‪global x‬‬
‫‪x = 25‬‬

‫)‪print("Before calling bar: ", x‬‬


‫)"‪print("Calling bar now‬‬
‫)(‪bar‬‬
‫)‪print("After calling bar: ", x‬‬

‫)(‪foo‬‬
‫)‪print("x in main: ", x‬‬

‫‪output‬‬
‫‪Before calling bar: 20‬‬
‫‪Calling bar now‬‬
‫‪After calling bar: 20‬‬
‫‪x in main: 25‬‬

‫‪ ‬ف‪ ٟ‬اٌجشٔبِظ اٌغبثك ‪ ،‬أػٍٕب ػٓ ِزر‪١‬ةش ػةبَ ‪ global variable‬داخةً داٌةخ ِزذاخٍةخ )(‪ٚ ، bar‬ثةذاخً‬
‫داٌخ ()‪ ،foo‬ال رإصش ‪ x‬ػٍ‪ ٝ‬اٌىٍّخ األعبع‪١‬خ اٌؼبٌّ‪١‬خ ‪. global keyword‬‬

‫‪ ‬لجً ‪ٚ‬ثؼذ اعزذػبء اٌذاٌةخ () ‪٠ bar‬أخةز اٌّزر‪١‬ةش ‪ x‬ل‪ّ١‬ةخ اٌّزر‪١‬ةش اٌّؾٍة‪ ٟ‬أ‪ٚ ، x = 20 ٞ‬خةبسط اٌذاٌةخ‬
‫()‪ foo‬عةة‪١‬أخز اٌّزر‪١‬ةةش ‪ x‬اٌم‪ّ١‬ةةخ اٌّؾةةذدح فةة‪ ٟ‬داٌةةخ ()‪ bar‬أ‪٠ ٞ‬بخةةز ل‪ّ١‬ةةخ ‪٘ . x = 25‬ةةزا ٘ةة‪ ٛ‬ألٕٔةةب‬
‫اعزخذِٕب اٌىٍّخ األعبع‪١‬خ ‪ global‬ف‪ x ٟ‬إلٔشبء ِزر‪١‬ش ػبَ داخً داٌخ ()‪ ( bar‬إٌطبق اٌّؾٍ‪.) ٟ‬‬

‫‪ ‬ئرا أعش‪ٕ٠‬ب أ‪ ٞ‬رر‪١١‬شاد داخً داٌخ ()‪ ، bar‬فغزظ‪ٙ‬ش اٌزر‪١١‬شاد خبسط إٌطبق اٌّؾٍ‪ ٟ‬أ‪.foo)( ٞ‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪26‬‬
‫انذرص انظابع ‪ :‬انىحذاث‬
‫( ‪( Modules‬‬
‫ؼب‬
‫ف‪٘ ٟ‬زا اٌذسط عززؼٍُ ئٔشبء ‪ٚ‬اعز‪١‬شاد ‪ٚ‬ؽذاد ِخظظخ ‪ custom modules‬ف‪ ٟ‬اٌجب‪٠‬ض‪ٚ ، ْٛ‬عزغذ أ‪ ٠‬ا‬
‫رمٕ‪١‬بد ِخزٍفخ العز‪١‬شاد ‪ٚ‬اعزخذاَ ‪ٚ‬ؽذاد ِخظظخ ‪ِٚ‬ؼّٕخ ‪ built-in modules‬داخً ٌرخ ‪.Python‬‬

‫‪ : Modules ‬اٌ‪ٛ‬ؽذاد أ‪ ٚ‬اٌ‪ٛ‬ؽذاد إٌّط‪١‬خ‬


‫رشةةة‪١‬ش اٌ‪ٛ‬ؽةةةذاد إٌّط‪١‬ةةةخ ‪ Modules‬ئٌةةة‪ٍِ ٝ‬ةةةف ‪٠ file‬ؾزةةة‪ ٞٛ‬ػٍةةة‪ ٝ‬ػجةةةبساد ‪ٚ statements‬رؼش‪٠‬فةةةبد‬
‫‪ definitions‬داخً ٌرخ اٌجب‪٠‬ض‪.ْٛ‬‬

‫‪ُ٠‬طٍك ػٍ‪ ٝ‬اٌٍّف اٌز‪٠ ٞ‬ؾز‪ ٞٛ‬ػٍ‪ ٝ‬و‪ٛ‬د ثٍرخ ‪ Python‬اعةُ ‪ٚ‬ؽةذح ّٔط‪١‬ةخ ‪ ، Module‬ػٍة‪ ٝ‬عةج‪ ً١‬اٌّضةبي‬
‫‪ example.py‬ع‪١‬ى‪ ْٛ‬اعُ اٌ‪ٛ‬ؽذح ‪ Module‬اٌخبص ث‪ٙ‬ب ٘‪. example ٛ‬‬

‫ٔؾٓ ٔغزخذَ اٌ‪ٛ‬ؽذاد ‪ٌ Modules‬زمغ‪ ُ١‬اٌجشاِظ اٌىج‪١‬شح ئٌ‪ٍِ ٝ‬فبد طر‪١‬شح ِٕظّةخ ‪ّ٠‬ىةٓ ئداسر‪ٙ‬ةب ػةل‪ٚ‬ح‬
‫ػٍ‪ ٝ‬رٌه ‪ ،‬ر‪ٛ‬فش اٌ‪ٛ‬ؽذاد ‪ Modules‬ئِىبٔ‪١‬خ ئػبدح اعزخذاَ اٌزؼٍ‪ّ١‬بد اٌجشِغ‪١‬خ‪.‬‬

‫‪ّ٠‬ىٕٕب رؾذ‪٠‬ذ اٌذ‪ٚ‬اي األوضش اعزخذا اِب ف‪ ٟ‬اٌ‪ٛ‬ؽذح إٌّط‪١‬خ ‪ٚ Modules‬اعز‪١‬شاد٘ب ‪ ،‬ثذالا ِةٓ ٔغةخ رؼش‪٠‬فبر‪ٙ‬ةب‬
‫‪ definitions‬ف‪ ٟ‬ثشاِظ ِخزٍفخ‪.‬‬

‫‪ِ ‬ضبي ‪ 0‬ئٔشبء ‪ٚ‬ؽذح ّٔط‪١‬خ ثبعُ ‪ example.py‬رؾز‪ ٞٛ‬ػٍ‪٘ ٝ‬زٖ اٌى‪ٛ‬د ‪:‬‬

‫‪# Python Module example‬‬

‫‪def add(a, b):‬‬


‫‪"""This program adds two‬‬
‫"""‪numbers and return the result‬‬

‫‪result = a + b‬‬
‫‪return result‬‬

‫‪ٕ٘ ‬ةةةب لّٕةةةب ثزؼش‪٠‬ةةةف داٌةةةخ ()‪ add‬داخةةةً ‪ٚ‬ؽةةةذح ‪ module‬رغةةةّ‪ٚ example ٝ‬رأخةةةز اٌذاٌةةةخ سلّةةة‪ٚ ٓ١‬رؼ‪١‬ةةةذ‬
‫ِغّ‪ٛ‬ػ‪ّٙ‬ب ‪.‬‬

‫‪ : import modules ‬اعزذػبء اٌ‪ٛ‬ؽذاد أ‪ ٚ‬اعزذػبء اٌ‪ٛ‬ؽذاد إٌّط‪١‬خ‬


‫‪ّ٠‬ىٕٕب اعز‪١‬شاد اٌزؼش‪٠‬فبد اٌّ‪ٛ‬ع‪ٛ‬دح داخً ‪ٚ‬ؽذح ّٔط‪١‬ةخ ‪ module‬ئٌة‪ٚ ٝ‬ؽةذح ّٔط‪١‬ةخ أخةش‪ module ٜ‬ػةٓ‬
‫ؽش‪٠‬ك اعزخذاَ اٌىٍّخ ‪ٌٍ import‬م‪١‬ةبَ ثةزٌه‪ .‬فٕةضلا العةز‪١‬شاد ‪ example module‬اٌّؾةذدح ِغةجماب ‪ٔ ،‬ىزةت‬
‫ِب ‪ ٍٟ٠‬ف‪ِٛ ٟ‬عٗ ‪.Python‬‬
‫‪>>> import example‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪22‬‬
‫‪٘ ‬زا ال ‪٠‬غز‪ٛ‬سد أعّبء اٌذ‪ٚ‬اي اٌّؼشفخ ف‪ ٟ‬اٌّضبي ِجبششح ف‪ ٟ‬عذ‪ٚ‬ي اٌشِ‪ٛ‬ص اٌؾةبٌ‪ . ٟ‬أ‪ٙ‬ةب فمةؾ رغةز‪ٛ‬سد اعةُ‬
‫اٌ‪ٛ‬ؽذح إٌّط‪١‬خ ٕ٘بن ‪. example module‬‬

‫‪ ‬ثبعزخذاَ اعُ اٌ‪ٛ‬ؽذح ‪ّ٠ ، module name‬ىٕٕب اٌ‪ٛ‬ط‪ٛ‬ي ئٌ‪ ٝ‬اٌذاٌخ ثبعزخذاَ ِؼبِةً اٌةذخ‪ٛ‬ي إٌمطةخ ( ‪) .‬‬
‫أ‪ِ ٚ‬ب ‪٠‬غّ‪ dot . operator ٝ‬فّضل ‪:‬‬
‫)‪>>> example.add(4,5.5‬‬
‫‪9.5‬‬

‫ٌرةخ اٌجةب‪٠‬ض‪ٌ ْٛ‬ةذ‪ٙ٠‬ب اٌىض‪١‬ةش ِةٓ اٌ‪ٛ‬ؽةذاد اٌم‪١‬بعة‪١‬خ ‪ّ٠ٚ standard modules‬ىٕةه اٌزؾمةك ِةٓ اٌمبئّةخ اٌىبٍِةخ‬
‫ٌ‪ٛ‬ؽةةذاد ‪ Python‬اٌم‪١‬بعةة‪١‬خ ‪ٚ‬ؽةةبالد اعةةزخذاِ‪ٙ‬ب ‪٘ modindex‬ةةزٖ اٌٍّفةةبد ِ‪ٛ‬عةة‪ٛ‬دح فةة‪ ٟ‬دٌ‪١‬ةةً ‪ Lib‬داخةةً‬
‫اٌّ‪ٛ‬لغ ؽ‪١‬ش لّذ ثزضج‪١‬ذ ‪.Python‬‬

‫‪ّ٠‬ىةةٓ اعةةز‪١‬شاد اٌ‪ٛ‬ؽةةذاد اٌم‪١‬بعةة‪١‬خ ‪ Standard modules‬ثةةٕفظ اٌطش‪٠‬مةةخ اٌزةة‪ٔ ٟ‬غةةز‪ٛ‬سد ث‪ٙ‬ةةب اٌ‪ٛ‬ؽةةذاد اٌزةة‪ٟ‬‬
‫‪٠‬ؾذد٘ب اٌّغزخذَ ‪.user-defined modules‬‬

‫ٕ٘بن ؽشق ِخزٍفخ العز‪١‬شاد اٌ‪ٛ‬ؽذاد ‪ modules‬عٕزؼشف ػٍ‪ٙ١‬ب ف‪ ٟ‬األعضاء ا‪٢‬ر‪١‬خ ‪:‬‬

‫أ‪ٚ‬الا ‪ : import statement :‬ػٓ ؽش‪٠‬ك عٍّخ ‪import‬‬


‫‪ّ٠‬ىٕٕب اعز‪١‬شاد أ‪ٚ ٞ‬ؽذح ‪ module‬ثبعزخذاَ ‪ّ٠ٚ import‬ىٕٕب اٌ‪ٛ‬طة‪ٛ‬ي ئٌة‪ ٝ‬اٌزؼش‪٠‬فةبد ثةذاخٍ‪ٙ‬ب ثبعةزخذاَ‬
‫ػبًِ اٌزشر‪ ً١‬إٌمطخ )‪ dot operator (.‬وّب ٘‪ِٛ ٛ‬ػؼ ف‪ ٟ‬اٌّضبي اٌغبثك ‪.‬‬

‫‪ِ ‬ضبي العزذػبء ‪ٚ math module‬اٌؾظ‪ٛ‬ي ػٍ‪ ٝ‬ل‪ّ١‬خ اٌضبثذ ‪: pi‬‬


‫‪# import statement example‬‬
‫‪# to import standard module math‬‬

‫‪import math‬‬
‫)‪print("The value of pi is", math.pi‬‬

‫‪output‬‬
‫‪The value of pi is 3.141592653589793‬‬

‫‪ّ٠‬ىٕٕب اعز‪١‬شاد ‪ٚ‬ؽذح ‪ٚ module‬ئػبدح رغّ‪١‬ز‪ٙ‬ب ػٍ‪ ٝ‬إٌؾ‪ ٛ‬اٌزبٌ‪: ٟ‬‬


‫‪# import module by renaming it‬‬

‫‪import math as m‬‬


‫)‪print("The value of pi is", m.pi‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪28‬‬
‫‪ ‬الؽةع أٔةٗ رةُ ئػةبدح رغةّ‪١‬خ ‪ٚ‬ؽةذح ‪ math‬ثبعةُ عذ‪٠‬ةذ ٘ة‪ m ٛ‬ف‪ٙ‬ةزا ‪٠‬ة‪ٛ‬فش فة‪ ٟ‬اٌ‪ٛ‬لةذ ‪ٚ‬اٌغ‪ٙ‬ةذ ‪ٚ ،‬ثبٌزةبٌ‪ ٟ‬ػٕةةذ‬
‫اعزخذاَ رٍه اٌطش‪٠‬مخ فاْ ‪ ٝ٘ math.m‬اٌظؾ‪١‬ؾخ أِب ‪ math.pi‬رى‪ ْٛ‬غ‪١‬ش طؾ‪١‬ؾخ داخً ‪. scope‬‬

‫صبٔ‪١‬ب ا ‪ : from...import statement :‬ػٓ ؽش‪٠‬ك وٍّخ ‪ٚ from‬وٍّخ ‪import‬‬


‫‪ّ٠‬ىٕٕب اعز‪١‬شاد أعّبء ِؾذدح ِٓ ‪ٚ‬ؽذح ‪ module‬د‪ ْٚ‬اعز‪١‬شاد اٌ‪ٛ‬ؽذح ‪ module‬وىً‪.‬‬

‫‪ِ ‬ضبي العزذػبء ل‪ّ١‬خ ‪ِ pi‬جبششح ثذ‪ ْٚ‬اعزذػبء اٌـ ‪ module‬وٍٗ ‪:‬‬
‫‪# import only pi from math module‬‬

‫‪from math import pi‬‬


‫)‪print("The value of pi is", pi‬‬

‫‪output‬‬
‫‪The value of pi is 3.141592653589793‬‬

‫‪ ‬ف‪ِ ٟ‬ضً ٘زٖ اٌؾبٌخ ال ٔغزخذَ ( ‪ٌٍ ) .‬ؾظ‪ٛ‬ي ػٍ‪ ٝ‬اٌزؼش‪٠‬فبد اٌّ‪ٛ‬ع‪ٛ‬دح داخً اٌ‪ٛ‬ؽذح ‪.‬‬
‫‪ ‬ل‪ّ١‬خ ‪ pi‬رغّ‪ ٝ‬خبط‪١‬خ أ‪ ٚ‬عّخ ‪. attribute‬‬

‫ؼب اعز‪١‬شاد خ‪ٛ‬اص أ‪ ٚ‬عّبد ‪ِ attributes‬زؼذدح ػٍ‪ ٝ‬إٌؾ‪ ٛ‬اٌزبٌ‪: ٟ‬‬


‫‪ّ٠‬ىٕٕب أ‪ ٠‬ا‬
‫‪>>> from math import pi, e‬‬
‫‪>>> pi‬‬
‫‪3.141592653589793‬‬
‫‪>>> e‬‬
‫‪2.718281828459045‬‬

‫‪ّ٠‬ىٓ اعز‪١‬شاد وً األعّبء اٌّ‪ٛ‬ع‪ٛ‬دح داخً اٌـ ‪ module‬ػٓ ؽش‪٠‬ك سِض إٌغّخ ( * ) وب‪٢‬ر‪: ٟ‬‬
‫‪# import all names from the standard module math‬‬

‫* ‪from math import‬‬


‫)‪print("The value of pi is", pi‬‬

‫‪ٕ٘ ‬ب ‪ ،‬لّٕب ثبعز‪١‬شاد عّ‪١‬غ اٌزؼش‪٠‬فبد ِٓ ‪ٚ‬ؽذح ‪٠ٚ ، math‬زؼّٓ ٘زا عّ‪١‬غ األعّبء اٌّشئ‪١‬خ فة‪ٔ ٟ‬طبلٕةب‬
‫ثبعزضٕبء رٍةه اٌزة‪ ٟ‬رجةذأ ) _ ( ف‪ٙ‬ة‪ ٝ‬رؼش‪٠‬فةبد خبطةخ ‪ٌٚ private definitions‬ىةٓ اعةز‪١‬شاد وةً شة‪ٟ‬ء‬
‫ثؼلِخ إٌغّخ (*) ٌ‪١‬ظ ِّبسعخ ثشِغخ ع‪١‬ذح ألْ ٘زا ‪ّ٠‬ىٓ أْ ‪٠‬ةإد‪ ٞ‬ئٌة‪ ٝ‬رؼش‪٠‬فةبد ِىةشسح ٌٍ ُّؼةشف‪.‬‬
‫وّب أٔٗ ‪٠‬ؼ‪١‬ك ‪٠ٚ‬ظؼت لشاءح اٌى‪ٛ‬د اٌخبص ثٕب‪.‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪29‬‬
ْٛ‫ض‬٠‫ؽذح ثب‬ٚ ‫ ِغبس ثؾش‬: Python Module Search Path
‫ؽةذح‬ٚ ٓ‫الا ػة‬ٚ‫ أ‬Interpreter ‫جؾةش‬٠ .ٓ‫ ػةذح أِةبو‬ٟ‫ رجؾةش فة‬Python ‫ فةاْ ٌرةخ‬، module ‫شاد‬١‫أصٕبء اعز‬
ٟ‫ فة‬Python ‫ رجؾةش ٌرةخ‬، )built-in module ٝ‫س ػٍة‬ٛ‫ةزُ اٌؼضة‬٠ ُ‫ صةُ (ئرا ٌة‬built-in module ‫ِذِغةخ‬
: ‫ت‬١‫زا اٌزشر‬ٙ‫زُ اٌجؾش ث‬٠ ٌٟ‫ثبٌزب‬ٚ ، sys.path ٟ‫ اٌُّؾذدح ف‬list of directories ‫لبئّخ األدٌخ‬
ٌٟ‫ً اٌؾب‬١ٌ‫ اٌذ‬
 The current directory.
)ً‫ئخ ِغ لبئّخ ِٓ اٌذالئ‬١‫ش اٌج‬١‫ْ (ِزر‬ٛ‫ض‬٠‫ ِغبس اٌجب‬
 PYTHONPATH (an environment variable with a list of directories).
‫ذ‬١‫ اٌزضج‬ٍٝ‫ اٌّؼزّذ ػ‬ٟ‫ً االفزشاػ‬١ٌ‫ اٌذ‬
 The installation-dependent default directory.

: ْٛ‫ض‬٠‫ ِضبي العزذػبء اٌّغبساد اٌخبطخ ثٍرخ اٌجب‬


>>> import sys

>>> sys.path

['',

'C:\\Python33\\Lib\\idlelib',

'C:\\Windows\\system32\\python33.zip',

'C:\\Python33\\DLLs',

'C:\\Python33\\lib',

'C:\\Python33',

'C:\\Python33\\lib\\site-packages']

.‫ اٌخبص ثه‬path ‫ً ٘زٖ اٌمبئّخ إلػبفخ اٌّغبس‬٠‫رؼذ‬ٚ ‫ّىٕٕب ئػبفخ‬٠ 

‫ؽذح‬ٌٛ‫ً ا‬١ّ‫ ئػبدح رؾ‬: Reloading a module


.‫ْ أوضش وفبءح‬ٛ‫ى‬٠ ‫٘زا‬ٚ ، session ‫اؽذح فمؾ خلي اٌغٍغخ‬ٚ ‫ؽذح ِشح‬ٌٛ‫ ا‬interpreter ‫سد اٌ ُّفغش‬ٛ‫غز‬٠

‫ أوضش ِٓ ِشح‬module ‫ؾذس ػٕذ اعزذػبء اٌـ‬٠ ‫ػؼ ِب‬ٛ٠ ‫ ِضبي‬

.my_module ّٝ‫خ رغ‬١‫ؽذح ّٔط‬ٚ ٟ‫ ف‬ٌٟ‫د اٌزب‬ٛ‫ٕب اٌى‬٠‫افزشع أْ ٌذ‬


# This module shows the effect of
# multiple imports and reload
print("This code got executed")

The Way To Python 3 … Functions…. ‫ الطريق إلى برمجة بلغة البايثون‬..… Author , Eng/ Mahmoud 31
‫الؽع ِب ‪٠‬ؾذس ػٕذ اعزذػبء ‪ my_module‬أوضش ِٓ ِشح ‪:‬‬
‫‪>>> import my_module‬‬
‫‪This code got executed‬‬
‫‪>>> import my_module‬‬
‫‪>>> import my_module‬‬

‫‪ّ٠ ‬ىٕٕب أْ ٔش‪ ٜ‬أٔٗ رُ رٕف‪١‬ز اٌى‪ٛ‬د اٌخبص ثٕب ِشح ‪ٚ‬اؽذح فمؾ‪٘ .‬زا ‪٠‬ؼٕ‪ ٟ‬أٔٗ رةُ اعةز‪١‬شاد اٌ‪ٛ‬ؽةذح اٌخبطةخ‬
‫ثٕب ِشح ‪ٚ‬اؽذح فمؾ‪.‬‬

‫‪ ‬ئرا رر‪١‬شد اٌ‪ٛ‬ؽذح إٌّط‪١‬خ اٌخبطخ ثٕب أصٕةبء د‪ٚ‬سح اٌجشٔةبِظ ‪ ،‬فغة‪١‬زؼ‪ ٓ١‬ػٍ‪ٕ١‬ةب ئػةبدح رؾّ‪ٍٙ١‬ةب ‪، reload‬‬
‫‪ٚ‬ئؽذ‪ ٜ‬ؽشق اٌم‪١‬بَ ثزٌه ٘ة‪ ٟ‬ئػةبدح رشةر‪ ً١‬اٌّزةشعُ اٌفة‪ٛ‬س‪ٌ interpreter ٞ‬ىةٓ ٘ةزا ال ‪٠‬غةبػذ وض‪١‬ةشا‪.‬‬
‫ٌزٌه ر‪ٛ‬فش ‪ Python‬ؽش‪٠‬مخ أوضةش فبػٍ‪١‬ةخ ٌٍم‪١‬ةبَ ثةزٌه‪ّ٠ .‬ىٕٕةب اعةزخذاَ اٌذاٌةخ )(‪٘ٚ ، reload‬ةزٖ اٌذاٌةخ‬
‫ِ‪ٛ‬ع‪ٛ‬دح داخً ‪ٚ‬ؽذح ‪. imp‬‬

‫‪ِ ‬ضبي ‪ٛ٠‬ػؼ ئػبدح رؾّ‪ٚ ً١‬ؽذح‪:‬‬


‫‪>>> import imp‬‬
‫‪>>> import my_module‬‬
‫‪This code got executed‬‬
‫‪>>> import my_module‬‬
‫)‪>>> imp.reload(my_module‬‬
‫‪This code got executed‬‬
‫>'‪<module 'my_module' from '.\\my_module.py‬‬

‫‪ : dir() function‬اٌذاٌخ اٌّذِغخ )(‪dir‬‬


‫رشعغ اٌذاٌخ ()‪ dir‬عّ‪١‬غ اٌخظةبئض ‪( properties‬اٌغةّبد ‪ٚ )attributes‬اٌةذ‪ٚ‬اي ‪ methods‬اٌخبطةخ‬
‫ثبٌىبئٓ اٌّؾذد ثذ‪ ْٚ‬اٌم‪ٚ ُ١‬أ‪٠‬ؼب ا رشعغ عّ‪١‬غ اٌخظبئض اٌّؼّٕخ اٌز‪ ٟ‬رى‪ ْٛ‬افزشاػ‪١‬خ ٌغّ‪١‬غ اٌىبئٕبد‪.‬‬

‫لّٕب ُِغجمب ا ثؼًّ داٌخ ()‪ add‬داخً ‪٠ module‬غّ‪ٚ example ٝ‬رأخز اٌذاٌخ سلّ‪ٚ ٓ١‬رؼ‪١‬ذ ِغّ‪ٛ‬ػ‪ّٙ‬ب ‪.‬‬

‫‪ِ ‬ضبي ‪ٛ٠‬ػؼ اعزخذاَ ‪ dir‬ف‪ ٟ‬اٌ‪ٛ‬ؽذح اٌز‪ ٟ‬اعّ‪ٙ‬ب ‪:example‬‬


‫)‪>>> dir(example‬‬
‫‪['__builtins__',‬‬
‫‪'__cached__',‬‬
‫‪'__doc__',‬‬
‫‪'__file__',‬‬
‫‪'__initializing__',‬‬
‫‪'__loader__',‬‬
‫‪'__name__',‬‬
‫‪'__package__',‬‬
‫]'‪'add‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪31‬‬
‫‪ّ٠ ‬ىٕٕب سؤ‪٠‬خ لبئّخ األعّبء اٌّظٕفخ داخً ‪ٚ‬ؽذح اٌـ ‪ٚ example‬أ‪٠‬ؼب ا ِؼ‪ ُٙ‬اٌذاٌخ ‪. add‬‬

‫‪ ‬عّ‪١‬غ األعّبء األخش‪ ٜ‬اٌز‪ ٟ‬رجذأ ثششؽخ عفٍ‪١‬خ ( _ ) رغّ‪ ٝ‬طفبد أ‪ ٚ‬عّبد ٌرةخ اٌجةب‪٠‬ض‪ ْٛ‬االفزشاػة‪١‬خ‬
‫‪ٚ‬اٌّشرجطخ ثبٌ‪ٛ‬ؽذح (غ‪١‬ش ِؾذدح ِٓ لجً اٌّغزخذَ ‪.)not user-defined‬‬

‫‪ِ ‬ضبي رؾز‪ ٞٛ‬اٌخبط‪١‬خ __‪ __name‬ػٍ‪ ٝ‬اعُ اٌ‪ٛ‬ؽذح ‪. module‬‬


‫‪>>> import example‬‬
‫__‪>>> example.__name‬‬
‫'‪'example‬‬

‫‪ّ٠‬ىٓ اٌؼض‪ٛ‬س ػٍ‪ ٝ‬عّ‪١‬غ األعّبء اٌّؾذدح ف‪ِ ٟ‬غبؽخ االعُ ‪ namespace‬اٌؾبٌ‪١‬ةخ ٌةذ‪ٕ٠‬ب ثبعةزخذاَ اٌذاٌةخ ()‪dir‬‬
‫ثذ‪ ْٚ‬أ‪ٚ ٞ‬ع‪١‬طبد ‪. arguments‬‬
‫‪>>> a = 1‬‬
‫"‪>>> b = "hello‬‬
‫‪>>> import math‬‬
‫)(‪>>> dir‬‬
‫]'‪['__builtins__', '__doc__', '__name__', 'a', 'b', 'math', 'pyscripter‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪32‬‬
‫انذرص انثامه ‪ :‬انحشمت‬
‫(‪(Package‬‬
‫ف‪٘ ٟ‬زا اٌذسط عززؼٍُ و‪١‬ف‪١‬خ رمغ‪ ُ١‬لبػذح األو‪ٛ‬اد اٌجشِغ‪١‬خ اٌخبطخ ثه ئٌ‪ٚ ٝ‬ؽذاد ‪ٔ modules‬ظ‪١‬فةخ ‪ٚ‬فؼبٌةخ‬
‫ؼب عةززؼٍُ و‪١‬ف‪١‬ةخ اعةز‪١‬شاد ‪ٚ import‬اعةزخذاَ اٌؾةضَ‬
‫ثبعزخذاَ ؽضَ ٌرخ اٌجب‪٠‬ض‪ٚ ، Python packages ْٛ‬أ‪ ٠‬ا‬
‫‪ packages‬اٌخبطخ أ‪ ٚ‬اٌؾضَ اٌخبسع‪١‬خ ‪ third party packages‬داخً اٌجشٔبِظ اٌخبص ثه‪.‬‬

‫‪ِ : packages ‬‬


‫اٌؾضَ‬
‫ٌٕف‪٘ ُٙ‬زا اٌزؼش‪٠‬ف دػٕب ٔأخز ِضبي ف‪ ٟ‬اٌ‪ٛ‬الةغ ‪ ،‬ػٍة‪ ٝ‬عةج‪ ً١‬اٌّضةبي ػٕةذِب ٔمة‪ َٛ‬ثزخةض‪ ٓ٠‬عّ‪١‬ةغ ٍِفبرٕةب ػٍة‪ٝ‬‬
‫ع‪ٙ‬بص اٌىّج‪ٛ١‬رش اٌخبص ثٕب فإٔب ال ٔم‪ َٛ‬ثزخض‪ٕٙ٠‬ب عّ‪١‬ؼ‪ٙ‬ب ف‪ٔ ٟ‬فةظ اٌّ‪ٛ‬لةغ أ‪ ٚ‬اٌّىةبْ ‪ٌٚ‬ىٕٕةب ثةذالا ِةٓ رٌةه‬
‫ٔغزخذَ رغٍغلا ٘شِ‪١‬اب ِٕظ اّب ع‪١‬ذاا ِٓ األدٌخ ‪ directories‬أ‪ ٚ‬اٌّغٍذاد ٌزغ‪ ً١ٙ‬اٌ‪ٛ‬طة‪ٛ‬ي ئٌ‪ٙ١‬ةب‪ .‬ؽ‪١‬ةش ‪٠‬ةزُ‬
‫االؽزفبظ ثبٌٍّفبد اٌّّبصٍخ ف‪ٔ ٟ‬فظ اٌذٌ‪ ، directory ً١‬ػٍ‪ ٝ‬عج‪ ً١‬اٌّضبي ‪ ،‬لذ ٔؾةزفع ثغّ‪١‬ةغ األغةبٔ‪ ٟ‬فة‪ٟ‬‬
‫دٌ‪١‬ةً "اٌّ‪ٛ‬عة‪١‬م‪ ."ٝ‬ػٍة‪ ٝ‬غةشاس رٌةه رؾزة‪ Python ٞٛ‬ػٍة‪ ٝ‬ؽةضَ ٌألدٌةخ ‪packages for directories‬‬
‫‪ٚ‬أ‪٠‬ؼب ا رؾز‪ ٞٛ‬ػٍ‪ٚ ٝ‬ؽذاد ّٔط‪١‬خ ٌٍٍّفبد ‪. modules for files‬‬

‫ٔظشا ٌزضا‪٠‬ذ ؽغُ ثشٔبِظ اٌزطج‪١‬ك ٌذ‪ٕ٠‬ب ِةغ ‪ٚ‬عة‪ٛ‬د اٌىض‪١‬ةش ِةٓ اٌ‪ٛ‬ؽةذاد ‪ ، modules‬فإٔةب ٔؼةغ اٌ‪ٛ‬ؽةذاد‬
‫ا‬
‫اٌّّبصٍخ فة‪ ٟ‬ؽضِةخ ‪ٚ‬اؽةذح ‪ٚٚ‬ؽةذاد ِخزٍفةخ فة‪ ٟ‬ؽةضَ ِخزٍفةخ ألْ ٘ةزا ‪٠‬غؼةً اٌّشةش‪ٚ‬ع أ‪ ٚ‬اٌجشٔةبِظ عة‪ًٙ‬‬
‫اإلداسح ‪ٚٚ‬اػؼ ِٓ إٌبؽ‪١‬خ اٌّفب٘‪١ّ١‬خ‪.‬‬

‫ٔظشا ألْ اٌذٌ‪ّ٠ directory ً١‬ىٓ أْ ‪٠‬ؾز‪ ٞٛ‬ػٍ‪ ٝ‬أدٌخ فشػ‪١‬ةخ ‪ٍِٚ subdirectories‬فةبد ‪files‬‬
‫‪ٚ‬ثبٌّضً ا‬
‫‪ ،‬فأٗ ‪ّ٠‬ىٓ أْ رؾز‪ ٞٛ‬اٌؾضِخ ‪ package‬ػٍ‪ ٝ‬ؽضَ فشػ‪١‬خ ‪ٚٚ sub-packages‬ؽذاد ‪.modules‬‬

‫‪٠‬غت أْ ‪٠‬ؾز‪ ٞٛ‬اٌذٌ‪ّ٠ directory ً١‬ىٓ ػٍ‪ٍِ ٝ‬ف ‪٠‬غّ‪ٌٚ __init__.py ٝ‬ى‪ ٟ‬رؼزجةشٖ ‪ Python‬ؽضِةخ‪.‬‬
‫‪ّ٠‬ىٓ رشن ٘زا اٌٍّةف فبس ا‬
‫غةب ‪ٌٚ‬ىٕٕةب ثشةىً ػةبَ ٔؼةغ وة‪ٛ‬د اإلػةذاد ‪ٚ‬اٌز‪١ٙ‬ئةخ ‪ٌ initialization code‬زٍةه‬
‫اٌؾضِخ ف‪٘ ٟ‬زا اٌٍّف‪.‬‬

‫الؽع ٘زا اٌّضبي ٌٕفزشع إٔٔب ٔطة‪ٛ‬س ٌؼجةخ ‪ّ٠ game‬ىةٓ أْ ‪٠‬ىة‪ ْٛ‬اٌزٕظة‪ ُ١‬اٌّؾزّةً ٌٍؾةضَ ‪ٚ‬اٌ‪ٛ‬ؽةذاد وّةب‬
‫٘‪ِٛ ٛ‬ػؼ ف‪ ٟ‬اٌشىً أدٔبٖ‪.‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪33‬‬
‫‪ : Importing module from a package ‬اعز‪١‬شاد ‪ٚ‬ؽذح ‪ ِٓ module‬ؽضِخ ‪package‬‬
‫‪ّ٠‬ىٕٕب اعز‪١‬شاد ‪ٚ‬ؽذاد ‪ ِٓ modules‬اٌؾضَ ثبعزخذاَ ػبًِ اٌزشر‪ ً١‬إٌمطخ (‪).‬‬

‫ػٍ‪ ٝ‬عج‪ ً١‬اٌّضبي ‪ ،‬ئرا أسدٔب اعز‪١‬شاد ‪ٚ‬ؽذح ‪ start‬ف‪ ٟ‬اٌّضبي اٌغبثك ف‪ّ١‬ىٓ اٌم‪١‬بَ ثزٌه ػٍ‪ ٝ‬إٌؾ‪ ٛ‬اٌزبٌ‪: ٟ‬‬
‫‪import Game.Level.start‬‬

‫ئرا وبٔذ ٘زٖ اٌ‪ٛ‬ؽذح ‪ module‬رؾز‪ ٞٛ‬ػٍ‪ ٝ‬داٌخ رغّ‪ select_difficulty() ٝ‬ف‪١‬غت أْ ٔغزخذَ االعُ‬
‫اٌىبًِ ٌإلشبسح ئٌ‪ٙ١‬ب‪.‬‬
‫)‪Game.Level.start.select_difficulty(2‬‬

‫ئرا ثذد ٘زٖ اٌغٍّخ اٌغبثمخ ؽ‪ٍ٠ٛ‬خ ف‪ّ١‬ىٕٕب اعز‪١‬شاد ‪ module‬ثذ‪ ْٚ‬ثبدئخ اٌؾضِخ ‪ package prefix‬ػٍ‪ٝ‬‬
‫إٌؾ‪ ٛ‬اٌزبٌ‪: ٟ‬‬
‫‪from Game.Level import start‬‬

‫‪ّ٠‬ىٕٕب ا‪ ْ٢‬اعزذػبء اٌذاٌخ ثشىً أوضش اخزظبسا ا وّب ‪: ٍٟ٠‬‬


‫)‪start.select_difficulty(2‬‬

‫ٕ٘بن ؽش‪٠‬مخ أخش‪ ٜ‬العز‪١‬شاد اٌذاٌخ اٌّطٍ‪ٛ‬ثخ فمؾ (أ‪ class ٚ‬أ‪ٚ ِٓ ) variable ٚ‬ؽذح ّٔط‪١‬خ داخً‬
‫اٌؾضِخ ‪ ٟ٘ٚ‬وّب ‪: ٍٟ٠‬‬
‫‪from Game.Level.start import select_difficulty‬‬

‫ا‪ّ٠ ْ٢‬ىٕٕب اعزذػبء ٘زٖ اٌذاٌخ ِجبششح وّب ‪: ٍٟ٠‬‬


‫)‪select_difficulty(2‬‬

‫‪ ‬ػٍ‪ ٝ‬اٌشغُ ِٓ أْ اٌطش‪٠‬مخ األخ‪١‬شح أع‪ ًٙ‬ئال أٔٗ ال ‪ٕ٠‬ظؼ ثبعزخذاَ ٘زٖ اٌطش‪٠‬مخ ألٔٗ ‪٠‬إد‪ ٞ‬اعزخذاَ‬
‫ِؼشف‪ِ ٓ١‬زشبث‪.ٓ١ٙ‬‬
‫ِغبؽخ االعُ اٌىبٍِخ ئٌ‪ ٝ‬رغٕت االٌزجبط ‪ِٕٚ‬غ اططذاَ اعّ‪ّ ٓ١‬‬

‫‪ ‬أصٕبء اعز‪١‬شاد اٌؾضَ رجؾش ‪ Python‬ف‪ ٟ‬لبئّخ األدٌخ اٌّؾذدح ف‪ ، sys.path ٟ‬ثٕفظ ؽش‪٠‬ك اٌجؾش‬
‫ٌّغبس اٌ‪ٛ‬ؽذح إٌّط‪١‬خ‪.‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪34‬‬
‫انخاتمت‬

‫ئٌ‪ٕ٘ ٝ‬ب ٔى‪ ْٛ‬لذ أز‪ٕ١ٙ‬ب ِٓ اٌغضء اٌضبٌةش ‪٘ٚ‬ة‪ِ ٛ‬ةب اخةزض ثذاسعةخ اٌةذ‪ٚ‬اي داخةً ٌرةخ اٌجةب‪٠‬ض‪ٚ ْٛ‬اٌّؼةش‪ٚ‬ف‬
‫ثبعُ ‪ٚ ، Python Functions‬ف‪ ٟ‬اٌذس‪ٚ‬ط اٌمبدِخ ع‪ٛ‬ف ٔزؼشف ػٍ‪ ٝ‬أٔ‪ٛ‬اع اٌج‪١‬بٔبد داخً ٌرخ اٌجب‪٠‬ض‪ْٛ‬‬
‫‪ٚ‬اٌّؼش‪ٚ‬فخ ثبعُ ‪.Python Datatypes‬‬

‫ِةةةةةةٓ ثةةةةةةبة األِبٔةةةةةةخ اٌؼٍّ‪١‬ةةةةةةخ ف‪ٙ‬ةةةةةةزا اٌىزةةةةةةةبة ٘ةةةةةة‪ ٛ‬ؽظةةةةةة‪ٍ١‬خ ‪ٚ‬رغّ‪١‬ؼةةةةةةخ ِؼٍ‪ِٛ‬ةةةةةةبد ِةةةةةةٓ ِ‪ٛ‬لةةةةةةةغ‬
‫‪ٚ ، /https://www.programiz.com‬رُ عشد وً دس‪ٚ‬ط ٘زٖ اٌغٍغٍخ ثٕفظ رغٍغةً ٘ةزا اٌّ‪ٛ‬لةغ ‪ .‬وّةب‬
‫االعزؼبٔخ ثّ‪ٛ‬لغ ‪. https://www.w3schools.com‬‬

‫٘ةةةزا اٌىزةةةبة ٘ةةة‪ ٛ‬طةةةذلخ عبس‪٠‬ةةةخ ػةةةٓ ٔفغةةة‪ٚ ٟ‬أ٘ةةةً ث‪١‬زةةة‪ٚ ٟ‬أؽجةةةبث‪ٚ ، ٟ‬أعةةةأي أْ ‪٠‬زمجةةةً ٘ةةةزا اٌؼّةةةً‬
‫‪٠ٚ‬غٍؼةةةةٗ خبٌظةةةةب ا ٌ‪ٛ‬ع‪ٙ‬ةةةةٗ اٌىةةةةش‪ٚ . ُ٠‬وّةةةةب ‪ٚ‬ػةةةةؼزٗ ثةةةة‪ ٓ١‬أ‪٠‬ةةةةذوُ ٌزٕةةةةبٌ‪ٛ‬ا ِٕةةةةٗ ػٍّةةةةب ا ‪ٌٚ‬ةةةة‪ ٛ‬وةةةةبْ ‪٠‬غةةةة‪١‬شا ا ‪،‬‬
‫ف‪ّ١‬ىةةةٕىُ أ‪٠‬ؼةةةب ا ٔشةةةشٖ ػٍةةة‪ ٝ‬أ‪ِٛ ٞ‬لةةةغ ‪ٚ‬رؼةةةذ‪ِ ً٠‬ؾزةةة‪ٛ‬اٖ ثّةةةب ‪٠‬خةةةذَ إٌةةةبط ‪ٚ‬االلزجةةةبط ِٕةةةٗ أ‪٠‬ؼةةةب ا وّةةةب‬
‫رشبء‪ ْٚ‬ثذ‪ ْٚ‬اعزئزاْ‪.‬‬

‫‪٠ ِٓٚ‬شغت ف‪ٔ ٟ‬غخخ ‪٘ ِٓ Word‬زا اٌىزبة ف‪ّ١‬ىٕٗ أْ ‪٠‬شاعٍٕ‪ ٝ‬ػٍ‪ ٝ‬اإل‪١ّ٠‬لد ‪.‬‬

‫سؽةةةُ سعةةةلا أ٘ةةةذ‪ٌ ٜ‬ةةة‪ ٟ‬ػ‪١‬ةةة‪ٛ‬ث‪ ، ٟ‬أسعةةة‪ِ ٛ‬ةةةٓ وةةةً شةةةخض ‪٠‬مةةةشأ ٘ةةةزا اٌىزةةةبة ئرا ‪ٚ‬لةةةف ػٕةةةذ خطةةةأ‬
‫ػٍّةةة‪ ٝ‬أ‪ ٚ‬خطةةةأ ئِلئةةة‪ ٟ‬أ‪ِ ٚ‬ؼٍ‪ِٛ‬ةةةخ لةةةذ ‪٠‬غةةةبء ف‪ّٙٙ‬ةةةب أْ ‪٠‬شاعةةةٍٕ‪ ٟ‬ػٍةةة‪ ٝ‬اإل‪ّ٠‬ةةة‪١‬لد ا‪٢‬ر‪١‬ةةةخ ٌىةةة‪ ٝ‬ألةةة‪َٛ‬‬
‫ثاطلؽٗ ف‪ ٟ‬اٌطجؼبد ا‪٢‬خش‪ ، ٜ‬وّب أسع‪ ٛ‬أال رٕغ‪ٔٛ‬ب ِٓ طبٌؼ دػ‪ٛ‬ارىُ ‪.‬‬

‫‪E-mail : mmasoliman19962020@gmail.com‬‬
‫‪E-FaceBook : Mahmoud Soliman‬‬
‫‪Youtube : https://www.youtube.com/channel/UCfZvWjnYnfxI55v4LNhBekA‬‬

‫نتحميم جميع انكتب انخاصت بىا يمكه متابعت قىاتي عهى انتيهيجزاو مه خالل هذا انزابط ‪:‬‬
‫‪Telegram Channel : https://t.me/joinchat/-aC4Ps0pna5lY2M0‬‬

‫نتحميم جميع انكتب انخاصت بىا يمكه متابعت صفحتي عهى انفيض بىك مه خالل هذا انزابط ‪:‬‬
‫‪Public Page: Help-me-page‬‬

‫‪Mahmoud Soliman‬‬

‫‪The Way To Python 3 … Functions….‬‬ ‫‪ ..… Author , Eng/ Mahmoud‬الطريق إلى برمجة بلغة البايثون‬ ‫‪35‬‬
The Way To Python 3 … Functions…. ‫ الطريق إلى برمجة بلغة البايثون‬..… Author , Eng/ Mahmoud 36

You might also like