مبانی اولیه‌ی پایتون - int و float

Professional Python: int and float

07 اسفند 1399
درسنامه درس 2 از سری پایتون حرفه‌ای
Python حرفه ای: مبانی اولیه - int و float (قسمت 02)

این جلسه اولین جلسه از مبانی اولیه برنامه نویسی با زبان پایتون است. همانطور که در جلسه قبل توضیح دادم برای شروع کار باید ابتدا مبانی اولیه پایتون را یاد بگیریم بنابراین قصد داریم در طی چند جلسه آینده روی این مباحث کار کنیم.

برای اینکه به یک برنامه نویس واقعی تبدیل شوید،‌ فارغ از اینکه با چه زبانی شروع کرده اید، باید چهار مبحث اصلی را به طور کامل یاد بگیرید:

  • اصطلاحات: زبان های برنامه نویسی اصطلاحات خاص خودشان را دارند؛ به طور مثال: متغیر، تابع، نمونه سازی و غیره. شما برای یادگیری یک زبان و صحبت با توسعه دهندگان دیگر حتما باید با این اصطلاحات تخصصی آشنا باشید.
  • نوع داده: هر زبان برنامه نویسی نوع داده یا data type های خودش را دارد و شما به عنوان یک توسعه دهنده حتما باید با آن ها آشنا باشید. data type ها انواع داده هایی هستند که در یک زبان برنامه نویسی به شما اجازه ذخیره اطلاعات می دهند. ما انسان ها از حروف، اعداد، نماد ها و غیره برای ذخیره داده و معانی استفاده می کنیم اما کامپیوترها از انواع داده های خودشان استفاده می کنند.
  • عملیات: عملیات ها یا action ها به فرآیند استفاده از مموری و انجام یک عمل روی یک داده گفته می شود. شما به عنوان توسعه دهنده باید بدانید که در زبان برنامه نویسی خود چه action هایی وجود دارد یا به زبان ساده تر چه کار هایی را می توانیم انجام بدهیم. به طور مثال print که در جلسه قبل استفاده کردیم یک action است.
  • قراردادها: قراردادها که در زبان انگلیسی با نام best practices (به معنی بهترین روش ها) شناخته می شوند تعدادی قانون نانوشته هستند که باید از آن ها پیروی کنیم. در واقع ما می توانیم کدهای خوب پایتون بنویسیم و کدهای بد پایتون بنویسیم و هر دو نیز یک کار را به درستی انجام می دهند اما کد بد دارای معایبی خواهد بود که در طول دوره مشاهده خواهید کرد.

data type یا انواع داده در پایتون

در زبان پایتون انواع داده های مختلفی وجود دارد شما می توانید نوع داده های موجود در این زبان را در لیست زیر مشاهده کنید:

  • int
  • float
  • bool
  • str
  • list
  • tuple
  • set
  • dict

به این نوع داده ها fundamental data types (انواع داده بنیادین) می گویند. چرا بنیادین؟ به دلیل اینکه در هسته اصلی پایتون قرار دارند و به صورت پیش فرض در اختیار شما هستند. همانطور که قبلا توضیح دادم هر کدام از این انواع داده،‌ روشی خاص برای ذخیره سازی داده های شما دارند و بسته به نیاز شما در یک برنامه، از یکی از آن ها استفاده خواهید کرد. ما باید ابتدا با انواع داده ها آشنا شویم و سپس روش های مختلف برای ویرایش آن ها را نیز یاد بگیریم تا بتوانیم داده های مختلفی را در آن ها ذخیره کنیم. پس از fundamental data types نوبت به کلاس ها می رسد که به ما اجازه می دهند انواع داده خودمان را بنویسیم به همین دلیل به این قسمت custom types (انواع داده شخصی سازی شده) می گوییم و در طول دوره با آن ها آشنا خواهیم شد. در دسته سوم نیز specialized data types (انواع داده تخصصی) قرار دارند که به صورت پیش فرض در زبان پایتون وجود ندارند، بلکه پکیج ها یا ماژول های آماده ای هستند که مانند کتابخانه ها مورد استفاده قرار می گیرند. در نهایت و در دسته چهارم نوع داده خاصی به نام none (به معنی «هیچ») را داریم که مانند صفر در ریاضی است و به عدم وجود یک مقدار اشاره می کند. ما در طول دوره با این انواع داده آشنا خواهیم شد بنابراین جای نگرانی نیست.

