تابع: def، return و lambda
- تابع بنویسی که ورودی بگیرد و خروجی برگرداند
- چند مقدار را با هم برگردانی و بازشان کنی
- پارامتر پیشفرض و باز کردن آرگومان با
*را بفهمی - تابع را مثل یک مقدار به تابع دیگر بدهی و
lambdaبنویسی
def: ساختن تابع
تابع یک تکه کد اسمدار است که هر وقت خواستی صدایش میزنی. با def تعریف میشود و با return جواب برمیگرداند:
خودت امتحان کن
price و qty پارامتر هستند: جای خالیهایی که موقع صدا زدن پر میشوند. تعریف تابع چیزی اجرا نمیکند؛ بدنه فقط وقتی اجرا میشود که تابع را با () صدا بزنی.
تابع تمیز کردن
تابع clean(text) بنویس که متن را بگیرد، فاصلههای اول و آخر را حذف کند و حروف را کوچک کند و نتیجه را برگرداند.
دیدن راهحل (اول خودت تلاش کن)
def clean(text): return text.strip().lower()
برگرداندن چند مقدار
خودت امتحان کن
Shop.report در خط ۶۲ پروژه و خط ۶۳ پروژه همین است و خط ۱۱۰ پروژه جوابش را در count, income باز میکند. values() در خط ۷۷ پروژه تا خط ۸۲ پروژه هم چهار مقدار فرم را با هم برمیگرداند.
تابع گزارش
تابع report(sales) بنویس که یک تاپل (تعداد کل، درآمد کل) برگرداند.
دیدن راهحل (اول خودت تلاش کن)
def report(sales): return sum(s['qty'] for s in sales), sum(s['total'] for s in sales)
پارامتر پیشفرض
خودت امتحان کن
def refresh(query=''): در خط ۱۱۳ پروژه: اگر چیزی ندهی، query خالی است و همهی کالاها نمایش داده میشوند.
باز کردن آرگومان با *
اگر یک تاپل داری و میخواهی اعضایش را جدا جدا به تابع بدهی، قبلش * بگذار:
خودت امتحان کن
خط ۹۴ پروژه: shop.add(*values()) — چهار مقدار فرم مستقیم به چهار پارامتر add میرسند.
تابع هم یک مقدار است
در پایتون میشود خود تابع (بدون پرانتز) را در متغیر یا لیست گذاشت یا به تابع دیگر داد:
خودت امتحان کن
همهی دکمههای برنامه از run(action) در خط ۸۴ پروژه رد میشوند. لیست buttons در خط ۱۲۹ پروژه خود توابع add، edit و … را نگه میدارد.
دو بار اجرا
تابع twice(action) بنویس که تابع ورودی را دو بار صدا بزند.
دیدن راهحل (اول خودت تلاش کن)
def twice(action): action() action()
lambda: تابع یکخطی بینام
double = lambda x: x * 2
print(double(4)) # 8
دام معروف: lambda داخل حلقه
lambda مقدار متغیرها را وقتی صدا زده میشود میخواند، نه وقتی ساخته میشود. اجرا کن و ببین:
خودت امتحان کن
برای همین خط ۱۳۴ پروژه نوشته lambda a=action: run(a). بدون a=action همهی دکمهها گزارش فروش را باز میکردند!
جاهای خالی را پر کن
کد ساخت دکمهها را کامل کن:
for i, (label, action) in enumerate(buttons):
ttk.Button(frame, text=label, command= : run(a))
آزمون این درس
برای گذراندن این درس حداقل ۸۰٪ جواب درست لازم است. هر چند بار خواستی میتوانی دوباره امتحان بدهی.