الدوال
تعريف الدوال والمعاملات والمتغيرات المحلية وreturn وdocstring.
كل الدروس · دروس بايثون: تعلّم من الصفر
تعريف دالة
الدالة مقطع كود له اسم: تكتبه مرة وتستدعيه مرات. تُعرَّف بـ def وتوضع المعاملات بين قوسين وتُعاد النتيجة بـ return. وبدون return تعيد الدالة None.
def area(width, height):
return width * height
print(area(4, 5)) # 20
room = area(3.5, 2)
print(room) # 7.0إذا كتبت نصًا في أول سطر من الدالة فهو docstring ويظهر عبر help(area). الدالة الجيدة تؤدي مهمة واحدة واسمها يدل عليها.
def is_adult(age):
"""Return True if age is 18 or more."""
return age >= 18المعاملات
يمكن إعطاء المعامل قيمة افتراضية فلا يلزم كتابته عند الاستدعاء. وتُمرَّر الوسائط بالترتيب أو بالاسم.
def greet(name, greeting="Hello", mark="!"):
return f"{greeting}, {name}{mark}"
print(greet("Leyla"))
print(greet("Leyla", mark="?"))
print(greet(greeting="Salam", name="Kamran"))للوسائط غير المعروفة العدد هناك *args (موضعية) و**kwargs (مسمّاة). احذر: لا تضع قائمة فارغة [] قيمة افتراضية لأنها تُشارَك بين الاستدعاءات؛ ضع None وأنشئ قائمة جديدة داخل الدالة.
def total(*numbers):
return sum(numbers)
def add_tag(tag, bucket=None):
if bucket is None:
bucket = []
bucket.append(tag)
return bucket
print(total(1, 2, 3, 4)) # 10
print(add_tag("a"), add_tag("b")) # ['a'] ['b']نطاق المتغير
المتغير المنشأ داخل الدالة محلي ولا يُرى خارجها. يمكن قراءة المتغير العام داخلها لكن تغييره يحتاج الكلمة global. والأفضل عمليًا تجنب المتغيرات العامة وتمرير ما تحتاجه عبر المعاملات.
rate = 0.18
def with_tax(price):
tax = price * rate # reads the global
return price + tax
print(with_tax(100))
# print(tax) -> NameError: tax exists only inside the function