الدوال في بايثون بيثون Python Functions
الدوال في بايثون بيثون
Python Functions
الدوال في بايثون بيثون Python Functions
الوظيفة عبارة عن كتلة من التعليمات البرمجية المنظمة القابلة لإعادة الاستخدام والتي يتم استخدامها لتنفيذ إجراء واحد متعلق. توفر وظائف نمطية أفضل للتطبيق الخاص بك ودرجة عالية من إعادة استخدام التعليمات البرمجية.
كما تعلمون بالفعل ، يوفر لك Python العديد من الوظائف المدمجة مثل print () ، إلخ ، لكن يمكنك أيضًا إنشاء وظائف خاصة بك. تسمى هذه الوظائف دالات معرفة من قبل المستخدم.
Defining a Function تعريف الدالة او الوظيفة
يمكنك تحديد وظائف لتوفير الوظيفة المطلوبة. فيما يلي قواعد بسيطة لتحديد وظيفة في بيثون.
تبدأ كتل الوظائف بالكلمة الأساسية def متبوعةً باسم الوظيفة والأقواس (()).
يجب وضع أي معلمات إدخال أو وسيطات ضمن هذه الأقواس. يمكنك أيضًا تحديد المعلمات ضمن هذه الأقواس.
يمكن أن تكون العبارة الأولى من دالة عبارة اختيارية - سلسلة وثائق الدالة أو docstring.
كتلة التعليمات البرمجية داخل كل وظيفة تبدأ بنقطتين (:) ويتم بادئة.
تُرجع عبارة الإرجاع [تعبير] دالة ، وتمرر تعبيرًا اختياريًا للمتصل. بيان الإرجاع بدون وسائط هو نفس الإرجاع بلا.
Syntax
def functionname( parameters ): "function_docstring" function_suite return [expression]
بشكل افتراضي ، يكون للمعلمات سلوك موضعي وتحتاج إلى إبلاغهم بنفس الترتيب الذي تم تعريفهم به.
مثال
تأخذ الوظيفة التالية سلسلة كمعلمة إدخال وتطبعها على الشاشة القياسية.
def printme( str ): "This prints a passed string into this function" print str return
Calling a Function استدعاء الدالة او الوظيفة
تحديد وظيفة ما يعطيها اسمًا فقط ، ويحدد المعلمات التي سيتم تضمينها في الوظيفة وهيكليات كتل الشفرة.
بمجرد الانتهاء من البنية الأساسية للوظيفة ، يمكنك تنفيذها عن طريق استدعاءها من وظيفة أخرى أو مباشرة من موجه Python. فيما يلي مثال لاستدعاء وظيفة printme () -
#!/usr/bin/python # Function definition is here def printme( str ): "This prints a passed string into this function" print str return; # Now you can call printme function printme("I'm first call to user defined function!") printme("Again second call to the same function")
عند تنفيذ الرمز أعلاه ، فإنه ينتج النتيجة التالية -
I'm first call to user defined function! Again second call to the same function
Pass by reference vs value التمرير بواسطة القيمة والمراجع
يتم تمرير جميع المعلمات (الوسائط) في لغة بيثون بالرجوع إليها. يعني ذلك إذا قمت بتغيير ما تشير إليه المعلمة داخل دالة ، فإن التغيير ينعكس أيضًا في وظيفة الاتصال. على سبيل المثال -
#!/usr/bin/python # Function definition is here def changeme( mylist ): "This changes a passed list into this function" mylist.append([1,2,3,4]); print "Values inside the function: ", mylist return # Now you can call changeme function mylist = [10,20,30]; changeme( mylist ); print "Values outside the function: ", mylist
هنا ، نحافظ على مرجع للكائن الذي تم تمريره والقيم الملحقة في نفس الكائن. لذلك ، هذا من شأنه أن ينتج النتيجة التالية -
Values inside the function: [10, 20, 30, [1, 2, 3, 4]] Values outside the function: [10, 20, 30, [1, 2, 3, 4]]
يوجد مثال آخر حيث يتم تمرير الوسيطة بالرجوع ويتم استبدال المرجع داخل الوظيفة المطلوبة.
#!/usr/bin/python # Function definition is here def changeme( mylist ): "This changes a passed list into this function" mylist = [1,2,3,4]; # This would assig new reference in mylist print "Values inside the function: ", mylist return # Now you can call changeme function mylist = [10,20,30]; changeme( mylist ); print "Values outside the function: ", mylist
المعلمة mylist هي المحلية إلى changeme الدالة. لا يؤثر تغيير قائمتي داخل الوظيفة على قائمتي. لا تحقق الوظيفة شيئًا ، وفي النهاية ينتج عن ذلك النتيجة التالية -
Values inside the function: [1, 2, 3, 4] Values outside the function: [10, 20, 30]
Function Arguments متغيرات الدوال او الوضائف
يمكنك استدعاء دالة باستخدام الأنواع التالية من الوسائط الرسمية -
- Required arguments المتغيرات الاجبارية
- Keyword arguments المتغيرات الرئسية
- Default arguments المتغيرات الإفتراضية
- Variable-length arguments طول المتغيرات
Required arguments المتغيرات المطلوبة
المتغيرات المطلوبة هي الوسائط التي يتم تمريرها إلى دالة بالترتيب الموضعي الصحيح. هنا ، يجب أن يتطابق عدد الوسائط في استدعاء الدالة تمامًا مع تعريف الوظيفة.
للاتصال بـ printme () ، تحتاج بالتأكيد إلى تمرير وسيطة واحدة ، وإلا فإنه يعطي خطأ في بناء الجملة كما يلي -
#!/usr/bin/python # Function definition is here def printme( str ): "This prints a passed string into this function" print str return; # Now you can call printme function printme()
عند تنفيذ الكود أعلاه ، فإنه ينتج النتيجة التالية -
Traceback (most recent call last): File "test.py", line 11, inprintme(); TypeError: printme() takes exactly 1 argument (0 given)
Keyword arguments الكلمات الرئسية المتغيرات الوسيطة
ترتبط وسيطات الكلمات الرئيسية باستدعاءات الوظائف. عند استخدام وسائط الكلمة الأساسية في استدعاء دالة ، يقوم المتصل بتعريف الوسائط حسب اسم المعلمة.
يتيح لك ذلك تخطي الحجج أو وضعها خارج الترتيب لأن مترجم Python قادر على استخدام الكلمات الأساسية المقدمة لمطابقة القيم مع المعلمات. يمكنك أيضًا إجراء مكالمات الكلمات الرئيسية إلى وظيفة printme () بالطرق التالية -
#!/usr/bin/python # Function definition is here def printme( str ): "This prints a passed string into this function" print str return; # Now you can call printme function printme( str = "My string")
عند تنفيذ الرمز أعلاه ، فإنه ينتج النتيجة التالية -
My string
المثال التالي يعطي صورة أكثر وضوحا. لاحظ أن ترتيب المعلمات لا يهم.
#!/usr/bin/python # Function definition is here def printinfo( name, age ): "This prints a passed info into this function" print "Name: ", name print "Age ", age return; # Now you can call printinfo function printinfo( age=50, name="miki" )
عند تنفيذ الكود أعلاه ، فإنه ينتج النتيجة التالية -
Name: miki Age 50
Default arguments المتغيرات الوسيطة الافتراضية
الوسيطة الافتراضية هي وسيطة تفترض قيمة افتراضية إذا لم يتم توفير قيمة في استدعاء دالة لتلك الوسيطة. يعطي المثال التالي فكرة عن الوسائط الافتراضية ، يقوم بطباعة العمر الافتراضي إذا لم يتم تمريره -
#!/usr/bin/python # Function definition is here def printinfo( name, age = 35 ): "This prints a passed info into this function" print "Name: ", name print "Age ", age return; # Now you can call printinfo function printinfo( age=50, name="miki" ) printinfo( name="miki" )
عند تنفيذ الكود أعلاه ، فإنه ينتج النتيجة التالية -
Name: miki Age 50 Name: miki Age 35
Variable-length arguments وسيطات متغيرة الطول
قد تحتاج إلى معالجة دالة للوسائط أكثر مما حددته أثناء تحديد الوظيفة. تسمى هذه الوسائط وسيطات متغيرة الطول ولا تتم تسميتها في تعريف الوظيفة ، بغض النظر عن الوسائط المطلوبة والوسيطة الافتراضية.
بناء جملة دالة مع وسيطات متغيرات غير الكلمات الرئيسية هو هذا -
def functionname([formal_args,] *var_args_tuple ): "function_docstring" function_suite return [expression]
يتم وضع علامة النجمة (*) قبل اسم المتغير الذي يحتفظ بقيم جميع وسائط المتغيرات غير الأساسية. تبقى هذه المجموعة فارغة إذا لم يتم تحديد وسيطات إضافية أثناء استدعاء الوظيفة. فيما يلي مثال بسيط -
#!/usr/bin/python # Function definition is here def printinfo( arg1, *vartuple ): "This prints a variable passed arguments" print "Output is: " print arg1 for var in vartuple: print var return; # Now you can call printinfo function printinfo( 10 ) printinfo( 70, 60, 50 )
عند تنفيذ الكود أعلاه ، فإنه ينتج النتيجة التالية -
Output is: 10 Output is: 70 60 50
The Anonymous Functions الوظائف او الدوال المجهولة
تسمى هذه الوظائف مجهولة الهوية لأنها غير معلنة بالطريقة القياسية باستخدام الكلمة المفتاحية def. يمكنك استخدام الكلمة الأساسية لامدا لإنشاء وظائف مجهولة صغيرة.
يمكن أن تأخذ نماذج Lambda أي عدد من الوسائط ولكنها تُرجع قيمة واحدة فقط في شكل تعبير. لا يمكن أن تحتوي على أوامر أو تعبيرات متعددة.
لا يمكن أن تكون الوظيفة المجهولة دعوة مباشرة للطباعة لأن lambda تتطلب تعبيرًا
تمتلك وظائف Lambda مساحة الاسم المحلية الخاصة بها ولا يمكنها الوصول إلى المتغيرات بخلاف تلك الموجودة في قائمة المعلمات وتلك الموجودة في مساحة الاسم العالمية.
على الرغم من أنه يبدو أن lambda هي إصدار من سطر واحد من دالة ، إلا أنها لا تعادل البيانات المضمنة في C أو C ++ ، والغرض منها هو تمرير تخصيص مكدس الوظيفة أثناء الاستدعاء لأسباب تتعلق بالأداء.
الصيغة Syntax
يحتوي بناء جملة وظائف lambda على عبارة واحدة فقط ، وهي كما يلي -
lambda [arg1 [,arg2,.....argn]]:expression
فيما يلي مثال لإظهار كيفية عمل شكل وظيفة lambda -
#!/usr/bin/python # Function definition is here sum = lambda arg1, arg2: arg1 + arg2; # Now you can call sum as a function print "Value of total : ", sum( 10, 20 ) print "Value of total : ", sum( 20, 20 )
عند تنفيذ الكود أعلاه ، فإنه ينتج النتيجة التالية -
Value of total : 30
Value of total : 40
The return Statement عبارة الإرجاع
تُرجع عبارة الإرجاع [تعبير] دالة ، وتمرر تعبيرًا اختياريًا للمتصل. بيان الإرجاع بدون وسائط هو نفس الإرجاع بلا.
جميع الأمثلة المذكورة أعلاه لا ترجع أي قيمة. يمكنك إرجاع قيمة من دالة كما يلي -
#!/usr/bin/python # Function definition is here def sum( arg1, arg2 ): # Add both the parameters and return them." total = arg1 + arg2 print "Inside the function : ", total return total; # Now you can call sum function total = sum( 10, 20 ); print "Outside the function : ", total
عند تنفيذ الكود أعلاه ، فإنه ينتج النتيجة التالية -
Inside the function : 30 Outside the function : 30
Scope of Variables نطاق المتغيرات
قد لا يمكن الوصول إلى جميع المتغيرات في البرنامج في جميع المواقع في هذا البرنامج. هذا يعتمد على المكان الذي أعلنت فيه متغير.
يحدد نطاق المتغير جزء البرنامج حيث يمكنك الوصول إلى معرف معين. هناك نوعان من النطاقات الأساسية للمتغيرات في بيثون -
- Global variables متغيرات عامة
- Local variables متغيرات محلية
المتغيرات المحلية والمتغيرات العامة Global vs. Local variables
المتغيرات التي تم تعريفها داخل جسم دالة لها نطاق محلي ، وتلك التي تم تعريفها في الخارج لها نطاق عالمي.
هذا يعني أنه لا يمكن الوصول إلى المتغيرات المحلية إلا داخل الوظيفة التي يتم الإعلان عنها فيها ، بينما يمكن الوصول إلى المتغيرات العالمية في جميع أنحاء الجسم من خلال جميع الوظائف. عند استدعاء دالة ، يتم إدخال المتغيرات التي تم الإعلان عنها بداخلها إلى نطاقها. فيما يلي مثال بسيط -
#!/usr/bin/python total = 0; # This is global variable. # Function definition is here def sum( arg1, arg2 ): # Add both the parameters and return them." total = arg1 + arg2; # Here total is local variable. print "Inside the function local total : ", total return total; # Now you can call sum function sum( 10, 20 ); print "Outside the function global total : ", total
عند تنفيذ الكود أعلاه ، فإنه ينتج النتيجة التالية -
Inside the function local total : 30 Outside the function global total : 0
التسميات: Python بايثون
<< الصفحة الرئيسية