متغیر (variable) در پایتون را میتوانید همانند یک محفظه در نظر بگیرید که برای ذخیره موقت اطلاعات استفاده میشود. در این آموزش نحوه ایجاد کردن متغیر در پایتون و همچنین عملیات های مختلفی که میتوانید در پایتون روی متغیر ها انجام دهید را یاد میگیرید.
ساخت متغیر در پایتون
پایتون یک زبان داینامیک تایپ (dynamic type) است به این معنی که در زمان ساخت یک متغیر جدید نیاز نیست نوع آن را مشخص کنید. ما نیازی به تعریف نوع متغیر قبل از استفاده از آنها نداریم و این مفسر پایتون است که نوع متغیر را مشخص میکند. یک متغیر در لحظه ای ایجاد می شود که برای اولین بار یک مقدار به آن اختصاص می دهیم.
ساخت یک متغیر جدید با علامت تساوی(=) انجام می شود. به مثال زیر دقت کنید:
>>> n = 300
در مثال بالا، مقدار عددی 300 را در متغیری به نام n ذخیره کردیم. حالا میتوانید از این متغیر در برنامه استفاده کنید:
>>> print(n)
300
در زمان مقداردهی متغیر ها، پایتون به طور اتوماتیک نوع متغیر را مشخص میکند. مثلا در کد بالا، مفسر پایتون میتواند تشخیص دهد که یک عدد را در متغیر n ذخیره کردیم. برای تشخیص نوع متغیر میتوانید از تابع type استفاده کنید. مثلا در کد زیر، نوع متغیر عددی int است:
>>> n = 300
>>> type(n)
<class 'int'>
یا اگر متغیر با نوع رشته ذخیره کنید، مفسر پایتون نوع متغیر را str مشخص میکند:
>>> m = 'amir'
>>> type(m)
<class 'str'>
تغییر مقدار متغیر در پایتون
برخلاف زبان های استاتیک تایپ(static typed) که نوع متغیر در آنها ثابت است، در پایتون میتوانید نوع یک متغیر را تغییر دهید. مثلا اگر مقدار ذخیره شده در یک متغیر عدد باشد، میتوانید آن را به انواع دیگر مانند رشته یا دیکشنری تغییر دهید.
به کد زیر دقت کنید:
>>> n = 300
>>> n = 'amir'
>>> n
amir
همانطور که در مثال بالا میبینید، مقدار متغیر n ابتدا عدد بود اما توانستیم آن را به نوع رشته تغییر دهیم.
حذف متغیر در پایتون
در زبان پایتون برای حذف متغیر ها میتوانید از دستور del استفاده کنید. بعد از حذف کردن متغیر، دیگر نمیتوانید از آن استفاده کنید و اگر متغیر حذف شده را فراخوانی کنید با خطا مواجه خواهید شد:
>>> n = 300
>>> del n
>>> n
NameError: name 'n' is not defined
همانطور که میبینید، استفاده از متغیر حذف شده باعث بروز خطای NameError شده است به این معنی که این متغیر وجود ندارد. معمولا نیاز نیست که برنامه نویس به صورت دستی اقدام به حذف متغیر ها کند زیرا مفسر پایتون به طور اتوماتیک میتواند متغیر های بلا استفاده را تشخیص داده و آن ها را حذف کند تا در مصرف حافظه صرفه جویی شود.
انتساب چند گانه متغیرها در پایتون
در پایتون ترفند های خاصی وجود دارد که میتوانید با آنها چند متغیر را همزمان ایجاد کنید. مثلا میتوانید چند متغیر را با علامت کاما ( , ) در یک خط ایجاد کنید:
>>> a, b = 100, 200
>>> a
100
>>> b
200
میتوانید بیش از سه متغیر را با انواع داده مختلف ایجاد کنید:
>>> a, b, c = 0.1, 100, 'string'
اگر در سمت چپ فقط یک متغیر وجود داشته باشد، یک تاپل ایجاد میشود:
>>> a = 100, 200
>>> a
(100, 200)
>>> type(a)
<class 'tuple'>
اگر تعداد متغیرها و مقادیر برابر نباشند، با خطای ValueError مواجه خواهید شد. مگر اینکه با علامت ستاره ( * ) بقیه مقادیر را به شکل یک لیست در متغیر ذخیره کنید:
>>> a, b = 100, 200, 300
ValueError: too many values to unpack (expected 2)
>>> a, b, c = 100, 200
ValueError: not enough values to unpack (expected 3, got 2)
>>> a, *b = 100, 200, 300
>>> a
100
>>> type(a)
<class 'int'>
>>> b
[200, 300]
>>> type(b)
<class 'list'>
>>> *a, b = 100, 200, 300
>>> a
[100, 200]
>>> type(a)
<class 'list'>
>>> b
300
>>> type(b)
<class 'int'>
ترفند دیگری که میتوانید در زمان ساخت متغیر در پایتون استفاده کنید، ساخت چند متغیر با یک مقدار است که در این حالت میتوانید از علامت مساوی( = ) چند بار پشت سر هم استفاده کنید:
>>> a = b = 100
>>> a
100
>>> b
100
قوانین نام گذاری متغیرها در پایتون
برای نام گذاری متغیر ها در پایتون باید از قوانین خاصی پیروی کنید تا نام انتخابی با منطق مفسر پایتون هماهنگ باشد. اگر از این قوانین پیروی نکنید با خطای SyntaxError مواجه خواهید شد:
- نام متغیر باید با حروف الفبا انگلیسی یا زیر خط( _ ) شروع شود و نمیتواند با عدد یا هر کاراکتر دیگری شروع شود.
- نام متغیر فقط میتواند شامل حروف الفبا انگلیسی، عدد و زیر خط ( _ ) باشد.
- نام متغیر ها به حروف کوچک و بزرگ حساس است یعنی Name با name متفاوت است.
- کلمات کلیدی رزرو شده در پایتون نمیتوانند به عنوان نام متغیر انتخاب شوند.
- نام متغیر ها نمی تواند دارای فاصله باشد.
در کد زیر چند نمونه از نام متغیرهایی که نامعتبر هستند را آورده ایم:
1name
n@me
n me
در زمان ساخت متغیر سعی کنید نامی را انتخاب کنید که معنی و مفهوم را برساند و مشخص کند که متغیر برای چه کاری استفاده می شود. مثلا فرض کنید میخواهید تعداد افرادی که از دانشگاه فارغ التحصیل شده اند را ذخیره کنید. می توانید یکی از موارد زیر را انتخاب کنید:
>>> numberofcollegegraduates = 2500
>>> NUMBEROFCOLLEGEGRADUATES = 2500
>>> numberOfCollegeGraduates = 2500
>>> NumberOfCollegeGraduates = 2500
>>> number_of_college_graduates = 2500
در کد بالا از روی نام متغیر میتوان فهمید که برای چه کاری استفاده میشوند. اما مشکلی که وجود دارد سردرگمی در نحوه استفاده از حروف بزرگ یا کوچک است زیرا همه مثال های بالا خوانا نیستند.
اکثر برنامه نویسان دو مثال اول را که در آن حروف همه به هم چسبیده اند، دشوارتر می دانند، به خصوص نمونه ای که با تمام حروف بزرگ نوشته شده است. متداولترین روشهای مورد استفاده برای ساخت یک نام متغیر چند کلمهای، سه نمونه آخر هستند:
- Camel Case: کلمات دوم و بعدی با حروف بزرگ نوشته میشوند تا مرزهای کلمات راحتتر دیده شوند. مثلا numberOfCollegeGraduates
- Pascal Case: با Camel Case یکسان است، به جز اینکه کلمه اول نیز با حروف بزرگ نوشته شده است. مثلا NumberOfCollegeGraduates
- Snake Case: کلمات با زیرخط از هم جدا می شوند. مثلا number_of_college_graduates
راهنمای سبک برای کد پایتون، که به عنوان PEP 8 شناخته میشود، شامل قراردادهای نامگذاری است که استانداردهای پیشنهادی را برای نامهای انواع آبجکت های مختلف را مشخص میکند. PEP 8 موارد زیر را توصیه میکند:
- Snake Case باید برای توابع و نام متغیرها استفاده شود.
- از Pascal Case باید برای نام کلاس ها استفاده شود.
نحوه مدیریت متغیر ها توسط مفسر پایتون
وقتی یک متغیر ایجاد میکنید در واقع چه اتفاقی می افتد؟ مفسر پایتون چطور متغیر ها را مدیریت میکند؟ این یک سوال مهم در پایتون است، زیرا پاسخ آن تا حدودی با آنچه در بسیاری از زبان های برنامه نویسی دیگر پیدا می کنید متفاوت است.
پایتون یک زبان بسیار شی گرا است. در واقع، هر چیزی که در پایتون وجود دارد مانند متغیر، تابع، کلاس و ... یک آبجکت است.
این کد را در نظر بگیرید:
>>> print(300)
300
هنگامی که کد بالا را اجرا میکنید، مفسر پایتون کارهای زیر را انجام می دهد:
- یک آبجکت عدد صحیح ایجاد می کند.
- به آن مقدار 300 را میدهد.
- آنرا در خروجی نشان میدهد.
می توانید ببینید که یک آبجکت عدد صحیح با استفاده از تابع ()type داخلی ایجاد می شود:
>>> type(300)
<class 'int'>
در پایتون زمانی که یک متغیر ایجاد میکنید، در واقع یک نام نمادین برای یک آبجکت انتخاب کرده اید. آبجکت در حافظه ذخیره شده و شما با نام متغیر میتوانید به آبجکت دسترسی داشته باشید.
به عنوان مثال:
>>> n = 300
این انتساب یک آبجکت عدد صحیح با مقدار 300 ایجاد می کند و متغیر n را به آن آبجکت اختصاص می دهد.
کد زیر تأیید می کند که n به یک آبجکت عدد صحیح اشاره می کند:
>>> print(n)
300
>>> type(n)
<class 'int'>
حال عبارت زیر را در نظر بگیرید:
>>> m = n
وقتی اجرا می شود چه اتفاقی می افتد؟ پایتون آبجکت دیگری ایجاد نمی کند. به سادگی یک نام نمادین یا مرجع جدید، m ایجاد می کند که به همان آبجکتی اشاره می کند که n به آن اشاره می کند.
بعد، فرض کنید این کار را انجام دهید:
>>> m = 400
حال پایتون یک آبجکت عدد صحیح جدید با مقدار 400 ایجاد می کند و m تبدیل به مرجع آن می شود.
در نهایت، فرض کنید این دستور در ادامه اجرا شود:
>>> n = "foo"
اکنون پایتون یک آبجکت رشته با مقدار "foo" ایجاد می کند و n را به آن ارجاع می دهد.
دیگر هیچ اشاره ای به آبجکت عدد صحیح 300 وجود ندارد. این آبجکت یتیم است و هیچ راهی برای دسترسی به آن وجود ندارد. در طول عمر یک آبجکت، تا زمانی که مرجعی به آن وجود داشته باشد، زنده خواهد ماند. اما به محض اینکه تعداد مرجع های یک آبجکت به صفر برسد، برای مدیریت بهینه حافظه، این آبجکت حذف خواهد شد. در این مرحله، عمر آن به پایان می رسد. در زبان کامپیوتری، این فرآیند را جمع آوری زباله می نامند.
هویت متغیرها در پایتون
در پایتون به هر متغیر یا آبجکتی که ایجاد می شود یک عدد داده می شود که به طور منحصر به فرد آن را مشخص می کند. تضمین شده که هیچ دو آبجکت شناسه یکسانی نداشته باشند.
تابع id پایتون شناسه عدد صحیح یک متغیر را برمی گرداند. با استفاده از تابع id می توانید بررسی کنید که دو متغیر واقعاً به یک آبجکت اشاره می کنند یا خیر:
>>> n = 300
>>> m = n
>>> id(n)
60127840
>>> id(m)
60127840
>>> m = 400
>>> id(m)
60127872
پس از انتساب m = n، متغیرهای m و n هر دو به یک آبجکت اشاره می کنند، که با این واقعیت تأیید می شود که id(m) و id(n) یک عدد را برمی گردانند. هنگامی که m دوباره به 400 اختصاص یافت، m و n به آبجکت های مختلف با هویت های مختلف اشاره می کنند.
متغیر های ثابت در پایتون
متغیرهای ثابت به متغیرهایی گفته میشود که مقادیر آنها در زمان اجرا نباید تغییر کند. در اکثر زبان های برنامه نویسی مفهومی به معنای ثابت وجود دارد که مفسر آن زبان اجازه تغییر مقادیر را نمیدهد. اما پایتون به صورت پیشفرض از مفهوم متغیرهای ثابت پشتیبانی نمیکند.
تنها کاری که میتوانید در پایتون برای ایجاد کردن متغیر های ثابت انجام دهید نامگذاری نام متغیر با حروف بزرگ است. مثلا به جای host بنویسید HOST. این فقط یک قرارداد است و هر زمان که بخواهید میتوانید مقدار ثابت ها را تغییر دهید.
معمولا متغیر های ثابت را در ماژولی جداگانه ذخیره کرده و در صورت نیاز import میکنند. مثلا فرض کنید که فایلی به نام settings.py به شکل زیر داریم:
# settings.py
HOST = 'smtp.gmail.com'
PASSWORD = 'secure_pass'
همچنین مفسر پایتون نیز دارای تعدادی متغیر ثابت داخلی است که میتوانید از بخش Built-in Constants آنها را ببینید.
نتیجه گیری
این آموزش اصول اولیه متغیرهای پایتون، از جمله ارجاعات و هویت و نامگذاری متغیرهای پایتون را پوشش داد. اکنون درک خوبی از برخی از انواع داده های پایتون دارید و می دانید که چگونه متغیرهایی ایجاد کنید که به اشیاء آن نوع ارجاع دهند.
ارسال نظر