› كل الدروس
الدرس 4 من 12 28 دقيقة

Functions

اكتب code مرة، استخدمه مليون

الفكرة باختصار

function قطعة code ليها اسم. بتديها مدخلات، بتشتغل، وبترجّعلك نتيجة.

بعد الدرس ده هتعرف

  • تعرّف function وتناديها
  • تبعت values لـ function وتستقبل نتيجة
  • تفرّق بين print و return — أهم فرق في الدرس
  • تقسّم program كبير لقطع صغيرة مفهومة
1

شوف الفكرة الأول

قبل أي code — افهم بيحصل إيه

2

الشرح

فكرة واحدة في كل خطوة

1

ليه أصلاً functions؟

تخيّل إنك بتحسب المتوسط في 5 مكانات مختلفة في program. نسخت code 5 مرات.

بعد أسبوع اكتشفت إن فيه غلطة في الحسبة. دلوقتي لازم تصلّحها 5 مرات — وغالبًا هتنسى واحدة.

function بتحل ده: code مكتوب في مكان واحد. تصلّحه مرة، يتصلّح في كل حتة.

2

تعريف function

الشكل:

1. كلمة def وبعدها اسم function
2. أقواس () — جواها المدخلات لو فيه
3. نقطتين :
4. code مُزاح 4 مسافات

تعريف function مش بيشغّلها. هي بتفضل مستنية لحد ما تناديها باسمها + أقواس.

Python
1def greet():
2 print("Welcome")
3
4print("before the call")
5greet()
6greet()
الناتج
before the call
Welcome
Welcome
3

ابعتلها values (parameters)

الأقواس مش ديكور — دي الباب اللي البيانات بتدخل منه.

الاسم اللي بتكتبه في التعريف اسمه parameter (الصندوق الفاضي). و value اللي بتبعتها وقت النداء اسمها argument (اللي بتحطه في الصندوق).

Python
1def greet(name):
2 print(f"Hello {name}")
3
4greet("Sara")
5greet("Karim")
الناتج
Hello Sara
Hello Karim
4

return — أهم كلمة في الدرس

في فرق كبير بين إن function تطبع وبين إنها ترجّع:

print = اعرض على الشاشة للمستخدم. خلاص، value راحت.
return = سلّم النتيجة لـ code اللي ناداك. تقدر تخزّنها وتحسب عليها.

لو عايز تستخدم النتيجة في حاجة تانية، لازم return. function اللي بتطبع بس بترجّع None.

Python
1def add_print(a, b):
2 print(a + b)
3
4def add_return(a, b):
5 return a + b
6
7x = add_print(2, 3)
8y = add_return(2, 3)
9print("x =", x)
10print("y =", y)
11print("y * 10 =", y * 10)
الناتج
5
x = None
y = 5
y * 10 = 50
5

return بتوقّف function فورًا

أول ما Python تقابل return، بتخرج من function على طول. أي code بعدها مش هيشتغل.

ده مفيد: بتستخدمه عشان تخرج بدري لو الحالة واضحة.

Python
1def check(n):
2 if n < 0:
3 return "negative number"
4 return "positive number"
5
6print(check(-5))
7print(check(10))
الناتج
negative number
positive number
6

values افتراضية

ينفع تدي parameter أي default value جاهزة. لو اللي بينادي function ما بعتش value دي، Python هتستخدم الافتراضية.

Python
1def price_after(price, discount=10):
2 return price - (price * discount / 100)
3
4print(price_after(200))
5print(price_after(200, 25))
الناتج
180.0
150.0
7

variables جوّه function محليّة

أي variable بتعمله جوّه function بيعيش جوّاها بس. أول ما function تخلص، بيختفي.

ده مقصود وكويس: معناه إن كل function شغّالة في عالمها لوحدها، ومش هتخرّب على باقي program من غير ما تحس.

Python
1def calc():
2 inside = 100
3 return inside
4
5print(calc())
6print(inside)
8

function الكويسة بتعمل حاجة واحدة

لو لقيت نفسك بتسمّي function calculate_and_print_and_save، يبقى هي تلات functions مش واحدة.

