فصل ۲: داده‌ها — متغیر، عدد، پول، متن فارسی و ورودی

متغیر، نام‌گذاری و PEP 8: متغیر برچسب است، نه جعبه

مدل ذهنی درست از همین ابتدا

در بسیاری از کتاب‌ها متغیر را «جعبه‌ای که مقدار در آن ریخته می‌شود» معرفی می‌کنند. برای پایتون این تصویر گمراه‌کننده است. در پایتون هر مقدار یک شیء (object) در حافظه است و متغیر فقط یک نام یا برچسب است که به آن شیء چسبانده می‌شود. عبارت price = 1200000 یعنی «یک شیء عدد صحیح بساز و برچسب price را به آن بزن».

price = 1_200_000        # زیرخط فقط برای خوانایی است
discount = price         # برچسب دوم روی همان شیء
price = price - 200_000  # شیء جدید ساخته شد؛ price به آن اشاره می‌کند

print(price, discount)   # 1000000 1200000
print(type(price))       # <class 'int'>
print(id(price) == id(discount))  # False

برای اعداد و رشته‌ها این تفاوت به چشم نمی‌آید چون این اشیا تغییرناپذیر (immutable) هستند. اما در فصل ۴ می‌بینید که وقتی دو برچسب به یک لیست اشاره کنند، تغییر از طریق یکی در دیگری هم دیده می‌شود؛ منشأ یکی از رایج‌ترین باگ‌های تازه‌کارها.

تایپ پویا

پایتون نوع را به شیء نسبت می‌دهد، نه به نام. پس یک نام می‌تواند اول به عدد و بعد به متن اشاره کند. این آزادی است، نه دعوت: اگر متغیری را برای دو نوع مختلف استفاده کنید، خواننده‌ی کد (یعنی خود شما در سه ماه بعد) گیج می‌شود.

قواعد و قراردادهای نام‌گذاری (PEP 8)

PEP 8 راهنمای رسمی سبک کد پایتون است. قواعد اجباری زبان: نام با حرف یا _ شروع شود، فقط حرف و رقم و _ داشته باشد و کلمه‌ی کلیدی نباشد (class، for، if و…). قراردادها:

چه چیزیسبکمثال
متغیر و تابعsnake_caseorder_count، calc_area()
ثابتUPPER_CASETAX_RATE = 0.10
کلاسPascalCaseCarpetOrder
«خصوصی» (قرارداد)با _ شروع_cache
متغیر دورریختنیفقط _for _ in range(3):

نام خوب، توضیح می‌دهد چه چیزی نگه داشته شده، نه چه نوعی: width_cm بهتر از w و بهتر از int_value است. واحد را در نام بیاورید (_cm، _rial)؛ باگ‌های تبدیل ریال و تومان را با همین کار ساده کم می‌کنید. تورفتگی استاندارد ۴ فاصله است و طول خط حداکثر ۷۹ تا ۱۰۰ کاراکتر.

انتساب چندگانه

width, length = 250, 350     # دو متغیر در یک خط
width, length = length, width   # جابه‌جایی بدون متغیر کمکی
a = b = 0                       # هر دو به همان شیء 0

نکته‌هایی که کمتر کسی می‌داند

  • نام متغیر فارسی در پایتون ۳ مجاز است (قیمت = 1000 کار می‌کند)، اما به‌خاطر جابه‌جایی جهت متن و کیبورد، در کد واقعی استفاده نکنید.
  • نام‌هایی مثل list، str، id، type و sum کلمه‌ی کلیدی نیستند و پایتون جلوی استفاده را نمی‌گیرد؛ اما با list = [1, 2] تابع list را تا پایان برنامه از دست می‌دهید.
  • پایتون اعداد صحیح ‎-5 تا 256 را از قبل می‌سازد و بازاستفاده می‌کند؛ به همین دلیل is روی اعداد کوچک «کار می‌کند» و روی اعداد بزرگ نه. برای مقایسه‌ی مقدار همیشه == بنویسید.
  • match، case و type «کلمه‌ی کلیدی نرم» هستند؛ می‌توانید متغیری به نام match داشته باشید و در عین حال از match/case استفاده کنید.
  • del x شیء را پاک نمی‌کند، فقط برچسب را برمی‌دارد؛ شیء وقتی از حافظه آزاد می‌شود که هیچ برچسبی به آن اشاره نکند.

برای ذخیره‌ی پیشرفت و شرکت در آزمون، وارد شوید — رایگان است.