الفرق بين المراجعتين لصفحة: «Python/functools/partial»
إضافة الصّفحة |
لا ملخص تعديل |
||
(1 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة) | |||
سطر 1: | سطر 1: | ||
تعيد الدّالة <code>functools.partial()</code> كائن <code>partial</code> يتصرّف كالدّالة المُعطاة عند استدعائها بما مُرّر من مُعاملات (arguments) ومُعاملات كلمات مفتاحيّة (keyword arguments، أي المُعاملات التي تُمرّر مع ذكر أسمائها إضافةً إلى قيمها). إن استُدعيَ الكائن بمُعاملات إضافيّة، فستُضاف إلى مُعاملات الدّالة، و إن استُدعيَ الكائن بمُعاملات كلمات مفتاحيّة إضافيّة، فستُوسّع وتُعوّض معاملات الكلمات المفتاحيّة السّابقة. | تعيد الدّالة <code>functools.partial()</code> كائن <code>partial</code> يتصرّف كالدّالة المُعطاة عند استدعائها بما مُرّر من مُعاملات (arguments) ومُعاملات كلمات مفتاحيّة (keyword arguments، أي المُعاملات التي تُمرّر مع ذكر أسمائها إضافةً إلى قيمها). إن استُدعيَ الكائن بمُعاملات إضافيّة، فستُضاف إلى مُعاملات الدّالة، و إن استُدعيَ الكائن بمُعاملات كلمات مفتاحيّة إضافيّة، فستُوسّع وتُعوّض معاملات الكلمات المفتاحيّة السّابقة. | ||
سطر 10: | سطر 9: | ||
== المعاملات == | == المعاملات == | ||
=== <code>func</code> === | === <code>func</code> === | ||
الدّالة المرغوب إنشاء دالّة جزئيّة منها. | الدّالة المرغوب إنشاء دالّة جزئيّة منها. | ||
سطر 25: | سطر 25: | ||
=== <code>partial.func</code> === | === <code>partial.func</code> === | ||
كائن قابل للاستدعاء أو دالّة. ستُوجّه | كائن قابل للاستدعاء أو دالّة. ستُوجّه استدعاءات <code>partial</code> إلى الكائن <code>partial.func</code> مع مُعاملات وكلمات مفتاحيّة جديدة. | ||
=== <code>partial.args</code> === | === <code>partial.args</code> === | ||
سطر 33: | سطر 33: | ||
مُعاملات الكلمات المفتاحيّة التي ستُمرّر عندما يُستدعى الكائن <code>partial</code>. | مُعاملات الكلمات المفتاحيّة التي ستُمرّر عندما يُستدعى الكائن <code>partial</code>. | ||
كائنات <code>partial</code> مثلُها مثل الدّوال، إذ تكون كائناتٍ قابلة للاستدعاء، وذات إحالة ضعيفة (weak referencable)، ويُمكن لها أن تمتلك خاصيّات مُعيّنة. لكن هناك بعض الفروقات المُهمّة، على سبيل المثال، الخاصيّتان <code>__name__</code> و<code>__doc__</code> لا تُنشآن تلقائيًّا. إضافةً إلى أنّ كائنات <code>partial</code> المُعرفّة في الأصناف تتصرّف مثل التّوابع السّاكنة ولا تتحوّل إلى توابع مُرتبطة (bound methods) عند البحث عن خاصيّات النّسخة. | كائنات <code>partial</code> مثلُها مثل الدّوال، إذ تكون كائناتٍ قابلة للاستدعاء، وذات إحالة ضعيفة (weak referencable)، ويُمكن لها أن تمتلك خاصيّات مُعيّنة. لكن هناك بعض الفروقات المُهمّة، على سبيل المثال، الخاصيّتان <code>__name__</code> (التي تحمل اسم الدّالة) و<code>__doc__</code> (التي تُمثّل [[Python/documentation strings|سلسلة التّوثيق النّصيّة]]) لا تُنشآن تلقائيًّا. إضافةً إلى أنّ كائنات <code>partial</code> المُعرفّة في الأصناف تتصرّف مثل [[Python/staticmethod|التّوابع السّاكنة]] ولا تتحوّل إلى توابع مُرتبطة (bound methods) عند البحث عن خاصيّات النّسخة. | ||
== أمثلة == | == أمثلة == | ||
تُستخدم الدّالة <code>functools.partial()</code> لإنشاء دالّة جزئيّة تُجمّد جزءًا ممّا يُمرّر إلى الدّالة من مُعاملات، ما يُنشئُ كائنًا ذا توقيع أبسط. على سبيل المثال، يُمكن استعمال الدّالة <code>functools.partial()</code> لإنشاء كائن قابل للاستدعاء يتصرّف مثل الدّالة <code>int()</code> بمُعامل أساس (base) يُساوي افتراضيًّا القيمة 2: | تُستخدم الدّالة <code>functools.partial()</code> لإنشاء دالّة جزئيّة تُجمّد جزءًا ممّا يُمرّر إلى الدّالة من مُعاملات، ما يُنشئُ كائنًا ذا توقيع أبسط. على سبيل المثال، يُمكن استعمال الدّالة <code>functools.partial()</code> لإنشاء كائن قابل للاستدعاء يتصرّف مثل الدّالة <code>[[Python/int|int()]]</code> بمُعامل أساس (base) يُساوي افتراضيًّا القيمة 2:<syntaxhighlight lang="python3"> | ||
<syntaxhighlight lang="python3"> | |||
>>> from functools import partial | >>> from functools import partial | ||
>>> basetwo = partial(int, base=2) | >>> basetwo = partial(int, base=2) | ||
سطر 46: | سطر 44: | ||
== ملاحظات == | == ملاحظات == | ||
الدّالة مُكافئة تقريبًا لما يلي: | الدّالة مُكافئة تقريبًا لما يلي:<syntaxhighlight lang="python3"> | ||
<syntaxhighlight lang="python3"> | |||
def partial(func, *args, **keywords): | def partial(func, *args, **keywords): | ||
def newfunc(*fargs, **fkeywords): | def newfunc(*fargs, **fkeywords): | ||
سطر 60: | سطر 57: | ||
== انظر أيضًا == | == انظر أيضًا == | ||
* [[Python/functools/partialmethod|functools.partialmethod]]: لتابعٍ جزئيّ عوضًا عن دالّة. | * [[Python/functools/partialmethod|<code>functools.partialmethod</code>]]: لتابعٍ جزئيّ عوضًا عن دالّة. | ||
* [[Python/int|الأعداد الصّحيحة في بايثون]]. | * [[Python/int|الأعداد الصّحيحة في بايثون]]. | ||
* [[Python/defining-functions|تعريف الدوال في بايثون]]. | * [[Python/defining-functions|تعريف الدوال في بايثون]]. | ||
== مصادر == | == مصادر == | ||
* [https://docs.python.org/3/library/functools.html#functools.partial قسم الدالة functools.partial في توثيق Python الرسمي]. | * [https://docs.python.org/3/library/functools.html#functools.partial قسم الدالة functools.partial في توثيق Python الرسمي.]<noinclude>{{DISPLAYTITLE:الدالة <code>functools.partial()</code> في بايثون}}</noinclude> | ||
[[تصنيف:Python]] | [[تصنيف:Python]] | ||
[[تصنيف:Python Function]] | [[تصنيف:Python Function]] | ||
[[تصنيف:Python functools]] | [[تصنيف:Python functools]] |
المراجعة الحالية بتاريخ 18:58، 22 يونيو 2018
تعيد الدّالة functools.partial()
كائن partial
يتصرّف كالدّالة المُعطاة عند استدعائها بما مُرّر من مُعاملات (arguments) ومُعاملات كلمات مفتاحيّة (keyword arguments، أي المُعاملات التي تُمرّر مع ذكر أسمائها إضافةً إلى قيمها). إن استُدعيَ الكائن بمُعاملات إضافيّة، فستُضاف إلى مُعاملات الدّالة، و إن استُدعيَ الكائن بمُعاملات كلمات مفتاحيّة إضافيّة، فستُوسّع وتُعوّض معاملات الكلمات المفتاحيّة السّابقة.
تُستعمل لإنشاء دالّة جزئيّة من دالّة بتمرير قيم افتراضيّة ثابتة لها.
البنية العامة
functools.partial(func, *args, **keywords)
المعاملات
func
الدّالة المرغوب إنشاء دالّة جزئيّة منها.
args
المُعاملات التي ستُمرّر.
keywords
المُعاملات المفتاحيّة التي ستُمرّر.
القيمة المعادة
كائن partial
يتصرّف كالدّالة المُعطاة عند استدعائها بما مُرّر من مُعاملات ومُعاملات مفتاحيّة ويُعدّ دالّة جزئيّة من الدّالة الأصليّة ذات قيم ثابتة مُمرّرة مُسبقًا.
كائنات partial
تملك ثلاث خاصيّات قابلة للقراءة فقط (read-only):
partial.func
كائن قابل للاستدعاء أو دالّة. ستُوجّه استدعاءات partial
إلى الكائن partial.func
مع مُعاملات وكلمات مفتاحيّة جديدة.
partial.args
المُعاملات المكانيّة (positional arguments، أي المُعاملات التي تُمرّر قيَمُها دون ذكر اسمها) التي ستُضاف إلى أقصى يسار المُعاملات التي تُمرّر إلى الكائن partial
.
partial.keywords
مُعاملات الكلمات المفتاحيّة التي ستُمرّر عندما يُستدعى الكائن partial
.
كائنات partial
مثلُها مثل الدّوال، إذ تكون كائناتٍ قابلة للاستدعاء، وذات إحالة ضعيفة (weak referencable)، ويُمكن لها أن تمتلك خاصيّات مُعيّنة. لكن هناك بعض الفروقات المُهمّة، على سبيل المثال، الخاصيّتان __name__
(التي تحمل اسم الدّالة) و__doc__
(التي تُمثّل سلسلة التّوثيق النّصيّة) لا تُنشآن تلقائيًّا. إضافةً إلى أنّ كائنات partial
المُعرفّة في الأصناف تتصرّف مثل التّوابع السّاكنة ولا تتحوّل إلى توابع مُرتبطة (bound methods) عند البحث عن خاصيّات النّسخة.
أمثلة
تُستخدم الدّالة functools.partial()
لإنشاء دالّة جزئيّة تُجمّد جزءًا ممّا يُمرّر إلى الدّالة من مُعاملات، ما يُنشئُ كائنًا ذا توقيع أبسط. على سبيل المثال، يُمكن استعمال الدّالة functools.partial()
لإنشاء كائن قابل للاستدعاء يتصرّف مثل الدّالة int()
بمُعامل أساس (base) يُساوي افتراضيًّا القيمة 2:
>>> from functools import partial
>>> basetwo = partial(int, base=2)
>>> basetwo('10010')
18
ملاحظات
الدّالة مُكافئة تقريبًا لما يلي:
def partial(func, *args, **keywords):
def newfunc(*fargs, **fkeywords):
newkeywords = keywords.copy()
newkeywords.update(fkeywords)
return func(*args, *fargs, **newkeywords)
newfunc.func = func
newfunc.args = args
newfunc.keywords = keywords
return newfunc
انظر أيضًا
functools.partialmethod
: لتابعٍ جزئيّ عوضًا عن دالّة.- الأعداد الصّحيحة في بايثون.
- تعريف الدوال في بايثون.