خصائص الarguments للfunction في بايثون
شرح لما يمكن عمله مع arguments للfunction في ببايثون
ال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.
التعليقات (0)
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !