0Pricing
Python Academy · درس

الدوال ككائنات من الدرجة الأولى

افهم الإغلاقات وتمرير الدوال كوسائط

الدوال ككائنات من الدرجة الأولى درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.

مقدمة

في Python، الدوال كائنات من الدرجة الأولى: يمكن تمريرها كوسائط، وإرجاعها، وتخزينها في هياكل البيانات.

الدوال كائنات

ينشئ ‎def double(x): return x*2‎ كائن دالة. و‎double‎ ليس سوى اسم. يمكنك إسناده: ‎fn = double‎؛ وسيعمل ‎fn(5)‎.
def double(x): return x * 2
fn = double
print(fn(5))
print(type(fn))

تمرير الدوال كوسائط

‎def apply(func, val): return func(val)‎ — ‏‎func‎ وسيط قابل للاستدعاء. وهذا من البرمجة عالية الرتبة.
def apply(func, val): return func(val)
print(apply(abs, -7))
print(apply(str, 42))

تخزين الدوال في الحاويات

تخزّن ‎ops = [add, sub, mul]‎ كائنات الدوال في قائمة. ويمكنك التكرار واستدعاؤها: ‎for op in ops: op(a, b)‎.
ops = [str.upper, str.lower, str.strip]
for op in ops:
    print(op('  Hello  '))

إرجاع الدوال

يمكن للدالة إرجاع دالة أخرى. ‎def make_adder(n): def adder(x): return x+n; return adder‎
def make_adder(n):
    def adder(x): return x + n
    return adder
add10 = make_adder(10)
print(add10(5), add10(20))

الإغلاقات

يلتقط الإغلاق المتغيرات من النطاق المحيط. إذ «تغلق» الدالة الداخلية على ‎n‎ الموجودة في ‎make_adder‎.
def counter(start=0):
    count = [start]
    def inc():
        count[0] += 1
        return count[0]
    return inc
c = counter()
print(c(), c(), c())

Lambda كدالة مجهولة

‎lambda x: x*2‎ دالة مجهولة تتكون من تعبير واحد. وهي مفيدة كدوال استدعاء قصيرة، لكن سمِّها إذا كان المنطق غير بسيط.
nums = [3, 1, 4, 1, 5]
print(sorted(nums, key=lambda x: -x))

‎map()‎ و‎filter()‎

تطبّق ‎map(func, iterable)‎ الدالة ‎func‎ على كل عنصر. وتحافظ ‎filter(pred, iterable)‎ على العناصر التي تكون فيها ‎pred‎ مساوية لـ ‎True‎.
nums = [1, 2, 3, 4, 5]
print(list(map(lambda x: x**2, nums)))
print(list(filter(lambda x: x%2==0, nums)))

‎functools.reduce()‎

تطوي ‎reduce(func, seq)‎ تسلسلًا: تعطي ‎reduce(lambda a,b: a+b, [1,2,3,4])‎ القيمة ‎10‎.
from functools import reduce
print(reduce(lambda a,b: a*b, [1,2,3,4,5]))

التحقق من قابلية الاستدعاء

تعيد ‎callable(obj)‎ القيمة ‎True‎ إذا كان بالإمكان استدعاء ‎obj‎. فالدوال والفئات والكائنات التي تملك ‎__call__‎ قابلة للاستدعاء.
print(callable(print))
print(callable(42))
class C:
    def __call__(self): pass
print(callable(C()))

استبطان الدوال

توفّر ‎func.__name__‎ و‎func.__doc__‎ و‎func.__annotations__‎ و‎inspect.signature(func)‎ بيانات وصفية عن الدالة.
import inspect
def greet(name: str) -> str:
    '''Returns a greeting.'''
    return f'Hi {name}'
print(greet.__name__, greet.__annotations__)
print(inspect.signature(greet))

تحقق سريع

ما الإغلاق في Python؟

مراجعة

الدوال كائنات من الدرجة الأولى. مرّرها كوسائط، وأرجعها من الدوال، وخزّنها في الحاويات. تلتقط الإغلاقات النطاق المحيط. استخدم ‎lambda‎ للتعبيرات القصيرة في سطر واحد.

واصل التقدم

تقدم ممتاز! واصل التقدم لإتقان المفهوم التالي.

الأسئلة الشائعة

هل درس «الدوال ككائنات من الدرجة الأولى» مجاني؟

نعم — نص درس «الدوال ككائنات من الدرجة الأولى» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.

ماذا ستتعلم في «الدوال ككائنات من الدرجة الأولى»؟

افهم الإغلاقات وتمرير الدوال كوسائط تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟

لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «الدوال ككائنات من الدرجة الأولى»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟

نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الدوال ككائنات من الدرجة الأولى
  2. كتابة مزخرفات مخصصة
  3. المزخرف @property
  4. @classmethod و@staticmethod
← العودة إلى Python Academy