وظائف بايثون
الوظيفة عبارة عن كتلة من التعليمات البرمجية يتم تشغيلها فقط عند استدعائها.
يمكنك تمرير البيانات ، المعروفة باسم المعلمات ، إلى دالة.
يمكن للدالة إرجاع البيانات كنتيجة.
خلق وظيفة
في Python ، يتم تحديد الوظيفة باستخدام الكلمة الأساسية def :
مثال
def my_function():
print("Hello from a function")
استدعاء وظيفة
لاستدعاء دالة ، استخدم اسم الدالة متبوعًا بقوس:
مثال
def my_function():
print("Hello from a function")
my_function()
الحجج
يمكن تمرير المعلومات إلى وظائف كوسائط.
يتم تحديد الوسيطات بعد اسم الوظيفة ، داخل الأقواس. يمكنك إضافة العديد من الوسائط كما تريد ، فقط افصل بينها بفاصلة.
المثال التالي له دالة ذات وسيطة واحدة (fname). عندما يتم استدعاء الوظيفة ، نقوم بتمرير الاسم الأول ، والذي يتم استخدامه داخل الوظيفة لطباعة الاسم الكامل:
مثال
def my_function(fname):
print(fname + " Refsnes")
my_function("Emil")
my_function("Tobias")
my_function("Linus")
غالبًا ما يتم اختصار الحجج إلى args في وثائق Python.
معلمات أم حجج؟
يمكن استخدام المعلمة والوسيطة المصطلحين لنفس الشيء: المعلومات التي يتم تمريرها إلى دالة .
من منظور الوظيفة:
المعلمة هي المتغير المدرج داخل الأقواس في تعريف الوظيفة.
الوسيطة هي القيمة التي يتم إرسالها إلى الوظيفة عندما يتم استدعاؤها.
عدد الحجج
بشكل افتراضي ، يجب استدعاء الدالة بالعدد الصحيح من الوسائط. بمعنى أنه إذا كانت وظيفتك تتوقع وسيطتين ، فعليك استدعاء الدالة باستخدام وسيطتين ، وليس أكثر وليس أقل.
مثال
تتوقع هذه الوظيفة وسيطتين ، وتحصل على وسيطتين:
def my_function(fname, lname):
print(fname + " " + lname)
my_function("Emil", "Refsnes")
مثال
تتوقع هذه الوظيفة وسيطتين ، ولكنها تحصل على وسيط واحد فقط:
def my_function(fname, lname):
print(fname + " " + lname)
my_function("Emil")
الحجج التعسفية * حجج
إذا كنت لا تعرف عدد الوسائط التي سيتم تمريرها إلى وظيفتك ، فقم بإضافة *
قبل اسم المعلمة في تعريف الوظيفة.
بهذه الطريقة ستتلقى الوظيفة مجموعة من المعطيات ، ويمكنها الوصول إلى العناصر وفقًا لذلك:
مثال
إذا كان عدد الوسائط غير معروف ، أضف a *
قبل اسم المعلمة:
def my_function(*kids):
print("The youngest child
is " + kids[2])
my_function("Emil", "Tobias", "Linus")
غالبًا ما يتم اختصار الحجج التعسفية إلى * args في وثائق Python.
وسيطات الكلمات الرئيسية
يمكنك أيضًا إرسال وسيطات باستخدام key = value syntax.
بهذه الطريقة لا يهم ترتيب الحجج.
مثال
def my_function(child3, child2, child1):
print("The youngest child
is " + child3)
my_function(child1 = "Emil", child2 = "Tobias", child3 = "Linus")
غالبًا ما يتم اختصار عبارة Keyword Arguments إلى kwargs في وثائق Python.
وسيطات الكلمات الرئيسية التعسفية ، ** kwargs
إذا كنت لا تعرف عدد وسيطات الكلمات الأساسية التي سيتم تمريرها إلى وظيفتك ، فقم بإضافة علامتين نجميتين: **
قبل اسم المعلمة في تعريف الوظيفة.
بهذه الطريقة ستتلقى الوظيفة قاموسًا للوسائط ، ويمكنها الوصول إلى العناصر وفقًا لذلك:
مثال
إذا كان عدد وسيطات الكلمات الرئيسية غير معروف ، فقم بإضافة ضعف
**
قبل اسم المعلمة:
def my_function(**kid):
print("His last name is " + kid["lname"])
my_function(fname = "Tobias", lname = "Refsnes")
غالبًا ما يتم اختصار وسيطات الكلمات التعسفية إلى ** kwargs في وثائق Python.
قيمة المعلمة الافتراضية
يوضح المثال التالي كيفية استخدام قيمة معلمة افتراضية.
إذا استدعينا الدالة بدون وسيطة ، فإنها تستخدم القيمة الافتراضية:
مثال
def my_function(country = "Norway"):
print("I am from " +
country)
my_function("Sweden")
my_function("India")
my_function()
my_function("Brazil")
تمرير قائمة كوسيلة
يمكنك إرسال أي أنواع بيانات من الوسيطات إلى دالة (سلسلة ، رقم ، قائمة ، قاموس ، إلخ) ، وسيتم التعامل معها على أنها نفس نوع البيانات داخل الوظيفة.
على سبيل المثال ، إذا أرسلت قائمة كوسيطة ، فستظل قائمة عندما تصل إلى الوظيفة:
مثال
def my_function(food):
for x in food:
print(x)
fruits = ["apple", "banana", "cherry"]
my_function(fruits)
إرجاع القيم
للسماح للدالة بإرجاع قيمة ، استخدم return
العبارة:
مثال
def my_function(x):
return 5 * x
print(my_function(3))
print(my_function(5))
print(my_function(9))
بيان التمرير
function
function
لا يمكن أن تكون التعريفات فارغة ، ولكن إذا كان لديك تعريف بدون محتوى لسبب ما ، فضعه في pass
العبارة لتجنب حدوث خطأ.
مثال
def myfunction():
pass
العودية
تقبل Python أيضًا تكرار الوظيفة ، مما يعني أن الوظيفة المحددة يمكنها استدعاء نفسها.
التكرار هو مفهوم رياضي وبرمجي شائع. هذا يعني أن الوظيفة تستدعي نفسها. هذا له فائدة بمعنى أنه يمكنك تكرار البيانات للوصول إلى نتيجة.
يجب أن يكون المطور حريصًا جدًا في التعامل مع العودية حيث يمكن أن يكون من السهل جدًا الانزلاق إلى كتابة وظيفة لا تنتهي أبدًا ، أو وظيفة تستخدم كميات زائدة من الذاكرة أو طاقة المعالج. ومع ذلك ، عند كتابة العودية بشكل صحيح ، يمكن أن تكون طريقة فعالة للغاية وأنيقة من الناحية الحسابية للبرمجة.
في هذا المثال ، tri_recursion () هي دالة قمنا بتعريفها لتسمي نفسها ("recurse"). نستخدم المتغير k على أنها البيانات ، والتي تنخفض ( -1 ) في كل مرة نتكرر فيها. ينتهي العودية عندما لا يكون الشرط أكبر من 0 (أي عندما يكون 0).
بالنسبة للمطور الجديد ، قد يستغرق الأمر بعض الوقت لمعرفة كيفية عمل ذلك بالضبط ، وأفضل طريقة لمعرفة ذلك هي اختباره وتعديله.
مثال
مثال العودية
def tri_recursion(k):
if(k > 0):
result = k + tri_recursion(k - 1)
print(result)
else:
result = 0
return result
print("\n\nRecursion Example Results")
tri_recursion(6)