تعلم البرمجة مع Python


الدرس: خطوة خطوة نحو الدوال (1/2)


الصفحة السابقة
في البرمجة ، غالبًا ما يتعين علينا استخدام مجموعات من التعليمات عدة مرات لغرض محدد للغاية. كن حذرا ، أنا لا أتحدث عن الحلقات هنا. ببساطة ، ستكون قادرًا على إدراك أن معظم اختباراتنا يمكن إعادة تجميعها في كتل أو وظائف أو وحدات أكبر. سأفصل بهدوء هذين المفهومين.

تسمح الوظائف ( الدوال) بجمع العديد من التعليمات معًا في كتلة سيتم استدعاؤها باسم. إلى جانب ذلك ، لقد رأيت بالفعل وظائف:  print وتشكل input جزءًا منها على سبيل المثال.

تسمح الوحدات النمطية بجمع العديد من الوظائف ( الدوال) معًا وفقًا لنفس المبدأ. يمكن وضع جميع وظائف الرياضيات ، على سبيل المثال ، في وحدة الرياضيات المخصصة.

الوظائف ( الدوال): الأمر متروك لك



لقد استخدمنا عددًا قليلاً من الوظائف ( الدوال) منذ بداية هذا البرنامج التعليمي. ونحن ننقل للسجل print، type و input دون احتساب عدد قليل من الآخرين. لكن يجب أن تدرك أن هناك عددًا لا يحصى من الوظائف ( الدوال) التي تم إنشاؤها بالفعل في Python . ومع ذلك ، ستجد أيضًا أنه في كثير من الأحيان يقوم المبرمج بإنشاء وظائفه الخاصة. هذه هي الخطوة الأولى التي ستتخذها في هذا الفصل نحو النمطية . يعني هذا المصطلح الغريب إلى حد ما أننا سنعتاد على التجميع معًا في أجزاء وظائف من التعليمات البرمجية الخاصة بنا والتي سيتعين علينا إعادة استخدامها. في الفصل التالي ، سوف نتعلم كيفية تجميع الوظائف ( الدوال) ذات الصلة معًا في ملف ، لتشكيل وحدة ، لكن دعونا لا نمضي قدمًا.

خلق الوظائف ( الدوال)


لتوضيح هذا المثال ، سنستخدم كود جدول الضرب ، الذي رأيناه في الفصل السابق والذي ، بالتأكيد ، يواصل متابعتك.

سنقوم بحبس الكود الخاص بنا بحساب جدول الضرب في 7 في دالة سنسميها table_par_7 .

نقوم بإنشاء دالة وفقًا للرسم البياني التالي:


def name_function(parameter1, parameter2, parameter3, parameterN):
    # Bloc d'instructions
 
كتل التعليمات تطاردنا أيضًا. إذا قمنا بشرح سطر تعريف الوظيفة ، نجد بالترتيب:
  • Def ، الكلمة الأساسية التي هي اختصار لـ "تعريف" والتي تشكل مقدمة لأي بناء وظيفة.
  • اسم الوظيفة ، والتي تمت تسميتها تمامًا مثل المتغير (سنرى لاحقًا أن هذا ليس بالصدفة). لا تستخدم اسم متغير تم إنشاءه بالفعل لتسمية وظيفة.
  • قائمة المعلمات التي سيتم توفيرها عند استدعاء الوظيفة. المعلمات مفصولة بفاصلات والقائمة محاطة بأقواس الفتح والإغلاق (مرة أخرى ، المسافات اختيارية ولكنها تحسن إمكانية القراءة).
  • النقطتان ، مرارًا وتكرارًا ، اللذان ينهيان السطر.
الأقواس مطلوبة ، على الرغم من أن وظيفتك لا تتوقع أي معلمات.

إذن ، الكود لوضع جدول الضرب في 7 في دالة سيكون:


def table_par_7():
    nb = 7
    i = 0 
    while i < 10: 
        print(i + 1, "*", nb, "=", (i + 1) * nb)
        i += 1
 
