الوظائف في Python

الوظيفة هي مكتبة من الكود التي تعمل فقط عند النداء.

يمكنك تقديم البيانات (تسمى المعاملات) إلى الوظيفة.

يمكن للوظيفة إرجاع البيانات كنتيجة.

لإنشاء وظيفة

في Python، يتم استخدام تعريف وظيفة كلمة مفتاحية تعريف وظيفة:

实例

تعريف وظيفة my_function():
  print("Hello from a function")

نداء وظيفة

لنداء وظيفة، استخدم اسم الوظيفة متبوعًا بأقواس:

实例

تعريف وظيفة my_function():
  print("Hello from a function")
my_function()

运行实例

المعامل

يمكن تقديم المعلومات كمعاملات إلى الوظيفة.

تحدد المعاملات داخل أقواس الاسم بعد اسم الوظيفة. يمكنك إضافة أي عدد من المعاملات حسب الحاجة، فقط باستخدامomma الفاصلة.

يظهر المثال التالي وظيفة تحتوي على معامل (fname). عند نداء هذه الوظيفة، نرسل اسمًا ونستخدمه داخل الوظيفة لطباعة الاسم الكامل:

实例

تعريف وظيفة my_function (fname):
  print(fname + " Gates")
my_function("Bill")
my_function("Steve")
my_function("Elon")

运行实例

القيمة الافتراضية للمعاملات

يظهر المثال التالي كيفية استخدام القيمة الافتراضية للمعاملات.

إذا قمنا بنداء وظيفة بدون معاملات، فإننا نستخدم القيمة الافتراضية:

实例

تعريف وظيفة my_function (بلد = "China"):
  print("أنا من " + 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))

运行实例

معلمات مفتوحة

يمكنك أيضًا إرسال المعلمات باستخدام синтaxis key = value.

ترتيب المعلمات لا يهم.

实例

def my_function(child3, child2, child1):
  print("الطفل الأصغر هو " + child3)
my_function(child1 = "Phoebe", child2 = "Jennifer", child3 = "Rory")

运行实例

في وثائق Python، يُشار إلى كلمة "معلمات مفتوحة" غالبًا باختصار kwargs.

معلمات غير محددة

إذا لم تعرف عدد المعلمات التي ستقوم بتقديمها إلى وظيفتك، فأضف * قبل اسم المعلمات في تعريف الوظيفة.

بهذا، ستقبل الوظيفة مجموعة من المعلمات، ويمكنها الوصول إلى كل منها بشكل مناسب:

实例

إذا كانت عدد المعلمات غير معروف، فأضف * قبل اسم المعلمات.

def my_function(*kids):
  print("الطفل الأصغر هو " + kids[2])
my_function("Phoebe", "Jennifer", "Rory")

运行实例

جملة pass

تعريف الوظيفة لا يجب أن يكون فارغًا، ولكن إذا كنت قد كتبت تعريف وظيفة لا تحتوي على محتوى لأي سبب من الأسباب، فاستخدم جملة 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)

运行实例