نکته: در پایتون نوع داده دیگری به نام complex وجود دارد که بسیار پیشرفته است و تقریبا فقط در محاسبات سنگین ریاضی از آن استفاده می شود. ما به دلیل کاربردی نبودن این نوع داده آن را در این دوره بررسی نمی کنیم.

آشنایی با اعداد int و float

برای کار با اعداد در زبان پایتون دو نوع داده int و float را داریم که به ترتیب به اعداد صحیح (integer) و اعداد اعشاری (floating point number) اشاره می کنند. ما می توانیم در زبان پایتون عملیات های ریاضی را با اعداد انجام بدهیم که در تمام زبان های برنامه نویسی موجود است:

print(4 + 2)

print(4 * 2)

print(4 - 2)

print(4 / 2)

اگر کدهای بالا را در repl.it یا وب سایت مورد نظرتان وارد کنید نتایج این عملیات های ریاضی را مشاهده خواهید کرد. هر دو این اعداد (اعداد دو و چهار) integer یا عدد صحیح هستند چرا که هیچ قسمت اعشاری ندارند. ما می توانیم با دستور type در زبان پایتون متوجه بشویم که نوع داده یک مقدار خاص چیست. مثلا:

print(type(4 + 2))

در این کد ابتدا اعداد ۴ و ۲ باهم جمع می شوند و نتیجه خود را به type می دهند. تایپ نتیجه را مشاهده می کند (عدد ۶) و می گوید نوع داده ۶ یک integer است و آن را به print پاس می دهد و در نهایت print نیز این نوع داده را چاپ می کند. حتما متوجه شده اید که type نیز یک action است چرا که عملیات خاصی را انجام می دهد (نوع داده را تعیین می کند). با اجرای کد بالا نتیجه زیر را دریافت خواهیم کرد:

<class 'int'>

ما هنوز با کلیدواژه class آشنا نشده ایم، بنابراین آن را نادیده بگیرید اما int (مخفف integer) برایمان واضح است و می توانیم بفهمیم که نتیجه همان عدد صحیح بوده است. حالا سوال دیگری از شما دارم. اگر دستور زیر را بنویسیم چه نتیجه ای می گیریم؟

print(type(2 / 4))

طبیعتا نتیجه به شکل زیر خواهد بود:

<class 'float'>

چرا؟ به دلیل اینکه ۲ تقسیم بر ۴ برابر با 0.5 است و یک رقم اعشار دارد و ما می دانیم که اعداد اعشاری در پایتون از نوع داده float هستند. شاید بپرسید چرا باید بین اعداد صحیح و اعشاری تفاوت قائل شویم؟ چرا نوع داده های مختلفی را برایشان داریم؟ آیا نمی توانیم از آن ها یکجا و به عنوان «عدد» استفاده کنیم؟ پاسخ خیر است! ما این تفاوت ها را قائل شده ایم چرا که ذخیره اعداد اعشاری،‌ حافظه بسیار بیشتری نسبت به اعداد صحیح اشغال می کند. حافظه یا RAM یا همان مموری دستگاه شما محدود است و نباید به هیچ بهانه ای آن را هدر بدهیم بنابراین استفاده از این دو نوع داده مختلف باعث هدر نرفتن مموری خواهد شد. یادتان باشد که کامپیوترها کدهای ما را نمی فهمند و این کدها در هنگام اجرا به باینری تبدیل می شوند بنابراین باید در حافظه سیستم ذخیره شوند تا عملیات تمام شود. مشکل اینجاست که تبدیل اعداد اعشاری به باینری کار سختی است چرا که در وسط خود یک نقطه (نقطه اعشار) را دارند. به همین دلیل کامپیوترها عددی مثل 10.25 را به صورت دو عدد جداگانه 10 و 25 ذخیره می کنند.