عند تشغيل هذا الكود على الشاشة ، لا يحدث شيء. ، حاول استدعاء الوظيفة:

>>> table_par_7()
1 * 7 = 7
2 * 7 = 14
3 * 7 = 21
4 * 7 = 28
5 * 7 = 35
6 * 7 = 42
7 * 7 = 49
8 * 7 = 56
9 * 7 = 63
10 * 7 = 70
>>>
 
حسنًا ، هذا أه بالضبط ما تمكنا من القيام به في الفصل السابق والفائدة ليست واضحة بعد. الميزة هي أنه يمكننا بسهولة استدعاء الوظيفة وإعادة عرض الجدول بأكمله دون الحاجة إلى إعادة كتابة كل شيء!

لكن ماذا لو أدخلنا معلمات لنكون قادرين على عرض جدول 5 أو 8…؟

نعم ، سيكون هذا بالفعل أكثر فائدة. لا أعتقد أن لديك مشكلة كبيرة في العثور على كود الوظيفة:


def table(nb):
    i = 0
    while i < 10:
        print(i + 1, "*", nb, "=", (i + 1) * nb)
        i += 1 
 
وهناك ، يمكنك تمرير أرقام مختلفة كوسيطات ، table(8) لعرض جدول الضرب في 8 على سبيل المثال. من الممكن أيضًا التفكير في تمرير عدد القيم التي سيتم عرضها في الجدول كمعامل.

def table(nb, max):
    i = 0
    while i < max: 
        print(i + 1, "*", nb, "=", (i + 1) * nb)
        i += 1
 
إذا كتبت الآن  table(11, 20)، فسيعرض لك المترجم جدول 11 ، من 1 * 11 إلى 20 * 11. سحر أليس كذلك؟

في حالة استخدام العديد من المعلمات دون تسميتها ، كما هو الحال هنا ، يجب احترام الترتيب الذي يتم استدعاء المعلمات به ، بالطبع. إذا بدأت في وضع عدد الاعداد التي سيطبعها في المعلمة الأولى بينما ، في التعريف ، كانت الثانية ، فقد يكون لديك بعض المفاجآت. من الممكن استدعاء المعلمات خارج الترتيب ، ولكن في هذه الحالة ، يجب تحديد اسمها: سنرى ذلك لاحقًا.

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


يمكنك أيضًا تحديد قيمة افتراضية لمعلمات الوظيفة. على سبيل المثال ، يمكنك الإشارة إلى أن الحد الأقصى لعدد الاعداد التي سيطبعها يجب أن يكون 10 بشكل افتراضي (أي ، إذا لم يحددها مستخدم وظيفتك). يتم ذلك ببساطة قدر الإمكان:


def table(nb, max=10):
    """ 
	دالة تعرض جدول الضرب بواسطة ملحوظة
     من 1 * ملحوظة إلى الحد الأقصى * ملحوظة	
    
     (max> = 0) 
    """
    i = 0
    while i < max:
        print(i + 1, "*", nb, "=", (i + 1) * nb)
        i += 1
 
فقط أضف =10 max . يمكنك الآن استدعاء الوظيفة بطريقتين: إما عن طريق تحديد رقم الجدول والحد الأقصى لعدد الاعداد التي سيطبعها ، أو بتحديد رقم الجدول فقط ( table(7)). في الحالة الأخيرة ، max سيكون الافتراضي هو 10.

انتهزت الفرصة لإضافة بضعة سطور من الشرح ستلاحظها بلا شك. لقد وضعنا سلسلة نصية ، دون أن نلتقطها في متغير ، أسفل تعريف الدالة مباشرة. هذه السلسلة هي ما نسميه السلسلة docstring التي يمكن ترجمتها كسلسلة مساعدة. إذا كتبت help(table) ، فسترى هذه الرسالة تظهر. إنها أيضًا عادة جيدة لتوثيق واجباتك. كما ترى ، نضع مسافة بادئة لهذه السلسلة ونضعها في علامات اقتباس ثلاثية. إذا كانت السلسلة في سطر واحد ، فيمكننا وضع علامات الاقتباس الثلاثة على نفس السطر ؛ بخلاف ذلك ، نفضل تخطي سطر قبل إغلاق هذه السلسلة لأسباب تتعلق بسهولة القراءة. كل نص

