Python Learningاز صفر تا نوشتن پروژه از حفظ
درس ۷ · ابزارهای پروژه

تابع: def، return و lambda

حدود ۵۵ دقیقه۴ تمرین۶ سؤال آزمون
بعد از این درس می‌توانی:
  • تابع بنویسی که ورودی بگیرد و خروجی برگرداند
  • چند مقدار را با هم برگردانی و بازشان کنی
  • پارامتر پیش‌فرض و باز کردن آرگومان با * را بفهمی
  • تابع را مثل یک مقدار به تابع دیگر بدهی و lambda بنویسی

def: ساختن تابع

تابع یک تکه کد اسم‌دار است که هر وقت خواستی صدایش می‌زنی. با def تعریف می‌شود و با return جواب برمی‌گرداند:

اجرا کن

خودت امتحان کن

Ctrl + Enter

price و qty پارامتر هستند: جای خالی‌هایی که موقع صدا زدن پر می‌شوند. تعریف تابع چیزی اجرا نمی‌کند؛ بدنه فقط وقتی اجرا می‌شود که تابع را با () صدا بزنی.

تمرین

تابع تمیز کردن

تابع clean(text) بنویس که متن را بگیرد، فاصله‌های اول و آخر را حذف کند و حروف را کوچک کند و نتیجه را برگرداند.

Ctrl + Enter
دیدن راه‌حل (اول خودت تلاش کن)
def clean(text):
    return text.strip().lower()

برگرداندن چند مقدار

اجرا کن

خودت امتحان کن

Ctrl + Enter
در پروژه‌ی فروشگاه

Shop.report در خط ۶۲ پروژه و خط ۶۳ پروژه همین است و خط ۱۱۰ پروژه جوابش را در count, income باز می‌کند. values() در خط ۷۷ پروژه تا خط ۸۲ پروژه هم چهار مقدار فرم را با هم برمی‌گرداند.

تمرین

تابع گزارش

تابع report(sales) بنویس که یک تاپل (تعداد کل، درآمد کل) برگرداند.

Ctrl + Enter
دیدن راه‌حل (اول خودت تلاش کن)
def report(sales):
    return sum(s['qty'] for s in sales), sum(s['total'] for s in sales)

پارامتر پیش‌فرض

اجرا کن

خودت امتحان کن

Ctrl + Enter
در پروژه‌ی فروشگاه

def refresh(query=''): در خط ۱۱۳ پروژه: اگر چیزی ندهی، query خالی است و همه‌ی کالاها نمایش داده می‌شوند.

باز کردن آرگومان با *

اگر یک تاپل داری و می‌خواهی اعضایش را جدا جدا به تابع بدهی، قبلش * بگذار:

اجرا کن

خودت امتحان کن

Ctrl + Enter
در پروژه‌ی فروشگاه

خط ۹۴ پروژه: shop.add(*values()) — چهار مقدار فرم مستقیم به چهار پارامتر add می‌رسند.

تابع هم یک مقدار است

در پایتون می‌شود خود تابع (بدون پرانتز) را در متغیر یا لیست گذاشت یا به تابع دیگر داد:

اجرا کن

خودت امتحان کن

Ctrl + Enter
در پروژه‌ی فروشگاه

همه‌ی دکمه‌های برنامه از run(action) در خط ۸۴ پروژه رد می‌شوند. لیست buttons در خط ۱۲۹ پروژه خود توابع add، edit و … را نگه می‌دارد.

تمرین

دو بار اجرا

تابع twice(action) بنویس که تابع ورودی را دو بار صدا بزند.

Ctrl + Enter
دیدن راه‌حل (اول خودت تلاش کن)
def twice(action):
    action()
    action()

lambda: تابع یک‌خطی بی‌نام

Python
double = lambda x: x * 2
print(double(4))   # 8

دام معروف: lambda داخل حلقه

lambda مقدار متغیرها را وقتی صدا زده می‌شود می‌خواند، نه وقتی ساخته می‌شود. اجرا کن و ببین:

اجرا کن

خودت امتحان کن

Ctrl + Enter
در پروژه‌ی فروشگاه

برای همین خط ۱۳۴ پروژه نوشته lambda a=action: run(a). بدون a=action همه‌ی دکمه‌ها گزارش فروش را باز می‌کردند!

جای خالی

جاهای خالی را پر کن

کد ساخت دکمه‌ها را کامل کن:

for i, (label, action) in enumerate(buttons):
    ttk.Button(frame, text=label, command= : run(a))

آزمون این درس

برای گذراندن این درس حداقل ۸۰٪ جواب درست لازم است. هر چند بار خواستی می‌توانی دوباره امتحان بدهی.

۱. def f(x): return x + 1 و بعد f(4)؟
۲. تعریف تابع با def بدنه را اجرا می‌کند؟
۳. f(*('a', 'b')) برابر کدام است؟
۴. run(hello) و run(hello()) چه فرقی دارند؟
۵. چرا در حلقه lambda a=action: run(a) نوشته می‌شود؟
۶. def g(q=''): و بعد g()؛ مقدار q؟