حالا سوال دیگری از شما دارم. به نظر شما اگر دستور زیر را اجرا کنیم چه نتیجه ای می گیریم؟

print(type(9.9 + 0.1))

حتما می گویید ۹.۹ به علاوه ۰.۱ می شود ۱۰ بنابراین integer را دریافت خواهیم کرد اما در اصل مقدار زیر را می گیریم:

<class 'float'>

چرا؟ بیایید قسمت type را حذف کنیم:

print(9.9 + 0.1)

با اجرای کد بالا عدد 10.0 را دریافت خواهیم کرد! در واقع دو عدد float یا یک float و یک integer همیشه نتیجه float (اعشاری) دارند. البته جمع و تفریق و ضرب و تقسیم تنها عملیات های ریاضی ممکن در پایتون نیستند. به طور مثال برای استفاده از توان می توان گفت:

print(5 ** 2)

علامت دو ستاره به معنی «توان» است بنابراین کد بالا می گوید ۵ به توان ۲ (نه ۵ ضرب در ۲) که نتیجه اش ۲۵ خواهد شد. همچنین اگر در مواقعی بخواهیم دو عدد را تقسیم کنیم اما نتیجه همیشه به یک عدد صحیح گِرد شود می توانیم از دستور // استفاده کنیم:

print(5 // 4)

ما می دانیم که ۵ تقسیم بر ۴ برابر 1.25 است اما نتیجه دستور بالا ۱ خواهد بود. چرا؟ همانطور که گفتم استفاده از اپراتور // باعث گِرد شدن نتیجه می شود. اگر از ریاضی دبیرستان به یاد داشته باشید گِرد کردن اعداد دو حالت داشت:

  • در صورتی اعشار عدد کمتر از 0.5 باشد (مثل 1.2 یا 9.3) عدد به پایین گِرد می شود.
  • در صورتی اعشار عدد مساوی با یا بیشتر از 0.5 باشد (مثل 1.7 یا 6.6) عدد به بالا گِرد می شود.

همچنین اپراتوری به نام modulo داریم که همان علامت درصد (%) است اما درصد گیری نمی کند بلکه کارش محاسبه باقی مانده یک تقسیم است. به طور مثال:

print(6 % 4)

یعنی اگر ۶ را بر ۴ تقسیم کنیم، باقی مانده این تقسیم چقدر می شود؟ نتیجه برگردانده شده عدد ۲ می باشد.

توابع ریاضی برای کار با int و float

توابع یا همان function ها یک action هستند چرا که یک کار خاص را برای ما انجام می دهند. به طور مثال print یک تابع است که کارش چاپ کردن یک مقدار می باشد. ما در آینده یک فصل کامل را به توابع اختصاص می دهیم اما فعلا در همین حد بدانید که توابع مسئله پیچیده ای نیستند.

دسته ای از توابع هستندد که فقط برای کار با اعداد طراحی شده اند و در هنگام انجام عملیات های مختلف کار ما را بسیار ساده تر می کنند. به طور مثال برای گِرد کردن اعداد تابعی به نام round داریم:

print(round(3.9))

ما در دستور بالا عدد ۳.۹ را به تابع round پاس داده ایم. کار این تابع گِرد کردن اعداد است بنابراین آن را به ۴ تبدیل می کند و سپس به print پاس می دهد. به همین دلیل پس از اجرای این کد، عدد ۴ را دریافت خواهید کرد.

همچنین تابع دیگری به نام abs (مخفف absolute) داریم که برای محاسبه قدر مطلق اعداد استفاده می شود:

print(abs(-20))

ما می دانیم که «قدر مطلق» در ریاضی به معنای مقدار حقیقی یک عدد بدون در نظر گرفتن علامت آن است. به عبارتی هیچ عدد منفی از قدر مطلق عبور نمی کند بلکه همه چیز به عدد مثبت تبدیل می شود بنابراین دستور بالا مقدار ۲۰ را برایمان چاپ می کند. در واقع تعداد این توابع بسیار زیاد است و نمی توان در چند جلسه ساده همه آن ها را بررسی کرد. همچنین نیازی به بررسی تک تک آن ها نیز نمی باشد چرا که زمان گیر است و سودی ندارد. به هر حال در صورتی که دوست دارید لیستی از توابع ریاضی در پایتون را مشاهده کنید به وب سایت های مختلفی از جمله سایت رسمی پایتون یا جست و جو در گوگل و پیدا کردن سایت های جانبی مراجعه کنید. بسیاری از این توابع آنقدر کم استفاده هستند که احتمالا هیچ وقت از آن ها استفاده نکنید مگر اینکه برای پروژه خاصی مورد نیاز باشند. به همین دلیل است که می گویم با حفظ کردن آن ها وقت خود را هدر خواهید داد.

مهارت یادگیری ۱#

در طول این دوره سرتیترهایی به نام «مهارت یادگیری» خواهیم داشت که شماره گذاری نیز شده اند. من در این بخش ها نکاتی را برایتان توضیح می دهم که برای افراد تازه کار حیاتی و ضروری هستند و باید حتما آن ها را مطالعه کنید. این نکات به شما کمک خواهند کرد که در مسیر یادگیری از اشتباهات رایج دوری کرده و از روش های عملی و توصیه شده استفاده کنید. این بخش، اولین بخش از مهات یادگیری است و موضوع آن حفظ کردن لیست توابع و دستورات مختلف در یک زبان برنامه نویسی است.

در واقع یکی از جملاتی که بین توسعه دهندگان رد و بدل می شود جمله don't read the dictionary است که به فارسی یعنی «فرهنگ لغت را مطالعه نکن!». منظور ما از این جمله چیست؟ زمانی که می خواهید زبان دومی مانند انگلیسی یا فرانسوی یا روسی را یاد بگیرید، هیچ وقت یک فرهنگ لغت (دیکشنری) را از صفحه ۱ تا آخرین صفحه مطالعه نمی کنید. چرا؟ به دو دلیل اصلی:

  • مطالعه کامل یک فرهنگ لغت که معمولا هزار و خورده ای صفحه است، کاری بسیار زمان بر می باشد.
  • دانستن کلمات در یک زبان لزوما باعث یادگیری آن زبان نمی شود بلکه فقط هزاران کلمه را در ذهن خود خواهید داشت که نمی دانید از کدام کلمه در چه حالت و چه جایگاهی استفاده کنید.
  • اگر فردی شروع به صحبت کردن با افراد مختلف از آن زبان کند و زمانی که لغتی را نمی فهمد آن را در دیکشنری چک کند، آن زبان را بهتر یاد می گیرد و از شما که هزاران صفحه را مطالعه کرده اید،‌ هزاربار بهتر ارتباط برقرار می کند.

افرادی که زبان برنامه نویسی خاصی را یاد می گیرند دوست دارند همه چیز را از سیر تا پیاز در همان روز اول بدانند و شروع به مطالعه و حفظ کردن انواع و اقسام توابع می کنند. این کار علاوه بر هدر دادن وقت شما باعث می شود که نتوانید از زبان برنامه نویسی به خوبی استفاده کنید.

تقریبا تمام توسعه دهندگان دنیا هر جا به مشکلی برخورد می کنند، آن مشکل را در گوگل جست و جو می کنند و این مسئله ربطی به سطح مهارتشان ندارد. در تمام نظرسنجی ها و پژوهش های انجام شده، جست و جو در گوگل یکی از مهم ترین مهارت های هر برنامه نویسی در هر سطحی است (چه تازه کار و چه کار کشته ای در شرکت هایی مانند گوگل و فیسبوک).

اولویت اپراتور (operator precedence)

یکی از مباحث بسیار مهم در برنامه نویسی اولویت اپراتور ها است. اگر یادتان باشد در مدرسه یاد گرفتیم که در عملیات های ریاضی نوعی اولویت وجود دارد. به طور مثال به دستور ریاضی زیر توجه کنید:

20 + 3 * 4

به نظر شما مقدار نهایی و پاسخ سوال بالا چیست؟ ما می دانیم که در ریاضی اولویت همیشه ابتدا با براکت (علامت []) است و سپس با پرانتز، سپس توان، سپس با ضرب و تقسیم و سپس با جمع و تفریق! همچنین اولویت همیشه از چپ به راست محاسبه می شود؛ یعنی اگر ۲ + ۵ - ۳ را داشتیم باید ابتدا عملیات ۵ - ۳ را انجام بدهید (چپ تر است) و سپس جواب آن را با ۲ جمع کنید. با در نظر گرفتن این قوانین برای سوال بالا می گوییم ۴ * ۳ ابتدا انجام می شود و نتیجه اش (۱۲) با ۲۰ جمع خواهد شد که ۳۲ را به ما می دهد.

پایتون نیز مانند اکثر زبان های برنامه نویسی از این قوانین ریاضی تبعیت می کند:

print(20 + 3 * 4)

این تابع نتیجه ۳۲ را برایمان چاپ خواهد کرد. سعی کنید مقدار نهایی عملیات زیر را حدس بزنید:

print((20 - 10) + 2 ** 2)

مقدار این عملیات 14 می شود. چرا؟ به دلیل اینکه اولویت با پرانتز است بنابراین ابتدا ۲۰ از ۱۰ کم می شود (نتیجه ۱۰) و سپس اولویت با توان است بنابراین ۲ به توان ۲ می رسد (نتیجه ۴) و سپس دو نتیجه با هم جمع می شوند (۴ + ۱۰) و عدد ۱۴ به دست می آید. من چند تمرین را برایتان آماده کرده ام، سعی کنید ابتدا خودتان آن ها را حل کنید:

print((5 + 4) * 10 / 2)




print(((5 + 4) * 10) / 2)




print((5 + 4) * (10 / 2))




print(5 + (4 * 10) / 2)




print(5 + 4 * 10 // 2)

امیدوارم در حل آن ها موفق بوده باشید. پاسخ معادلات بالا به ترتیب بدین شرح است:

  • ابتدا 5 و 4 با هم جمع می شوند (نتیجه ۹) چرا که داخل پرانتز هستند. در مرحله بعدی ضرب و تقسیم داریم و می دانیم که هر دو اولویت یکسانی دارند بنابراین عملیاتی که در سمت چپ باشد اولویت بیشتری دارد. با این حساب ۹ در ۱۰ ضرب شده (نتیجه ۹۰) و نهایتا کل آن بر ۲ تقسیم می شود که حاصل 45.0 را به ما می دهد.
  • ابتدا 5 و 4 با هم جمع می شوند (نتیجه ۹)، سپس نتیجه در ۱۰ ضرب می شود (نتیجه 90) و نتیجه آن تقسیم بر ۲ می شود که حاصل 45.0 را به ما می دهد. به محل پرانتز ها دقت کنید.
  • ابتدا 5 و 4 با هم جمع می شوند (نتیجه ۹)، سپس ۱۰ بر ۲ تقسیم می شود (نتیجه ۵) و نتیجه ضرب آن ها 45.0 خواهد شد.
  • ابتدا ۴ در ۱۰ ضرب می شود (نتیجه ۴۰) و سپس تقسیم بر ۲ می شود (نتیجه ۲۰) و سپس به علاوه ۵ می شود که حاصل 25.0 را به ما خواهد داد.
  • ابتدا ۴ در ۱۰ ضرب می شود (اولویت از چپ به راست است) و سپس نتیجه اش بر ۲ تقسیم شده و گِرد می شود. نهایتا این نتیجه گرد شده با ۵ جمع می شود که حاصل 25 را به ما می دهد.

توجه داشته باشید که تنها مورد آخر integer است و موارد دیگر همگی float شده اند. چرا؟ به دلیل اینکه در پایتون ۳ اپراتور تقسیم (علامت /) نتیجه را به صورت float برمی گرداند. ما در مورد آخر به جای / از // استفاده کرده ایم که عدد را گِرد نیز می کند بنابراین اعشار آن حذف شده است.

متغیر چیست؟ (variables)

در تمام زبان های برنامه نویسی مفهومی به نام متغیر یا variable وجود دارد بنابراین قبل از ادامه این دوره باید با آن ها آشنا شویم. برای آشنایی راحت تر می توانیم یک مثال بزنیم؛ متغیرها مانند ظرف های غذا هستند و غذا نیز داده های ما می باشد! شما در طول روز نیاز به ظروف مختلفی دارید تا غذاهای مختلفی بخورید، محتویات این ظروف دائما تغییر می کند و هر روز شسته می شوند (خالی می شوند). متغیرها نیز در برنامه نویسی به همین شکل هستند؛ ما در طول کدنویسی و کار روی یک پروژه نیاز به ذخیره موقت اطلاعات داریم و برای انجام این کار از متغیرها استفاده می کنیم. به مثال ساده زیر توجه کنید:

height = 190

weight = 100

print(height)

در این مثال دو متغیر به نام های height و weight داریم. شما می توانید هر نامی را برای متغیرهایتان انتخاب کنید (به طور مثال aslufgaligalefulaehaeih هم یک نام معتبر است!). این دو متغیر اعداد ۱۹۰ و ۱۰۰ را در خود ذخیره می کنند و ما متغیر height را در انتها چاپ کرده ایم اما کاری با weight نداشته ایم. شاید بپرسید متغیرها چطور داده ها را در خود ذخیره می کنند؟ برای پاسخ به این سوال باید مطلبی را درک کنید؛ علامت تساوی (=) در کدنویسی واقعا تساوی نیست بلکه اپراتور انتساب (assignment operator) نام دارد. با این حساب کد بالا عدد ۱۹۰ را به متغیری به نام height منتسب می کند. این یعنی چه؟ متغیرها فقط آدرس های ساده ای به مموری هستند، یعنی height به یک مکان مشخص در مموری (همان RAM سیستم شما) اشاره می کند و صرفا یک آدرس است. به همین خاطر در بعضی از زبان ها به مقداردهی یا انتساب مقدار به متغیرها binding (یعنی چسباندن یا متصل کردن) نیز می گویند.

همچنین در نظر داشته باشید که عدد ۱۹۰ به صورت باینری (اعداد صفر و یک - زبان کامپیوترها) ذخیره می شود. باینری یعنی اعداد در مبنای ۲ در صورتی که ما انسان ها با اعداد در مبنای ۱۰ کار می کنیم و به همین خاطر شاید داده های باینری برایتان عجیب باشند. به طور مثال ۱۹۰ به باینری می شود 10111110. به همین خاطر متغیرها را داریم تا به جای نوشتن عدد عجیبی مثل 10111110 بتوانیم یک آدرس ساده تر و خواناتر به محل این عدد در مموری داشته باشیم.

نکته: برای برنامه نویسی نیازی به دانستن چنین موضوعاتی ندارید و من آن ها را صرفا جهت پاسخ به حس کنجکاوی شما توضیح می دهم. در صورتی که دوست دارید بدانید اعداد باینری چطور محاسبه می شوند می توانید به این لینک از محاسبه عدد ۱۹۰ مراجعه کنید اما یادتان باشد که هیچ وقت و در هیچ موقعیتی نیاز به دانستن باینری نخواهید داشت.

با اینکه شما در انتخاب نام متغیرها آزاد هستید اما چند قانون کوچک و قرارداد وجود دارند که باید/بهتر است همیشه از آن ها تبعیت کنید. زمانی که صحبت از قراردادها می کنیم یعنی پیروی از آن ها الزامی نیست اما پیشنهاد می شود طبق آن قرارداد عمل کنید. از طرفی زمانی که بحث از قانون می کنیم یعنی پیروی از آن صد در صد الزامی بوده و در صورتی که خلاف آن عمل کنید کدهایتان کار نخواهند کرد.

  • در نام متغیرها اجازه استفاده از اسپیس را ندارید (قانون). با قراردادن اسپیس نام متغیر را جدا می کنید و هرچه در ادامه بنویسید یک کد جداگانه محسوب می شود.
  • نام متغیرها باید با حروف انگلیسی یا آندرلاین شروع شوند (قانون). به طور مثال نمی توانید نام متغیری را با عدد شروع کنید.
  • نام متغیرها فقط شامل حروف انگلیسی، اعداد و علامت آندرلاین خواهند بود (قانون). استفاده از کاراکتر های دیگر غیر مجاز است.
  • نام متغیرها در زبان پایتون نسبت به بزرگی و کوچکی حروف حساس هستند (قانون) بنابراین my_variable و my_Variable دو متغیر کاملا متفاوت هستند.
  • نام متغیرهای شما نباید با نام کلیدواژه ها (keywords) یکسان باشد (قانون). اطلاعات بیشتر در قسمت انتهایی این مقاله.
  • نام متغیرها در زبان پایتون به صورت snake_case نوشته می شود (قرارداد). snake_case یعنی باید تمام حروف خود را به صورت lower case (حروف کوچک انگلیسی) بنویسید و اسپیس ها را به آندرلاین تبدیل کنید. به طور مثال متغیری به نام My Name (به معنی «نام من») باید به my_name تبدیل شود. یادتان باشد که اگر از قراردادها پیروی نکنید مشکلی پیش نمی آید اما توصیه نمی شود.
  • بهتر است نام متغیرها را با حروف کوچک یا علامت آندرلاین شروع کنید (قرارداد). قانون این بود که نام متغیرها با «حروف انگلیسی» یا «آندرلاین» شروع شوند اما قرارداد (روش توصیه شده) این است که نام متغیرها با «حروف کوچک انگلیسی» یا «آندرلاین» شروع شوند.

کلیدواژه ها (Keywords)

کلیدواژه ها یا همان کلمات رزرو شده (reserved) کلماتی هستند که در زبان پایتون معنی خاصی دارند و از قبل توسط توسعه دهندگان زبان پایتون اختراع شده اند. به طور مثال print نام یک تابع است و نمی توانید نام متغیر خود را print بگذارید بلکه باید چیزی به آن اضافه کنید (مثلا print_my_name).

شما می توانید لیستی از کلیدواژه های پایتون را در این لیست پیدا کنید اما یادتان باشد که این کلیدواژه ها لزوما محدود به این لیست نیستند. همچنین به یاد داشته باشید که هیچ نیازی به حفظ کردن این کلیدواژه ها نیست چرا که در طول این دوره با بیشتر آن ها آشنا می شوید و در آخر می دانید که از چه نام هایی دوری کنید (فرآیند یادگیری آن ها یک فرآیند طبیعی و آرام است).

انتساب مجدد متغیرها

همانطور که قبلا توضیح دادم، به فرآیند زیر انتساب می گوییم:

height = 190

چرا انتساب؟ به دلیل اینکه در این مقداردهی، یک مقدار خاص (عدد ۱۹۰) را به یک متغیر (آدرسی در حافظه)‌ منتسب کرده ایم. از طرفی می دانیم که متغیرها فقط آدرسی در RAM سیستم هستند بنابراین اگر دو متغیر داشته باشیم که هر دو به یک آدرس اشاره کنند چه می شود؟ یا به طور مثال اگر یک متغیر به یک متغیر دیگر اشاره کند چه می شود؟

height = 190

weight = height




print(weight)

نتیجه کد بالا عدد ۱۹۰ خواهد بود و هیچ مشکلی نخواهیم داشت. همانطور که می بینید در این کد از این جهت «انتساب مجدد» داریم که یک متغیر را به یک متغیر دیگر منتسب کرده ایم. حتی می توانیم عملیات های دیگری را نیز روی آن ها انجام بدهیم:

height = 190

weight = height - 100




print(weight)

نوع دیگری از انتساب مجدد در پایتون و زبان های برنامه نویسی دیگر وجود دارد و زمانی که بحث «انتساب مجدد» می شود معمولا این نوع در نظر توسعه دهندگان است:

height = 190

height = 100




print(height)

به نظر شما پاسخ کد بالا چیست؟ روند اجرای کدها در پایتون مانند بسیاری دیگر از زبان های برنامه نویسی از بالا به پایین است بنابراین ابتدا عدد ۱۹۰ را به متغیر height داده ایم، سپس عدد ۱۰۰ را دوباره به height داده ایم و از آنجایی که روند اجرا از بالا به پایین می باشد عدد ۱۰۰ برایمان چاپ می شود. در واقع کدی که پایین تر باشد جایگزین مقادیر قبلی می شود بنابراین متغیر height قبل از اینکه چاپ شود مقدار ۱۰۰ را خواهد داشت.

ثابت ها (constants)

در برخی از زبان های برنامه نویسی مفهومی به نام ثابت ها وجود دارند که برخلاف متغیرها هستند، یعنی نمی توانید در آن ها انتساب مجدد داشته باشید و هیچ وقت عوض نمی شوند. به طور مثال در زبان PHP برای تعریف ثابت ها از متد define استفاده می کنیم:

define("GREETING", "Welcome to W3Schools.com!");

در برخی دیگر از زبان های برنامه نویسی مانند پایتون ثابت ها خودشان نوعی متغیر هستند! شاید کمی سردرگم شده باشید، بگذارید توضیح بدهم. در پایتون دستور خاصی برای تعریف ثابت ها نداریم بلکه ثابت همان متغیر است و ما به دلیل قراردادهای خودمان قرار گذشته ایم که آن را تغییر ندهیم (قراردادی بین تمام توسعه دهندگان پایتون). زمانی که می خواهید یک ثابت را در پایتون مشخص کنید قرارداد این است که نام آن را همیشه با حروف بزرگ بنویسید. مثلا:

PI = 3.14

همانطور که می بینید از نظر فنی و عملیاتی مفهوم جداگانه ای به نام «ثابت» در پایتون وجود ندارد بنابراین از قراردادها استفاده می کنیم یا به زبان ساده تر وانمود می کنیم که وجود دارند! در حالی که از نظر فنی کد بالا فقط یک متغیر است و من می توانم آن را تغییر بدهم:

PI = 3.14

PI = 5

print(PI)

کد بالا عدد ۵ را چاپ می کند. شاید در ابتدا این مفهوم برایتان گیج کننده باشد اما به مرور زمان به آن عادت می کنید. به عنوان قانونی کلی می گویم که اگر متغیری را دیدید که تمام حروف نامش با حروف بزرگ نوشته شده بودند (مثلا MY_NAME) بدانید که آن متغیر یک ثابت است و نباید آن را تغییر بدهید.

قراردادهای اینچنینی در پایتون زیاد وجود دارند و به ندرت به آن ها عادت می کنید. به طور مثال در پایتون متد هایی به نام dunder داریم (مخفف double underscore) که با دو علامت آندرلاین یا همان آندراسکور شروع می شوند (مثال: __len__) و کار های خاصی انجام می دهند که فعلا مورد بحث ما نیستند و در آینده با آن ها آشنا خواهیم شد. بر اساس قرارداد نام متغیرهای شما نباید با ۲ عدد آندرلاین شروع شود چرا که شبیه به dunder ها خواهد شد.

روش میانبر برای مقداردهی به چندین متغیر

فرض کنید 5 متغیر داشته باشیم و بخواهیم به آن ها مقادیر مختلفی را پاس بدهیم. بر اساس چیزی که تا حالا یاد گرفته ایم می گوییم:

age = 25

height = 190

weight = 90

cars = 10

books = 20

اما روش خلاصه و میانبری نیز وجود دارد:

age, height, weight, cars, books = 25, 190, 90, 10, 20




print(age)

print(height)

print(weight)

print(cars)

print(books)

با اجرای کد بالا مقادیر زیر برایتان چاپ می شود:

25

190

90

10

20

به زبان ساده تر می توانیم با ویرگول انگلیسی چندین متغیر را یکجا تعریف کرده و مقداردهی کنید. این عملیات به ترتیب خواهد بود بنابراین age برابر ۲۵ و height برابر ۱۹۰ و الی آخر.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری پایتون حرفه‌ای توصیه می‌کند:
نویسنده شوید

دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.