أخيرًا ، اعلم أنه يمكنك استدعاء المعلمات بالاسم. هذا مفيد لوظيفة بها عدد من المعلمات التي تحتوي جميعها على قيم افتراضية. يمكنك أيضًا استخدام هذه الطريقة على دالة بدون معلمة افتراضية ، لكنها أقل شيوعًا.

لنأخذ مثالاً على تعريف الوظيفة:


def fonc(a=1, b=2, c=3, d=4, e=5):
    print("a =", a, "b =", b, "c =", c, "d =", d, "e =", e)
 
بسيط ، أليس كذلك؟ حسنًا ، لديك العديد من الطرق لاستدعاء هذه الوظيفة. وفيما يلي بعض الأمثلة على ذلك:
تعليمات النتيجة
fonc() a = 1 b = 2 c = 3 d = 4 e = 5
fonc(4) a = 4 b = 2 c = 3 d = 4 e = 5
fonc(b=8, d=5) a = 1 b = 8 c = 3 d = 5 e = 5
fonc(b=35, c=48, a=4, e=9) a = 4 b = 35 c = 48 d = 4 e = 9
لا أعتقد أن المزيد من التوضيح ضروري. إذا كنت تريد تغيير قيمة المعلمة ، فاكتب اسمها متبوعًا بعلامة يساوي ثم قيمة (والتي يمكن أن تكون متغيرًا بالطبع). لا يهم ما هي المعلمات التي تحددها (كما ترى في هذا المثال حيث يكون لجميع المعلمات قيمة افتراضية ، يمكنك استدعاء الوظيفة بدون معلمات) ، لا يهم في ترتيب المعلمات.

توقيع الوظيفة


يُفهم مصطلح "توقيع الوظيفة" على أنه يعني العناصر التي تسمح للغة بتحديد الوظيفة المذكورة. في لغة ++ C ، على سبيل المثال ، يتكون توقيع الدالة من اسمها ونوع كل من معلماتها. هذا يعني أنه يمكنك العثور على العديد من الوظائف ( الدوال) بنفس الاسم ولكن بمعلمات مختلفة. عندما يتم استدعاء الوظيفة ، يبحث المترجم عن الوظيفة التي تنطبق على هذا التوقيع.

في بايثون ، كما رأيت ، لم يتم تحديد أنواع المعلمات. في هذه اللغة ، فإن توقيع الوظيفة هو ببساطة اسمها. هذا يعني أنه لا يمكنك تحديد وظيفتين بنفس الاسم (إذا قمت بذلك ، فسيتم استبدال التعريف القديم بالتعريف الجديد).


def exemple():
    print("Un exemple d'une fonction sans paramètre")

exemple()

def exemple(): # نعيد تعريف الدالة 
    print("Un autre exemple de fonction sans paramètre")

exemple()
 
في السطر 1 نحدد الوظيفة exemple . يطلق عليه أول مرة في السطر 4. نعيد تعريف الوظيفة في السطر 6 exemple . تم الكتابة فوق التعريف القديم ولم يعد من الممكن استدعاء الوظيفة القديمة.

فقط تذكر أنه ، كما هو الحال مع المتغيرات ، يشير اسم الوظيفة إلى وظيفة واحدة فقط ، ولا يمكنك زيادة تحميل الوظائف ( الدوال) في Python .

تعليمات return


ما فعلناه كان مثيرًا للاهتمام ، لكننا لم ننظر في إمكانيات الوظيفة بعد. وإلى جانب ذلك ، حتى في نهاية هذا الفصل ، لا يزال لدينا بعض الميزات الصغيرة لنرى. إذا كنت تتذكر بشكل صحيح ، فهناك وظائف print من  هذا القبيل لا تُرجع أي شيء (كن حذرًا ، "الاعادة" و "العرض" شيئان مختلفان) ووظائف مثل input أو type تعيد قيمة. يمكنك التقاط هذه القيمة عن طريق وضع متغير في المقدمة (مثال variable2 = type(variable1) ) . في الواقع ، تعمل الوظائف ( الدوال) بشكل عام على البيانات وتعيد النتيجة التي تم الحصول عليها ، باتباع عملية حسابية على سبيل المثال.

لنأخذ مثالًا بسيطًا: دالة مسؤولة عن تربيع قيمة تم تمريرها كوسيطة. أود أن أوضح لك عند تمرير أن Python قادرة تمامًا على ذلك دون الحاجة إلى كتابة وظيفة جديدة ، ولكنها على سبيل المثال.


def carre(valeur):
    return valeur * valeur
 
return تعني التعليمات أننا سنعيد القيمة ، حتى نتمكن من استرجاعها لاحقًا وتخزينها في متغير على سبيل المثال. return توقف هذه التعليمات عن تنفيذ الوظيفة ، ولن  يتم تنفيذ الكود الموجود بعد ذلك .

قد يكون بعضكم معتادًا على استخدام كلمة "return" ؛ إنها انجليزية وأنا أفضل تعبير "الاعادة" .


variable = carre(5)
 
variable سيحتوي المتغير ، بعد تنفيذ هذه التعليمات ، على تربيع 5، أي 25.

لاحظ أنه يمكننا إرجاع عدة قيم مفصولة بفواصل ، وأنه يمكننا التقاطها في متغيرات مفصولة أيضًا بفاصلات ، لكنني سأركز على هذه الميزة لاحقًا. فقط تذكر تعريف الوظيفة والمعلمات والافتراضيات والتعليمات  return وستكون جيدة.

لقد رأينا للتو كيفية إنشاء وظيفة باستخدام الكلمة الأساسية def . تقدم لنا Python طريقة أخرى لإنشاء وظائف ، وظائف قصيرة للغاية لأنها تقتصر على تعليمة واحدة.

لماذا طريقة أخرى لإنشاء الوظائف ( الدوال)؟ الأول يكفي ، أليس كذلك؟

لنفترض أن الأمر مختلف تمامًا ، كما سترى. تُستخدم وظائف Lambda عادةً في سياق معين ، حيث يكون تحديد دالة باستخدامها def أطول وأقل ملاءمة.

بناء الجملة


بادئ ذي بدء ، دعنا نرى صيغة تعريف الدالة lambda . سنستخدم علامة lambda من هذا القبيل: lambda arg1, arg2,… : return instruction .

أعتقد أن المثال سيبدو أوضح لك. نريد إنشاء وظيفة تأخذ معلمة وتعيد تلك المعلمة تربيعًا.


>>> lambda x: x * x
<function <lambda> at 0x00BA1B70>
>>>
 
أولاً ، لدينا الكلمة الأساسية lambda متبوعة بقائمة الوسائط ، مفصولة بفواصل. هنا توجد حجة واحدة فقط ، وهي x . ثم هناك نقطتان جديدتان ":" وتعليمات الوظيفة lambda . سيتم إرجاع نتيجة التعليمات التي تضعها هنا بواسطة الوظيفة. في مثالنا ، نعيد x * x .

كيف نسمينا lambda؟

لقد أنشأنا وظيفة ، lambda لكن لا توجد طريقة لاستدعائها هنا. يمكنك ببساطة تخزين الوظيفة lambda المحددة حديثًا في متغير ، بإسناد بسيط:


>>> f = lambda x: x * x
>>> f(5)
25
>>> f(-18)
324
>>>
 
مثال آخر: إذا كنت تريد إنشاء دالة lambda تأخذ معلمتين وتعيد مجموع هاتين المعلمتين ، فسيكون بناء الجملة كما يلي:

lambda x, y: x + y
 

استعمال


في مستوانا ، lambda تعتبر الوظائف ( الدوال) فضولية أكثر من كونها مفيدة حقًا. أقدمها لك الآن لأن السياق يناسبها وقد تصادف بعضها دون أن تفهم ما هي.

ومع ذلك ، سيتعين عليك الانتظار قليلاً حتى أريك تطبيقًا حقيقيًا لـ lambda . في هذه الأثناء ، لا تنس هذه الكلمة الأساسية والصيغة المصاحبة لها ... فنحن نمضي قدمًا!

اكتشف الوحدات



حتى الآن ، عملنا مع وظائف Python التي تم تحميلها عند تشغيل المترجم الفوري. يوجد بالفعل عدد غير قليل منهم ويمكننا المضي قدمًا وإنهاء هذا الجزء الأول دون استخدام وحدة Python ... أو تقريبًا. لكن يجب أن أريكم هذا الاحتمال المثير للاهتمام في مرحلة ما!

ما هي الوحدات؟


الوحدة النمطية هي تقريبًا جزء من التعليمات البرمجية التي تم تضمينها في ملف. وبالتالي فإننا نسجن الوظائف ( الدوال) والمتغيرات التي ترتبط جميعها ببعضها البعض. وبالتالي ، إذا كنت ترغب في العمل مع الوظائف ( الدوال) التي توفرها الوحدة (تلك التي تم قفلها في الوحدة النمطية) ، فما عليك سوى استيراد الوحدة ثم استخدام جميع الوظائف ( الدوال) والمتغيرات المتوفرة.

هناك عدد كبير من الوحدات المتاحة مع Python دون الحاجة إلى تثبيت مكتبات إضافية. في هذا الجزء ، سوف نأخذ مثال الوحدة math التي تحتوي ، كما يوحي اسمها ، على وظائف رياضية. لا داعي للقلق ، فلن نتطرق إلى الوحدة نفسها لتشفير آلة حاسبة علمية ، سنرى بشكل أساسي طرق الاستيراد المختلفة.

الطريقة import


عند فتح مترجم Python ،  لا يتم تضمين وظيفة الوحدة math . إنها بالفعل وحدة نمطية ، الأمر متروك لك لاستيرادها إذا قلت لنفسك "مهلاً ، قد يحتاج برنامجي إلى وظائف رياضية". سنرى أول صيغة استيراد.


>>> import math
>>>
 
من السهل تذكر بناء الجملة: الكلمة الأساسية import، والتي تعني "استيراد" باللغة الإنجليزية ، متبوعة باسم الوحدة ، هنا math .

بعد تنفيذ هذه التعليمات ، لم يحدث شيء ... على ما يبدو. في الواقع ، استوردت Python الوحدة math . جميع الوظائف ( الدوال) الرياضية الواردة في هذه الوحدة يمكن الوصول إليها الآن. لاستدعاء دالة للوحدة ، يجب كتابة اسم الوحدة متبوعًا بنقطة ". ثم اسم الوظيفة. وهي نفس صيغة استدعاء المتغيرات من الوحدة النمطية. دعونا نرى مثالا:


>>> math.sqrt(16)
4
>>>
 
كما ترى ، ترجع وظيفة sqrt الوحدة النمطية math الجذر التربيعي للرقم الذي تم تمريره في المعلمة.

ولكن كيف لي أن أعرف ما هي الوظائف ( الدوال) الموجودة وماذا تفعل math.sqrt في هذه الحالة بالذات؟

كان يجب أن أعرض عليك هذه الوظيفة في وقت مبكر جدًا لأنها ، نعم ، إنها وظيفة ستمنحنا الحل. إنها help ، التي تأخذ كحجة الوظيفة أو الوحدة التي تطلب المساعدة بشأنها. يتم تقديم المساعدة باللغة الإنجليزية ولكن اللغة الإنجليزية التقنية ، وهي أحد أشكال اللغة الإنجليزية التي ستحتاجها لتكون بارعًا في البرمجة ، إذا لم تكن قد فعلت ذلك بالفعل. 


>>> help("math")
Help on built-in module math:

NAME
    math

FILE
    (built-in)

DESCRIPTION
    This module is always available. It provides access to the
    mathematical functions defined by the C standard.

FUNCTIONS
    acos(...)
        acos(x)

        Return the arc cosine (measured in radians) of x.

    acosh(...)
        acosh(x)

        Return the hyperbolic arc cosine (measured in radians) of x.

    asin(...)
-- Suite  --
 
إذا كنت تتحدث الإنجليزية بحد أدنى ، فيمكنك الوصول إلى وصف شامل لوظائف الوحدة math . في الجزء العلوي من الصفحة ، ترى اسم الوحدة ، والملف الذي يستضيفها ، ثم وصف الوحدة. التالي هو قائمة الوظائف ( الدوال) ، ولكل منها وصف موجز.

انقر Qللعودة إلى نافذة المترجم الفوري  spaceلتقديم صفحة Enterواحدة ولتقديم سطر واحد. يمكنك أيضًا تمرير اسم دالة كمعامل دالة help .


>>> help("math.sqrt")
Help on built-in function sqrt in module math:

sqrt(...)
    sqrt(x)

    Return the square root of x.

>>>
 
لا تضع الأقواس المعتادة بعد اسم الوظيفة. هذا هو في الواقع مرجع الوظيفة التي ترسل إليها help . إذا أضفت قوسي الفتح والإغلاق بعد اسم الوظيفة ، فستحتاج إلى تحديد قيمة. في هذه الحالة ، math.sqrt سيتم تحليل القيمة التي يتم إرجاعها من خلال ذلك ، أي رقم (عدد صحيح أو نقطة عائمة).

سنعود إلى مفهوم المراجع الوظيفية لاحقًا. إذا فهمت سبب عدم وضع أقواس بعد اسم الوظيفة help ، فهذا أفضل. خلاف ذلك ، هذا جيد ، سوف نصل إلى ذلك في الوقت المناسب.

استخدم مساحة اسم محددة


في الواقع ، عندما تكتب import math ، فإنها تنشئ مساحة اسم تسمى "الرياضيات" ، تحتوي على متغيرات ووظائف الوحدة math . عندما تكتب math.sqrt(25)، فإنك تخبر Python أنك تريد أداء الوظيفة sqrt الموجودة في مساحة الاسم math . هذا يعني أنه يمكنك الحصول على وظيفة أخرى في مساحة الاسم الرئيسية sqrt التي حددتها بنفسك. لن يكون هناك تعارض ، من ناحية ، بين الوظيفة التي قمت بإنشائها والتي ستستدعيها بفضل التعليمات sqrt ، ومن ناحية أخرى ، وظيفة sqrt الوحدة  math التي ستستدعيها بفضل التعليمات math.sqrt .

ولكن ، بشكل ملموس ، ما هي مساحة الاسم؟

يتضمن ذلك تجميع وظائف ومتغيرات معينة معًا تحت بادئة محددة. لنأخذ مثالًا ملموسًا:


import math
a = 5
b = 33.2
 
في مساحة الاسم الرئيسية ، التي لا تتطلب بادئة والتي كنت تستخدمها منذ بداية هذا البرنامج التعليمي ، نجد:
  • المتغير a .
  • المتغير b .
  • Math تسمى الوحدة الموجودة في مساحة الاسم math أيضًا. في مساحة الاسم هذه ، نجد:
    • وظيفة sqrt .
    • المتغير pi .
    • والعديد من الوظائف ( الدوال) والمتغيرات الأخرى ...
هذا أيضًا من مصلحة الوحدات: يتم تخزين المتغيرات والوظائف ( الدوال) بشكل منفصل ، محمية جيدًا في مساحة الاسم ، دون التعرض لخطر التعارض مع المتغيرات والوظائف ( الدوال) الخاصة بك. لكن في بعض الحالات ، قد ترغب في تغيير اسم مساحة الاسم حيث سيتم تخزين الوحدة النمطية المستوردة.