function اللي بتعمل حاجة واحدة: أسهل في الاسم، وأسهل في الاختبار، وبتتعاد استخدامها في أماكن تانية.

شوف الفرق: function بتحسب بس، و function تانية بتعرض. كده أقدر أستخدم الحسبة في تقرير، أو في file، أو في موقع — من غير ما أغيّر فيها حاجة.

Python
1def average(nums):
2 return sum(nums) / len(nums)
3
4def show(label, value):
5 print(f"{label}: {value:.1f}")
6
7show("Average", average([80, 90, 70]))
الناتج
Average: 80.0
9

نادي بالاسم مش بالترتيب

لما function تاخد كذا value، الترتيب بيبقى سهل تغلط فيه: book("Python", 420, 3) — مين فيهم الصفحات ومين النسخ؟

الحل: نادي بالاسم. book(title="Python", pages=420) — واضحة وما تتغلطش، وكمان الترتيب مبقاش مهم.

Python
1def price_after(price, discount=10, tax=14):
2 after = price - (price * discount / 100)
3 return after + (after * tax / 100)
4
5print(price_after(200))
6print(price_after(200, tax=0))
7print(price_after(price=200, discount=50, tax=0))
الناتج
205.2
180.0
100.0
10

function اللي بتنادي نفسها

function ممكن تنادي نفسها. الفكرة اسمها recursion، ومعناها: حُل مسألة أصغر بنفس الطريقة لحد ما توصل لحالة بسيطة توقف عندها.

مضروب 4 = 4 × مضروب 3 … وهكذا لحد مضروب 1 = 1.

لازم يكون فيه condition وقوف (if n <= 1). من غيره function هتنادي نفسها للأبد.

Python
1def factorial(n):
2 if n <= 1:
3 return 1
4 return n * factorial(n - 1)
5
6print(factorial(4))
7print(factorial(6))
الناتج
24
720
3

وده كمان شوفه متحرك

الفكرة دي أسهل ما تتشاف من ما تتقرا

4

أمثلة محلولة

شوف إزاي بنفكّر قبل ما نكتب

مثال 1

function بترجّع، مش بتطبع

المطلوب: اكتب function بتحسب مساحة مستطيل، واستخدم نتيجتها في حسبة تانية.

نفكّر إزاي؟

  1. 1عايز أستخدم الناتج بعدين → يبقى return مش print
  2. 2المدخلات: الطول والعرض
  3. 3النداء بيرجّع رقم أقدر أخزّنه وأحسب عليه
مثال 2

function بتفحص وترجّع True/False

المطلوب: اكتب function is_passed بترجّع هل الدرجة ناجحة ولا لأ.

نفكّر إزاي؟

  1. 1المقارنة نفسها value بتاعتها True/False
  2. 2يبقى مش محتاج if خالص — أرجّع المقارنة على طول
  3. 3اسم function يبدأ بـ is_ عُرف بيوضّح إنها بترجّع صح/غلط
مثال 3

خروج بدري بـ return

المطلوب: function بتحسب المتوسط، وبترجّع صفر لو list فاضية.

نفكّر إزاي؟

  1. 1لازم أتعامل مع الحالة الشاذة الأول
  2. 2return بتخرج فورًا — فمش محتاج else
  3. 3code بيبقى مستوى واحد بس، أسهل في القراية
مثال 4

function بتنادي function

المطلوب: function بتحسب الضريبة، و function تانية بتستخدمها لحساب السعر النهائي.

نفكّر إزاي؟

  1. 1كل function تعمل حاجة واحدة بس
  2. 2function الكبيرة بتركّب الصغيرة
  3. 3كده لو نسبة الضريبة اتغيّرت، أغيّرها في مكان واحد
مثال 5

values افتراضية

المطلوب: function تحيّة بتقول «أهلاً» بشكل افتراضي، وتقبل تحية مخصّصة.

نفكّر إزاي؟

  1. 1parameter التاني ليه value افتراضية
  2. 2لو مبعتهاش → بتستخدم الافتراضية
  3. 3parameters اللي ليها value افتراضية لازم تيجي في الآخر
مثال 6

function ترجّع أكتر من value

