إعطاء كتلة شيفرة اسمًا
الدالة كتلة شيفرة لها اسم يمكنك تشغيلها مرارًا. تعرّفها مرة واحدة باستخدام def واسم وأقواس ونقطتين، والكتلة المزاحة تحتها هي الجسم. ترسل return قيمة إلى من استدعى الدالة. واستدعاؤها يعني كتابة اسمها مع الأقواس والقيم التي ستعمل عليها.
def gross_value(price, quantity):
return price * quantity
print(gross_value(184.25, 200)) # 36850.0المعاملات والوسائط
الأسماء داخل أقواس def هي المعاملات: أماكن محجوزة للمدخلات. أما القيم التي تمررها عند الاستدعاء فهي الوسائط وهي تملأ المعاملات بالترتيب. إذا بدّلتها تغيّرت النتيجة. وتمرير عدد خاطئ من الوسائط خطأ. ولكل استدعاء نسخته الجديدة من المعاملات.
# Arguments fill the parameters in order
def spread(bid, ask):
return ask - bid
print(spread(184.25, 184.5)) # 0.25
print(spread(184.5, 184.25)) # -0.25return ليست print
تعرض print شيئًا على الشاشة لإنسان. أما return فتسلّم قيمة إلى الشيفرة المستدعية لتواصل العمل بها. الدالة التي ليس فيها return تُرجع None أي «لا شيء». وعلى الدوال التي تحسب أن تُرجع، والشيفرة المستدعية هي التي تقرر الطباعة.
# A function with no return gives back None
def show(price):
print("price", price)
result = show(184.25) # price 184.25
print(result) # Noneدوال صغيرة يبني بعضها على بعض
يمكن للدالة استدعاء دوال أخرى، فتبني سلوكًا كبيرًا من قطع صغيرة قابلة للاختبار. أعطِ كل دالة مهمة واحدة واسمًا يعبّر عنها. وتشرحها docstring، وهي نص مباشرة تحت def، للقارئ التالي. عرّف الدالة قبل أن يُنفَّذ السطر الذي يستدعيها.
# Small functions build bigger ones
def gross_value(price, quantity):
"""Value of a position before costs."""
return price * quantity
def commission(gross):
"""0.1% of the value, but never less than 1.0."""
return max(1.0, gross * 0.001)
def net_cost(price, quantity):
"""What the position really costs: value plus commission."""
gross = gross_value(price, quantity)
return gross + commission(gross)
print(net_cost(184.25, 200)) # 36886.85إرجاع عدة قيم
تُسلّم return a, b القيمتين معًا على شكل صف (tuple): زوج مرتب يُكتب بفواصل (سيكون للصفوف موضوعها الخاص قريبًا). ويستطيع المستدعي تسمية القطعتين فورًا. تقسيم أمر من 1,000 سهم إلى 3 شرائح بـ// و% يُرجع حجم كل شريحة والباقي.
# return several values as a tuple
def split_fill(quantity, slices):
return quantity // slices, quantity % slices
size, leftover = split_fill(1000, 3)
print(size, leftover) # 333 1return تصل إليه، ولا تُنفَّذ الأسطر التي تليه في ذلك المسار. وتوجد المعاملات وأي متغير تنشئه داخل الدالة طوال الاستدعاء فقط: لا تراها الشيفرة الخارجية (المزيد في موضوع النطاق).- مهمة واحدة لكل دالة واسم يعبّر عمّا تُرجعه.
- احسب و
return، ودع المستدعي يطبع. - أضف docstring تذكر ما يدخل وما يخرج.
التالي: وسائط الدوال وقيمها الافتراضية لاستدعاء الدوال بالأسماء وقيم اختيارية وأي عدد من الوسائط.
المختبر: ما الذي يُقيَّم
- عرّف دالة تحسب قيمة مركز باستخدام
gross_value25 نقطة - احسب عمولة بحد أدنى باستخدام
commission25 نقطة - ابنِ التكلفة الفعلية من دالتين باستخدام
net_cost25 نقطة - أرجع قيمتين معًا باستخدام
split_fill25 نقطة