import math as mathematiques
mathematiques.sqrt(25)
 
ماذا فعلنا هناك؟

لقد قمنا ببساطة باستيراد الوحدة math عن طريق إخبار Python باستضافتها في مساحة الاسم المسماة "mathematiques" بدلاً من math . يمنحك هذا مزيدًا من التحكم في مساحات أسماء الوحدات التي ستقوم باستيرادها. في معظم الحالات ، لن تستخدم هذه الميزة ، لكنك على الأقل تعلم بوجودها. عندما ننظر إلى الحزم ، ربما تتذكر هذا الاحتمال.

طريقة استيراد أخرى:from … import …


هناك طريقة استيراد أخرى لا تعمل بالطريقة نفسها. اعتمادًا على النتيجة المتوقعة ، أستخدم أيًا من هاتين الطريقتين بشكل غير مبال. دعنا نعود إلى مثالنا للوحدة math . لنفترض أننا نحتاج فقط ، في برنامجنا ، إلى الدالة التي تُرجع القيمة المطلقة للمتغير. في هذه الحالة ، سنقوم فقط باستيراد الوظيفة ، بدلاً من استيراد الوحدة بأكملها.


>>> from math import fabs
>>> fabs(-5)
5
>>> fabs(2)
2
>>>
 
بالنسبة لأولئك الذين لم يدرسوا القيم المطلقة بعد ، فإن هذا ببساطة هو عكس المتغير إذا كان سالبًا والمتغير نفسه إذا كان موجبًا. وهكذا تكون القيمة المطلقة موجبة دائمًا.

ستلاحظ أنه لم يعد يتم وضع البادئة math .أمام اسم الوظيفة. في الواقع ، قمنا باستيرادها بالطريقة from : يقوم هذا بتحميل الوظيفة من الوحدة المشار إليها ويضعها في المترجم الفوري في نفس مستوى الوظائف ( الدوال) الموجودة ، print على سبيل المثال. إذا كنت فهمت شرح مساحة الأسماء، يمكنك أن ترى أن print و fabs في نفس مساحة (الأساسي).

يمكنك استدعاء جميع المتغيرات والوظائف ( الدوال) الخاصة بالوحدة عن طريق كتابة "*" بدلاً من اسم الوظيفة المراد استيرادها.


>>> from math import *
>>> sqrt(4)
2
>>> fabs(5)
5
 
في السطر الأول من برنامجنا ، استعرض المترجم جميع الوظائف ( الدوال) والمتغيرات في الوحدة النمطية math واستوردها مباشرة إلى مساحة الاسم الرئيسية دون حصرها في مساحة الاسم math .

مراجعة



ما الطريقة التي يجب أن أستخدمها؟

سؤال ضخم! أود أن أقول إن الأمر متروك لك. الطريقة الثانية لها ميزة لا تقدر بثمن تتمثل في حفظ الإدخال المنتظم لاسم الوحدة كبادئة لكل وظيفة. يظهر عيب هذه الطريقة إذا تم استخدام عدة وحدات بهذه الطريقة: إذا كانت هناك صدفة وظيفتان بنفس الاسم في وحدتين مختلفتين ، فسيحتفظ المترجم بالوظيفة الأخيرة التي تسمى (أذكرك بذلك لا يمكن أن يكون هناك متغيرين أو دالات بنفس الاسم). الخلاصة ... الأمر متروك لك لتقرر وفقًا لاحتياجاتك!

باختصار


  • الوظيفة هي جزء من التعليمات البرمجية يحتوي على تعليمات يمكن إعادة استخدامها بسهولة.
  • يسمح تقسيم البرنامج إلى وظائف بتنظيم أفضل.
  • يمكن للوظائف تلقي المعلومات كمدخلات وإرجاع المعلومات باستخدام الكلمة الأساسية return .
  • يتم تعريف الوظائف ( الدوال) على النحو التالي:
    def name_function(parameter1, parameter2, parameterN):