القائمة الرئيسية

الصفحات

دورة البرمجة بلغة بايثون - الدرس السادس عشر (معطيات الدوال في لغة بايثون)

دورة البرمجة بلغة بايثون - الدرس السادس عشر (معطيات الدوال في لغة بايثون)

دورة البرمجة بلغة بايثون - الدرس السادس عشر (معطيات الدوال في لغة بايثون)
في بايثون ، يمكنك تحديد دالة تأخذ عددًا متغيرًا من المعطيات. في هذه المقالة ، سوف تتعلم كيفية تحديد مثل هذه الدوال باستخدام المعطيات الافتراضية ، والكلمات الرئيسية ، والمعطيات الاعتباطية.


المعطيات Arguments
في موضوع الدوال المعرفة من قبل المستخدم ، تعلمنا كيفية تعريف دالة واستدعائها. خلاف ذلك ، سينتج عن استدعاء الدالة خطأ. شاهد هذ المثال:

def greet(name, msg):
    """This function greets to
    the person with the provided message"""
    print("Hello", name + ', ' + msg)

greet("Monica", "Good morning!")

الناتج
Hello Monica, Good morning!

هنا ، الدالة ()greet لها بارامتران.

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

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

>>> greet("Monica")    # only one argument
TypeError: greet() missing 1 required positional argument: 'msg'
>>> greet()    # no arguments
TypeError: greet() missing 2 required positional arguments: 'name' and 'msg'

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

يتم وصف ثلاثة أشكال مختلفة من هذا النوع أدناه.


  • معطيات بايثون الافتراضية
يمكن أن تحتوي معطيات الدالة على قيم افتراضية في بايثون.

يمكننا توفير قيمة افتراضية واحدة باستخدام عامل الإسناد (=). هنا مثال.

def greet(name, msg="Good morning!"):
    """
    This function greets to
    the person with the
    provided message.

    If the message is not provided,
    it defaults to "Good
    morning!"
    """

    print("Hello", name + ', ' + msg)


greet("Kate")
greet("Bruce", "How do you do?")

الناتج

Hello Kate, Good morning!
Hello Bruce, How do you do?

في هذه الدالة ، لا يحتوي الباراميتر name على قيمة افتراضية وهو مطلوب (إلزامي) أثناء الاستدعاء.

من ناحية أخرى ، فإن الباراميتر msg له القيمة الافتراضية "Good morning!". لذلك ، فهو اختياري أثناء الاستدعاء. إذا تم توفير قيمة ، فسيتم استبدال القيمة الافتراضية بالقيمة الجديدة.

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

هذا يعني ، أنه لا يمكن للمعطيات غير الافتراضية أن تتبع المعطيات الافتراضية. على سبيل المثال ، إذا حددنا هيدر الدالة أعلاه على النحو التالي:

def greet(msg = "Good morning!", name):

سنحصل على خطأ على النحو التالي:

SyntaxError: non-default argument follows default argument


  • معطيات الكلمات الرئيسية في بايثون
عندما نستدعي دالة مع بعض القيم ، يتم تخصيص هذه القيم للمعطيات وفقًا لموضعها.

على سبيل المثال ، في الدالة أعلاه ، الدالة ()greet ، عندما استدعيناها كـ 
  • greet("Bruce", "How do you do?")
، يتم تعيين القيمة "Bruce" للباراميتر name وكذلك الحال بالنسبة للقيمة "كيف حالك؟ " تم تمريرها إلى الباراميتر msg.

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

# 2 keyword arguments
greet(name = "Bruce",msg = "How do you do?")

# 2 keyword arguments (out of order)
greet(msg = "How do you do?",name = "Bruce") 

1 positional, 1 keyword argument
greet("Bruce", msg = "How do you do?")           

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

سيؤدي وجود باراميتر موضعي بعد معطيات الكلمات الرئيسية إلى حدوث أخطاء. على سبيل المثال ، استدعاء الدالة على النحو التالي:

greet(name="Bruce","How do you do?")

سينتج الخطأ التالي:

SyntaxError: non-keyword arg after keyword arg


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

في تعريف الدالة ، نستخدم علامة النجمة (*) قبل اسم البارميتر للإشارة إلى هذا النوع من المعطيات. هنا مثال.

def greet(*names):
    """This function greets all
    the person in the names tuple."""

    # names is a tuple with arguments
    for name in names:
        print("Hello", name)


greet("Monica", "Luke", "Steve", "John")

الناتج

Hello Monica
Hello Luke
Hello Steve
Hello John

هنا ، قمنا باستدعاء الدالة مع عدة معطيات. يتم تغليف هذه المعطيات في بنية tuple قبل تمريرها إلى الدالة. داخل الدالة ، نستخدم حلقة for لاستعادة جميع المعطيات مرة أخرى.



reaction:

تعليقات