0Pricing
Python Academy · درس

الدوال الجزئية

استخدم functools.partial

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

ما هي partial؟

تنشئ functools.partial دالة جديدة مع تعبئة بعض وسائط دالة موجودة مسبقًا. وهي تشبه تحميل الوسائط مسبقًا، بحيث يمكنكم استدعاء النتيجة بعدد أقل من الوسائط.

استوردوها باستخدام from functools import partial.

from functools import partial
def power(base, exp):
    return base ** exp
square = partial(power, exp=2)
print(square(5))

تثبيت الوسائط الموضعية

تملأ الوسائط الموضعية الممرَّرة إلى partial معلمات الدالة من اليسار. وتُمرَّر الوسائط المتبقية عند استدعاء الدالة الجزئية.

from functools import partial
def multiply(a, b):
    return a * b
double = partial(multiply, 2)
print(double(10))
print(double(50))

تثبيت الوسائط المسماة

تصبح الوسائط المسماة المقدَّمة إلى partial قيمًا افتراضية يمكنكم مع ذلك تجاوزها وقت الاستدعاء.

from functools import partial
def greet(name, greeting='Hello'):
    return greeting + ', ' + name
hola = partial(greet, greeting='Hola')
print(hola('Ada'))
print(hola('Bob', greeting='Hey'))

استخدام partial مع الدوال المضمنة

يمكنكم أيضًا إنشاء partial من الدوال المضمنة. وهنا ننشئ محلل أعداد صحيحة بالأساس 2 من int.

from functools import partial
binary = partial(int, base=2)
print(binary('1010'))
print(binary('1111'))

دوال رد اتصال أوضح

تُعد partials مناسبة جدًا لدوال رد الاتصال التي يجب أن تمرروا إليها دالة بلا وسائط أو بوسيط واحد، مع رغبتكم في تحميل السياق مسبقًا.

from functools import partial
def log(level, message):
    return '[' + level + '] ' + message
error = partial(log, 'ERROR')
print(error('disk full'))

استخدام partials مع map

تتناسب الدالة الجزئية بسلاسة مع الدوال عالية الرتبة مثل map، إذ تثبّت وسيطًا واحدًا بينما يتغير الآخر لكل عنصر.

from functools import partial
def add(a, b):
    return a + b
add10 = partial(add, 10)
print(list(map(add10, [1, 2, 3])))

فحص دالة جزئية

يكشف كائن الدالة الجزئية الدالة المغلَّفة عبر .func، والوسائط الموضعية المثبتة عبر .args، والوسائط المسماة المثبتة عبر .keywords.

from functools import partial
def f(a, b, c):
    return (a, b, c)
p = partial(f, 1, c=3)
print(p.func.__name__)
print(p.args)
print(p.keywords)

تكديس الدوال الجزئية

يمكنكم إنشاء دالة جزئية من دالة جزئية أخرى، وإضافة المزيد من الوسائط المثبتة خطوةً بعد خطوة.

from functools import partial
def volume(l, w, h):
    return l * w * h
base = partial(volume, 2)
slab = partial(base, 3)
print(slab(4))

partial مقابل lambda

يمكن لـ lambda تنفيذ المهمة نفسها، لكن partial غالبًا ما يكون أوضح عند تثبيت الوسائط، كما أنه يكشف الدالة المغلَّفة لفحصها.

from functools import partial
def power(base, exp):
    return base ** exp
cube_p = partial(power, exp=3)
cube_l = lambda b: power(b, 3)
print(cube_p(2), cube_l(2))

مثال عملي: التقريب

أنشئوا دالة للتقريب إلى منزلتين عشريتين باستخدام partial من الدالة المضمنة round.

from functools import partial
round2 = partial(round, ndigits=2)
print(round2(3.14159))
print(round2(2.71828))

partialmethod للفئات

تنفذ functools.partialmethod ذات الصلة المهمة نفسها مع الطرق داخل تعريف الفئة، إذ تملأ وسائط الطريقة مسبقًا.

from functools import partialmethod
class Light:
    def set(self, state):
        self.state = state
        return state
    on = partialmethod(set, True)
    off = partialmethod(set, False)
l = Light()
print(l.on())
print(l.off())

تحقق سريع

ماذا تفعل functools.partial؟

مراجعة: الدوال الجزئية

تعلّمتم أن functools.partial:

  • تنشئ دالة جديدة مع تعبئة بعض الوسائط مسبقًا، سواء كانت موضعية أو مسماة.
  • تتيح تجاوز القيم الافتراضية المسماة المحددة مسبقًا وقت الاستدعاء.
  • مناسبة جدًا لدوال رد الاتصال وmap وتقليل التكرار.
  • تكشف .func و.args و.keywords، ولها صيغة للطرق هي partialmethod.
from functools import partial
add = lambda a, b: a + b
plus1 = partial(add, 1)
print(plus1(41))

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

هل درس «الدوال الجزئية» مجاني؟

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

ماذا ستتعلم في «الدوال الجزئية»؟

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

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

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

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

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

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

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

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

  1. الدوال من الدرجة الأولى
  2. الإغلاقات والمتغيرات الحرة
  3. nonlocal والحالة القابلة للتغيير
  4. الدوال الجزئية
← العودة إلى Python Academy