نظِّم شيفرتك في دوال قابلة لإعادة الاستخدام، وأتقن القيم الافتراضية، وافهم نطاق المتغيرات.
افتح هذا الدرس في Kodokonأنت تعرف بالفعل كيف تكتب الحلقات والشروط؛ حان الآن وقت تنظيم شيفرتك. تعزل الدالة مهمة محددة خلف اسم واضح: تكتبها مرة واحدة، وتختبرها مرة واحدة، وتستدعيها في كل مكان. تُصرِّح الكلمة المفتاحية def بالدالة، وتتلقّى الوسائط قيم الدخل، وتُرسِل return النتيجة إلى المُستدعي. تذكّر أمرًا كثيرًا ما يُغفَل: الدالة التي لا تحتوي على return تُرجِع None.
def net_price(price, tax_rate):
total = price * (1 + tax_rate)
return round(total, 2)
result = net_price(100, 0.2)
print(result) # 120.0تجعل القيم الافتراضية الدالة مرنة دون مضاعفة صيغها: صرِّح بها بعد الوسائط الإلزامية. وعند الاستدعاء، توثّق المُعطيات المسمّاة (currency="USD") نيّتك. في الشيفرة الاحترافية، تستخدمها حالما تتجاوز الدالة وسيطين اثنين: يُقرأ الاستدعاء بوضوح دون فتح تعريف الدالة.
def format_price(amount, currency="EUR", digits=2):
return f"{amount:.{digits}f} {currency}"
print(format_price(19.9)) # 19.90 EUR
print(format_price(19.9, currency="USD")) # 19.90 USD
print(format_price(19.9, digits=0)) # 20 EURdef add_item(item, items=None):
if items is None:
items = []
items.append(item)
return items
print(add_item("pen")) # ['pen']
print(add_item("book")) # ['book']يحدّد النطاق المكان الذي يوجد فيه المتغير. المتغير المُنشأ داخل دالة هو متغير محلي: يختفي عند انتهاء الاستدعاء. يمكن للدالة أن تقرأ متغيرًا عامًا، لكن أيّ إسناد ينشئ متغيرًا محليًا جديدًا - ويبقى المتغير العام كما هو. عادة جيدة: بدلًا من تعديل المتغيرات العامة، مرِّر وسائط وأرجِع نتائج؛ فتصبح شيفرتك متوقَّعة وقابلة للاختبار.
rate = 0.2
def apply_tax(price):
return round(price * (1 + rate), 2)
def set_rate(new_rate):
rate = new_rate # local variable, no effect
print(apply_tax(100)) # 120.0
set_rate(0.1)
print(apply_tax(100)) # 120.0, the global is untouched