المطلوب: function بترجّع أصغر وأكبر value في list.

نفكّر إزاي؟

  1. 1الفاصلة بين 2 values في return بتعمل tuple
  2. 2عند الاستقبال بفكّه في 2 variables
  3. 3كده function بترجّع «حزمة» بدل value واحدة
5

ورقة مراجعة

ارجعلها وإنت بتحل — مش محتاج تحفظها

كل حاجة عن functions
الحاجةمعناهامثالالناتج
def f():عرّف functiondef hi():function اتعرّفت بس
f()نادي functionhi()code بيشتغل
parameterالاسم في التعريفdef f(x):x صندوق فاضي
argumentvalue وقت النداءf(5)x بقت 5
returnسلّم النتيجة واخرجreturn 5function بترجّع 5
من غير returnfunction بترجّع Nonex = show()None
x=valuevalue افتراضيةdef f(a, b=2):f(1) → b = 2
variable محليبيعيش جوّه function بسجوّه f: y = 1y مش موجودة بره
6

function وهي بتشتغل — شوف Call Stack

شوفه بيشتغل سطر سطر

شغّل code خطوة خطوة

لاحظ إن لما function تشتغل، بيظهر إطار جديد في الذاكرة ليه variables بتاعته الخاصة. وأول ما تخلص بيختفي.

1def area(w, h):◂
2 result = w * h
3 return result
4
5room = area(4, 5)
6hall = area(10, 3)
7total = room + hall
8print(f"Total area: {total} m")
الذاكرة

لسه مفيش variables

الناتج على الشاشة
لسه ما اتطبعش حاجة…
1

عرّفنا function area(w, h) — لسه ما اشتغلتش، بس بقت جاهزة

خطوة 112 خطوة
Python الحقيقيCPython 3.14

المحاكاة فوق بتشرحلك خطوة خطوة. دوس هنا عشان تشغّل نفس code على Python حقيقي وتتأكد بنفسك.
أول مرة هيحمّل ~11 ميجا — بعد كده بيبقى فوري.

7

غلطات بتحصل كتير

شوفها هنا بدل ما تضيّع ساعة فيها

غلط
def greet()
    print("hi")
صح
def greet():
    print("hi")

نسيت النقطتين : بعد الأقواس.

غلط
def add(a, b):
    print(a + b)

x = add(1, 2)
print(x * 2)
صح
def add(a, b):
    return a + b

x = add(1, 2)
print(x * 2)

function بتطبع بس وما بترجّعش. فـ x بتساوي None والضرب بيطلّع error.

غلط
def greet(name):
    print(name)

greet()
صح
def greet(name):
    print(name)

greet("Ahmed")

function محتاجة value لـ name وإنت ما بعتّش حاجة.

8

مسائل سريعة

فكّر الأول — بعدين اكشف

1

إيه اللي هيتطبع؟

1def f(x):
2 return x + 1
3
4print(f(f(1)))
2

إيه value r؟

1def f():
2 print("hi")
3
4r = f()
3

code ده هيطبع كام سطر؟

1def f():
2 return 1
3 print("after return")
4
5f()
4

إيه الناتج؟

1def f(a, b=10):
2 return a * b
3
4print(f(3))
5

ليه ده بيطلّع NameError؟

1def f():
2 x = 5
3
4f()
5print(x)
6

إيه الناتج؟

1def double(n):
2 return n * 2
3
4nums = [1, 2, 3]
5for n in nums:
6 print(double(n))
7

فين الغلط؟

1def greet(name):
2 print(name)
3
4greet("Abdelrahman")
8

إيه الناتج؟

1def f(n):
2 if n <= 1:
3 return 1
4 return n * f(n - 1)
5
6print(f(4))
9

جرّب بنفسك

اكتب code — ده الجزء اللي بيعلّم فعلاً

جرّب بنفسك

اكتب function average بتاخد 3 أرقام وترجّع متوسطهم. بعدين استخدمها واطبع النتيجة.

شغّل code خطوة خطوة
1def average(a, b, c):
2 # write here
3
4
الذاكرة

لسه مفيش variables

الناتج على الشاشة
لسه ما اتطبعش حاجة…

