خصائص الarguments للfunction في بايثون

شرح لما يمكن عمله مع arguments للfunction في ببايثون

زياد العتيبيمنذ 4 سنوات

الfunction في بايثون تعرف بالطريقة هذه

def my_function():
    # code block

بين الاقواس يكون تعريف الarguments للfunction.

 Default Argument Values

ويكون هكذا

def my_function(x,y=2):
    return x*y

وهو ان نعطي قيمة افتراضية للargument في حالة لم يتم تمرير قيمة عند استدعاء الدالة 

my_function(4) 

الناتج 8 لاننا مررنا فقط قيمة x وقيمة y هي 2. وإن اردنا تمرير القيمتين فنستطيع عمل ذلك

my_function(4,6)

ترتيب الarguments يكون ينفس ترتيبها عند تعريفنا للدالة فيكون الاول x والثاني y 

 Keyword Arguments

الfunction في بايثون يمكن استدعاءها مع اسم الargument مثل

my_function(x=5,y=7)

الهدف منه يكون اسهل في القراءة اذا كانت لديك عدد كبير من arguments وكان سهل الخلط بينهم.

يمكن ايضا عمل 

my_function(y=7,x=4)

كما تلاحظ تستطيع تغيير ترتيب الarguments.

طيب هذه الحالات اللي نقدر نطبق فيها الkeyword arguments 

my_function(1000)                                          # 1 positional argument
my_function(x=1000)                                  # 1 keyword argument
my_function(x=1000000, y=44)             # 2 keyword arguments
my_function(y=60, x=1000000)             # 2 keyword arguments (different order)
my_function(5, 7)        # 2 positional arguments
my_function(5, y=7)  # 1 positional, 1 keyword

الpositional argument هو اللي بدون اسم.

الحالات الخطأ استعمالها

my_function()                     # required argument missing
my_function(x=5.0, 'dead')  # non-keyword argument after a keyword argument
my_function(110, x=220)     # duplicate value for the same argument
my_function(actor='John Cleese')  # unknown keyword argument

السطر الاول: ناقص argument في استدعاء الدالة

السطر الثاني: بعد الkeyword argument لازم تكون كلها keyword argument. لكن قبلها عادي يكون فيه positional argument مثل المثال السابق في اخر سطر.

السطر الثالث: تكرار القيمة لنفس الargument

السطر الرابع: argument غير موجود في تعريف الfunction

 

اختبار بسيط للي تعلمناه :)

def f(a, L=[]):
    L.append(a)
    return L

print(f(1))
print(f(2))
print(f(3))

ايش راح يكون الoutput؟

بيكون 

[1]
[1, 2]
[1, 2, 3]

ليش؟ لان هو يسوي evaluted مرة وحدة للlist مرة وحدة ولما تستدعي الدالة مرة ثانية بيستخدم نفس الlist

طيب لو حبينا الfunction تستقبل اي عدد من الarguments عند استعداءها كيف يمكن ذلك؟

my_function(x, *arg):
    for i in arg:
        print(x*i)

my_function(3,5,6,7)

النجمة قبل الargument معناها ان الfunction ممكن تستقبل اي عدد من الarguments عند استدعاءها مثل المثال وتكون optional بمعنى ان لم تضعها عند استعداء الfunction لن يظهر خطأ لكن الx يجب وضعه عند استدعاء الدالة

والاسم بعد النجمة يكون بحسب اختيارك

اول argument في استدعاء الدالة هو الx والبقية هي *arg ونوع ال *arg هو tuple

مثال آخر

my_function(*arg, **kwargs):
    for i in arg:
        print(x*i)
    for kw in kwargs:
        print(kw, ":", kwargs[kw])

my_function(3,5,6,7, num1=4,num2=2)

مع النجمة الواحدة نستطيع كتابة positional arguments لكن لو اردنا كتابة الkeyword arguments نستطيع وضع نجمتين قبلها. في مثالنا هذا استقبلنا positional arguments وkeyword arguments وملاحظة مهمة  يحب ان يكونوا بهذا الترتيب اولا الpositional argument ثم keyword arguments.

وال**kwargs تكون ايضا optional ويكون نوعها dictionary. 

كلمات دليلية: python
1
إعجاب
2897
مشاهدات
0
مشاركة
1
متابع

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !