این دوره فرض میکند که با پایتون پایه آشنا هستی: متغیر، حلقه، شرط، تابع و کمی کار با لیست و دیکشنری. این درس یک پل است، نه یک دورهٔ مقدماتی کامل. سه ایدهای را که در تمام دوره به آنها برمیگردیم، همینجا محکم میکنیم.
۱. مسئله را بشکن، بعد بنویس
تفکر از بالا به پایین (Top-down) یعنی اول مسئله را به قدمهای بزرگ توصیف کنی، بعد هر قدم را به یک تابع تبدیل کنی. یک تابع خوب فقط یک کار انجام میدهد و نامش همان کار را میگوید.
def read_scores(path):
"""نمرهها را از فایل میخواند و برمیگرداند."""
with open(path, encoding="utf-8") as f:
return [float(line.strip()) for line in f if line.strip()]
def average(scores):
return sum(scores) / len(scores)
def report(path):
scores = read_scores(path)
print(f"میانگین {len(scores)} نمره: {average(scores):.1f}")
۲. جهشپذیر در برابر جهشناپذیر
در پایتون بعضی شیءها بعد از ساختهشدن عوض میشوند (جهشپذیر مثل list و dict) و بعضی نه (جهشناپذیر مثل int، str و tuple). این تفاوت، منشأ نیمی از باگهای عجیب تازهکارهاست.
a = [1, 2, 3]
b = a # b همان شیء a است، نه یک کپی
b.append(4)
print(a) # [1, 2, 3, 4] — a هم عوض شد!
x = (1, 2, 3)
y = x # تاپل جهشناپذیر است؛ «تغییر» یعنی شیء تازه
متغیر در پایتون جعبهای که مقدار را نگه میدارد نیست؛ برچسبی است که به یک شیء در حافظه اشاره میکند. انتساب، ارجاع تازه میسازد نه کپی.
اشتباه رایج
با b = a یک کپی مستقل از لیست ساخته میشود.
تصحیح
با b = a هر دو نام به یک شیء اشاره میکنند. برای کپی واقعی از list(a)، a.copy() یا copy.deepcopy برای ساختارهای تودرتو استفاده کن.
۳. پروژهٔ کوچک، ساختار تمیز
حتی یک تمرین سهفایلی باید ساختار داشته باشد: هر فایل یک مسئولیت، و نقطهٔ ورود مشخص با نگهبان __main__.
# shop/cart.py
def total(items):
"""جمع قیمت اقلام سبد را برمیگرداند."""
return sum(item["price"] * item["qty"] for item in items)
# shop/main.py
from cart import total
def main():
items = [{"price": 12000, "qty": 2}, {"price": 8000, "qty": 1}]
print(total(items))
if __name__ == "__main__":
main()
از کجا بفهمی آمادهای؟
اگر بتوانی بدون اجرای کد بگویی خروجی تکهٔ زیر چیست، آمادهٔ ورود به دنیای شیءگرا هستی:
def add_tag(tags, tag="new"):
tags.append(tag)
return tags
a = []
print(add_tag(a))
print(add_tag(a))
سنجش فهم — پل ورود
۰ از ۳ پاسخ داده شده