IndentationError: expected an indented block

بعد النقطتين (:) لازم السطر اللي بعدها يبقى مزاح لجوّه ٤ مسافات.

خطوة 1خطوة واحدة
Python الحقيقيCPython 3.14

المحاكاة فوق بتشرحلك خطوة خطوة. دوس هنا عشان تشغّل نفس code على Python حقيقي وتتأكد بنفسك.
أول مرة هيحمّل ~11 ميجا — بعد كده بيبقى فوري.

تمرين إضافي 2
جرّب بنفسك

اكتب function bmi(weight, height) بتحسب مؤشر كتلة الجسم (الوزن ÷ الطول²) وترجّعه. استخدمها واطبع النتيجة بخانة عشرية واحدة.

شغّل code خطوة خطوة
1def bmi(weight, height):
2 # write here
3
4
الذاكرة

لسه مفيش variables

الناتج على الشاشة
لسه ما اتطبعش حاجة…

IndentationError: expected an indented block

بعد النقطتين (:) لازم السطر اللي بعدها يبقى مزاح لجوّه ٤ مسافات.

خطوة 1خطوة واحدة
Python الحقيقيCPython 3.14

المحاكاة فوق بتشرحلك خطوة خطوة. دوس هنا عشان تشغّل نفس code على Python حقيقي وتتأكد بنفسك.
أول مرة هيحمّل ~11 ميجا — بعد كده بيبقى فوري.

تمرين إضافي 3
جرّب بنفسك

اكتب اتنين functions: celsius_to_f و f_to_celsius. حوّل 37 درجة مئوية لفهرنهايت والعكس للتأكد.

شغّل code خطوة خطوة
1def celsius_to_f(c):
2 # write here
3
4
الذاكرة

لسه مفيش variables

الناتج على الشاشة
لسه ما اتطبعش حاجة…

IndentationError: expected an indented block

بعد النقطتين (:) لازم السطر اللي بعدها يبقى مزاح لجوّه ٤ مسافات.

خطوة 1خطوة واحدة
Python الحقيقيCPython 3.14

المحاكاة فوق بتشرحلك خطوة خطوة. دوس هنا عشان تشغّل نفس code على Python حقيقي وتتأكد بنفسك.
أول مرة هيحمّل ~11 ميجا — بعد كده بيبقى فوري.

تمرين إضافي 4
جرّب بنفسك

اكتب function grade_of(score) بترجّع التقدير كـ string (امتياز / جيد جدًا / جيد / راسب)، واستخدمها على تلات درجات.

شغّل code خطوة خطوة
1def grade_of(score):
2 # write here
3
4
الذاكرة

لسه مفيش variables

الناتج على الشاشة
لسه ما اتطبعش حاجة…

IndentationError: expected an indented block

بعد النقطتين (:) لازم السطر اللي بعدها يبقى مزاح لجوّه ٤ مسافات.

خطوة 1خطوة واحدة
Python الحقيقيCPython 3.14

المحاكاة فوق بتشرحلك خطوة خطوة. دوس هنا عشان تشغّل نفس code على Python حقيقي وتتأكد بنفسك.
أول مرة هيحمّل ~11 ميجا — بعد كده بيبقى فوري.

10

اختبر نفسك

كل إجابة معاها السبب

1

code ده هيطبع كام سطر؟

1def f():
2 return 1
3 print("after return")
4
5f()
2

ليه code ده بيطلّع NameError؟

1def f():
2 x = 5
3
4f()
5print(x)
3

إيه الناتج؟

1def f(x):
2 return x + 1
3
4print(f(f(1)))
4

إيه اللي هيتطبع؟

1def f(x):
2 return x * 2
3
4print(f(3) + 1)
5

إيه الفرق بين print و return جوّه function؟

6

إيه value y؟

1def show(n):
2 print(n)
3
4y = show(5)
7

code ده هيطبع إيه؟

1def f(a, b=5):
2 return a + b
3
4print(f(10))

خلصت الدرس؟

علّم عليه عشان تعرف إنت وصلت لفين لما ترجع تاني.

الدرس اللي بعده: Loops ←