توی این درس میخوایم متغیر در پایتون رو از صفر یاد بگیریم؛ از تعریف متغیر و مقداردهی گرفته تا قوانین اسمگذاری و تغییر نوع داده. اگه تازه شروع کردی، همین مثالها رو خودت اجرا کن. برای دیدن ترتیب بقیه درسها هم میتونی از مسیر یادگیری پایتون نابغهها استفاده کنی.
متغیر در پایتون چیست؟ تعریف ساده و کاربردی
ببین، اگه تازه پایتون رو شروع کردی، احتمالاً شنیدی «متغیر مثل یه جعبهست که مقدار رو میذاریم توش». این تشبیه برای شروع بد نیست، ولی اگه بخوام تعریف متغیر در پایتون رو دقیقتر بگم، ماجرا اینه: یه اسم میسازیم که به یک شیء (Object) اشاره میکنه. همین نگاه ساده بعداً موقع یادگیری لیستها و توابع خیلی به دردت میخوره. اول با یه مثال شروع کنیم:
course_name = "Python"
اینجا اسم course_name به رشته "Python" وصل شده. لازم نیست فعلاً وارد جزئیات حافظه بشیم؛ یک مقدار عددی رو هم ببین:
course_price = 2_000_000
اینجا course_price به عدد دو میلیون اشاره میکنه. اگه جایی عبارت Variables در پایتون رو دیدی، همین نکته رو به یاد بیار: اسم و مقداری که بهش اشاره میکنه، یک چیز نیستن. برای تصویرسازی، رابطه رو اینجوری ببین:
course_name
↓
"Python"
این مدل رو نگه دار؛ وقتی جلوتر درباره تغییر مقدار، نوع داده و Objectها حرف زدیم، دوباره به همین ارتباط اسم و مقدار برمیگردیم.

تعریف متغیر در پایتون؛ اولین سه مقدار رو بساز
برای تعریف متغیر در پایتون لازم نیست کلمه خاصی مثل var بنویسی. یک اسم انتخاب میکنی، علامت = میذاری و مقدار موردنظرت رو سمت راست مینویسی. این سه خط رو اجرا کن:
name = "Sara"
age = 23
course = "Python"
الان سه تا اسم داریم که هرکدوم به یه مقدار وصل شدن. برای دیدن مقدارهاشون از تابع print() استفاده کن:
print(name)
print(age)
print(course)
اگه هر سه خط رو درست اجرا کرده باشی، این خروجی رو میبینی:
Sara
23
Python
نکته خوشدست پایتون اینه که لازم نیست از همون اول مشخص کنی age قراره عدد صحیح باشه یا name متن. نوع داده مربوط به خود مقداره؛ تو فقط اسم رو به اون مقدار وصل میکنی. یکم جلوتر با type() این موضوع رو میبینیم.
مقداردهی متغیر در پایتون؛ علامت = چه معنیای داره؟
حالا برسیم به مقداردهی متغیر در پایتون. این خط رو نگاه کن:
price = 2_000_000
علامت = اینجا مساویِ ریاضی نیست؛ عمل Assignment انجام میده. یعنی اول سمت راست محاسبه میشه و بعد اسم سمت چپ به نتیجه اشاره میکنه. اگه دوباره به همون اسم مقدار بدی، اتصال قبلی اون اسم عوض میشه:
price = 2_500_000
برای دیدن نتیجه تغییر مقدار متغیر در پایتون، این سه خط رو پشت سر هم اجرا کن:
price = 2_000_000
price = 2_500_000
print(price)
خروجی باید این باشه:
2500000
پس صرف اینکه اسم یکیه، معنیاش این نیست که مقدارش همیشه ثابت میمونه. این نکته مبنای خیلی از تمرینهای بعدیه.
تغییر مقدار متغیر در پایتون؛ قبل از اجرا حدس بزن
قبل از اینکه کد رو اجرا کنی، خروجی رو روی کاغذ حدس بزن. این تمرین نشون میده تغییر مقدار متغیر در پایتون دقیقاً چه موقع روی محاسبات اثر میذاره.
price = 2_000_000
discount = 300_000
final_price = price - discount
discount = 500_000
print(final_price)
به نظرت خروجی چیه؟ شاید اول به این عدد برسی:
1500000
اما اون حدس درست نیست؛ خروجی واقعی اینه:
1700000
ببین چرا. وقتی اجرای برنامه به خط زیر میرسه:
final_price = price - discount
همون لحظه با مقدار فعلی متغیرها این محاسبه انجام میشه:
2,000,000 - 300,000
نتیجه در final_price قرار میگیره. وقتی بعداً discount از سیصد هزار به پانصد هزار تغییر میکنه، پایتون خودش برنمیگرده محاسبه قبلی رو تکرار کنه. برای بهدست آوردن مبلغ تازه، باید دوباره خط محاسبه final_price رو اجرا کنی.
final_price = price - discount
اگه این مثال رو واقعاً اجرا کرده باشی، یکی از اشتباههای مهم اول راه رو یاد گرفتی: عوض شدن یک اسم، قرار نیست نتیجه محاسبههای قبلی رو خودکار عوض کنه.
متغیرها در پایتون چه نوع دادهای دارن؟
برای بررسی نوع مقدار، تابع آماده type() رو داریم. چند تا مقدار متفاوت برای متغیرها در پایتون تعریف میکنیم و نوع هرکدوم رو میخونیم:
course = "Python"
students = 342
rating = 4.8
is_active = True
print(type(course))
print(type(students))
print(type(rating))
print(type(is_active))
خروجی چهار خط زیر خواهد بود:
<class 'str'>
<class 'int'>
<class 'float'>
<class 'bool'>
لازم نیست همینجا تمام جزئیات str، int، float و bool رو حفظ کنی. توی درس انواع داده در پایتون مفصل سراغشون میریم. فعلاً کافیه بدونی type() نوع شیئی رو نشون میده که اسم در اون لحظه بهش اشاره کرده.

Dynamic Typing و تغییر نوع متغیر در پایتون
اصطلاح Dynamic Typing شاید اولش عجیب به نظر بیاد، ولی مفهومش روشنه: اسمها در زمان اجرای برنامه میتونن به اشیایی با نوعهای متفاوت اشاره کنن. برای فهمش همین چند خط رو امتحان کن:
value = 10
print(value)
print(type(value))
در اجرای اول، خروجی عدد و نوعش اینه:
10
<class 'int'>
حالا بدون ساختن اسم جدید، مقدار همون value رو عوض کن:
value = "Python"
print(value)
print(type(value))
این دفعه خروجی فرق میکنه:
Python
<class 'str'>
پس Dynamic Typing یعنی اسم value یکبار به عدد و دفعه بعد به رشته اشاره کرده. اما این آزادی قرار نیست باعث بشه نوع داده رو نادیده بگیری. مثلاً فرض کن قیمت رو عددی تعریف کردی، ولی بعداً مقدار متنی «ناموجود» رو بهش بدی.
price = 2_000_000
حالا چند خط بعد، مقدار رو متنی میکنیم:
price = "ناموجود"
و اگه بخوای ازش عدد کم کنی:
final_price = price - 100_000
برنامه با TypeError متوقف میشه، چون کم کردن عدد از رشته با این شکل تعریف نشده. پس تغییر مقدار متغیر در پایتون رو باید با آگاهی از نوع داده انجام بدی؛ دستت بازه، ولی هر عملی روی هر نوعی معنی نداره.
نامگذاری Variables در پایتون؛ چرا اسم خوب مهمه؟
اول یک نمونه از اسمگذاری ضعیف رو ببین. این کد اجرا میشه، ولی خواندنش سختتر از چیزیه که باید باشه:
n = "Sara"
a = 23
p = 2_000_000
حالا تصور کن چند هفته بعد دوباره همین فایل رو باز کنی. واقعاً از p میفهمی قیمت دورهست؟ بیا نسخه خواناتر رو ببین:
student_name = "Sara"
student_age = 23
course_price = 2_000_000
تفاوتش رو دیدی؟ اسمهای معنیدار حتی قبل از اینکه کد اجرا بشه، هدفش رو روشن میکنن. موقع نامگذاری Variables در پایتون این نکته از کوتاه کردن چند کاراکتر مهمتره.
نامگذاری متغیر در پایتون با snake_case
برای متغیرهای معمولی، توصیه رایج راهنمای رسمی PEP 8 استفاده از snake_case هست؛ یعنی نامهای کوچک انگلیسی که کلمههاشون با زیرخط از هم جدا میشن:
first_name = "Sara"
course_price = 2_000_000
total_students = 342
پس بهجای چسبوندن کلمهها به هم، بینشون _ بذار. مثلاً این اسم:
course_price
از نسخهای که کلمههاش بدون جداکننده به هم چسبیدن خواناتر میشه:
courseprice
برای اسم متغیر معمولی، همین الگو از سبک زیر هم مناسبتره؛ چون اسمهای شبیه CoursePrice معمولاً برای کلاسها استفاده میشن:
CoursePrice
البته snake_case قانون اجباری مفسر نیست؛ یک قرارداد خواناییه. مهم اینه تو و بقیه اعضای تیم بتونید کد رو بیدردسر دنبال کنید.
قوانین نام گذاری متغیر در پایتون با مثال درست و غلط
برای شروع قوانین نام گذاری متغیر در پایتون، این چهار نمونه معتبر رو ببین:
name = "Ali"
student_name = "Sara"
course2 = "Python"
_total = 100
اما نمونههای زیر برای اسمگذاری درست نیستن و عمداً بهصورت کد اشتباه نشون داده شدن؛ اجراشون نکن:
# اینها نمونههای نادرست هستن؛ اجرا نکن
2course = "Python"
student-name = "Sara"
student name = "Sara"
class = "Python"
اسم متغیر نمیتونه با عدد شروع بشه و فاصله هم داخل یک اسم مجاز نیست. خط تیره - عملگر تفریقه، نه بخشی از شناسه؛ class هم کلمه رزروشده پایتونه. برای قوانین دقیقتر میتونی مستندات رسمی شناسهها در Python رو بخونی.

حروف بزرگ و کوچیک فرق دارن
پایتون به حروف بزرگ و کوچک حساسه. یعنی با عوض شدن یک حرف، اسم متفاوتی ساختی:
name = "Ali"
Name = "Sara"
NAME = "Reza"
این سه اسم به سه مقدار مختلف وصل شدن. توی کدهای کوتاه شاید تفاوتش ساده به نظر بیاد، اما توی پروژه بزرگ یک حرف اشتباه میتونه برنامه رو با NameError متوقف کنه. مثلاً اگه قبلاً این اسم رو تعریف کرده باشی:
student_name = "Sara"
ولی موقع چاپ، حرف اولش رو بزرگ بنویسی:
print(Student_name)
پایتون این دو اسم رو یکی نمیدونه و معمولاً NameError میگیری. پس وقتی متغیری پیدا نمیشه، قبل از هر چیزی املای دقیق اسمش رو بررسی کن.
اسم فارسی برای متغیر در پایتون میشه؟
آره، Python از خیلی از حروف غیرلاتین هم در شناسهها پشتیبانی میکنه. این مثال ساده رو میتونی اجرا کنی:
نام = "سارا"
سن = 23
print(نام)
با این حال من برای پروژهای که قراره اعضای تیم با هم توسعهاش بدن، اسم انگلیسی و معنیدار رو پیشنهاد میکنم. دلیلش محدودیت مطلق Python نیست؛ هماهنگی با ابزارها، مستندات و کدی که بقیه میخونن اهمیت داره.
student_name = "Sara"
برای همین در خیلی از پروژهها اسم زیر راحتتر خونده و جستوجو میشه:
نام_دانشجو = "سارا"
پس بین «از نظر زبان مجازه» و «برای تیم انتخاب خوبیه» تفاوت بذار. هر دو رو باید بلد باشی، ولی به یک نتیجه ختم نمیشن.
یه اشتباه بد : اسم Built-inهای Python رو برای Variable استفاده نکن
یه تله رایج اینه که اسم تابعهای آماده رو برای متغیر انتخاب کنی. مثلاً این خط خودش ممکنه بدون خطا اجرا بشه:
list = "Python"
اما چون list اسم یک تابع و نوع داخلی پایتونه، با این کار اسمش رو در محدوده فعلی پوشوندی. حالا اگه بخوای مثل قبل list() رو صدا بزنی:
numbers = list((1, 2, 3))
با خطای TypeError روبهرو میشی؛ چون list دیگه به تابع داخلی اشاره نمیکنه. برای همین بهتره موقع تعریف متغیر در پایتون از اسمهایی مثل موارد زیر استفاده نکنی:
list
str
int
type
id
sum
max
چند متغیر در پایتون رو میشه یهجا مقداردهی کرد؟
آره، میتونی چند اسم رو در یک خط مقداردهی کنی. یک نمونه ساده از مقداردهی متغیر در پایتون اینه:
name, age, course = "Sara", 23, "Python"
بعدش هر سه مقدار رو چاپ کن:
print(name)
print(age)
print(course)
حتی میشه یک مقدار رو به چند اسم وصل کرد:
x = y = z = 0
در این مثال هر سه اسم به عدد صفر اشاره میکنن. اما کوتاهتر بودن همیشه بهتر بودن نیست؛ اگه تعریف هر متغیر در خط جداگانه خواناتر میشه، همون رو انتخاب کن. برای اشیای قابل تغییر هم اشتراک یک شیء بین چند اسم میتونه اثر متفاوتی داشته باشه؛ جلوتر دربارهش حرف میزنیم.
name = "Sara"
age = 23
course = "Python"
برای آموزش مقدماتی من معمولاً وضوح رو به کوتاهنویسی ترجیح میدم. کدی خوبه که خودت چند روز بعد هم بدون حدس بفهمیش.
جابهجایی مقدار دو متغیر در پایتون بدون متغیر موقت
فرض کن دو عدد داریم:
a = 10
b = 20
میخوای مقدار این دو اسم با هم جابهجا بشه. توی پایتون میتونی بدون متغیر موقت این کار رو انجام بدی:
a, b = b, a
بعد مقدارها رو چاپ کن:
print(a)
print(b)
خروجی اینه:
20
10
در سمت راست این عبارت، مقدارهای قبلی اول ارزیابی میشن و بعد اسمهای سمت چپ مقدار جدید میگیرن. جلوتر با Tuple و Unpacking بهتر میفهمی چرا این روش کار میکنه.
Constant توی Python داریم یا نه؟
گاهی میخوای به بقیه بگی یک مقدار باید ثابت بمونه؛ مثلاً تعداد مجاز تلاش برای ورود:
MAX_LOGIN_ATTEMPTS = 5
یا نرخ مالیات در یک نمونه فرضی:
TAX_RATE = 0.10
توی Python برای ثابتهای معمولی، اعلام const مثل بعضی زبانها نداریم. اسم بزرگ فقط یک قرارداده و این دستور همچنان مجازه:
MAX_LOGIN_ATTEMPTS = 10
راهنمای PEP 8 درباره ثابتها پیشنهاد میکنه نامهایی که قرار است ثابت بمونن با حروف بزرگ و زیرخط نوشته بشن. یعنی اینجا داریم قصد برنامهنویس رو میرسونیم، نه اینکه خود مفسر جلوی مقداردهی دوباره رو بگیره.
مثال کاربردی متغیرها در پایتون؛ ثبتنام در دوره
حالا بیایم متغیرها در پایتون رو داخل یک مثال کمی واقعیتر ببینیم. فرض کن داریم بخشی از اطلاعات ثبتنام یک دانشجو رو نگه میداریم:
student_name = "Sara"
course_name = "Python"
course_price = 2_000_000
discount = 300_000
is_paid = False
برای محاسبه مبلغ قابل پرداخت، قیمت دوره رو از تخفیف کم میکنیم:
final_price = course_price - discount
حالا اطلاعات رو چاپ میکنیم تا ببینیم چه چیزهایی ذخیره شده:
print(student_name)
print(course_name)
print(final_price)
print(is_paid)
فرض کن دانشجو پرداختش رو تکمیل میکنه. وضعیت پرداخت رو عوض میکنیم:
is_paid = True
بعداً مبلغ تخفیف هم تغییر میکنه:
discount = 500_000
برای بهروزرسانی مبلغ نهایی باید محاسبه رو دوباره اجرا کنیم:
final_price = course_price - discount
حالا دیگه مشخصه چرا موضوع متغیر در پایتون فقط تعریف اول یک دوره نیست. حتی یک برنامه خیلی ساده هم برای نام دانشجو، مبلغ، تخفیف و وضعیت پرداخت از همین مفهوم استفاده میکنه.
سه تا باگ رو پیدا کن
وقت عیبیابیه! این سه خط عمداً سه انتخاب مسئلهدار دارن. قبل از اینکه توضیح رو بخونی، خودت بگو اشکال هر خط چیه:
# سه نمونهٔ مسئلهدار؛ اجرا نکن
class = "Python"
course-price = 2_000_000
list = "students"
اولین ایراد استفاده از این اسمه:
class
چون class کلمه رزروشده پایتونه. مشکل دوم در این نوشتاره:
course-price
اینجا - بخشی از اسم نیست و بهعنوان عملگر دیده میشه. ایراد سوم هم استفاده از این اسمه:
list
چون list یکی از اسمهای Built-in هست و ممکنه بعداً کار با تابع اصلی رو خراب کنه. این نسخه تمیزتره:
course_name = "Python"
course_price = 2_000_000
student_list_title = "students"
اگه بتونی توضیح بدی کد اول چرا مشکل داشت و نسخه دوم چرا بهتره، قوانین نامگذاری رو واقعاً یاد گرفتی.
فرق = با == رو از همین الان بدون
این خط رو ببین:
age = 23
اینجا یک مقدار به اسم داده شده؛ اما خط بعدی کار متفاوتی میکنه:
age == 23
علامت == برای مقایسه برابریه، نه مقداردهی. فعلاً لازم نیست شرطها رو اینجا باز کنیم؛ توی درس شرطها در پایتون با مثال مفصل سراغش میریم.
تمرین اول متغیر در پایتون : خروجی رو حدس بزن
برای تمرین اول، قبل از Run کردن نتیجه رو حدس بزن. قراره دوباره اثر تغییر مقدار رو بررسی کنیم:
score = 10
bonus = 5
final_score = score + bonus
bonus = 20
print(final_score)
وقتی اجراش کنی، این مقدار چاپ میشه:
15
چرا خروجی ۳۰ نشد؟ چون final_score با مقدار اولیه bonus حساب شده بود. اگه بتونی با زبان خودت این رو توضیح بدی، Assignment رو درست فهمیدی.
فرق = و == در پایتون چیه؟
برای تمرین دوم، از یک مقدار بولی شروع کن:
status = True
print(status)
print(type(status))
حالا همون اسم رو به یک متن وصل کن:
status = "paid"
print(status)
print(type(status))
خروجی type() رو در دو حالت مقایسه کن. این تمرین کوتاه دقیقاً نشون میده Dynamic Typing روی اسم و مقدار چه اثری داره.
تمرین سوم متغیر در پایتون : یه Profile کوچیک بساز
تمرین سوم اینه که یه پروفایل خیلی ساده برای دانشجو بسازی. این دادهها رو بهعنوان ورودی فرضی در نظر بگیر:
| اطلاعات | نمونه |
|---|---|
| نام دانشجو | Sara |
| سن | 23 |
| دوره | Python |
| امتیاز | 18.5 |
| حساب فعال | True |
از روی جدول، اسمهای معنیدار بساز؛ بعد مقدارها رو با print() چاپ کن و نوعهاشون رو با type() ببین. لازم نیست هنوز if یا حلقه بنویسی. فقط حواست باشه سراغ اسمهای نامفهومی مثل این نری:
xabdata
اسم متغیر باید کمک کنه معنی داده رو بفهمی. قرار نیست فقط یک رشته کوتاه از حروف تصادفی باشه.
یه چالش کوچیکتر ولی مهمتر
آخرین چالش کوتاه رو هم بدون اجرای اولیه حل کن:
course = "Python"
price = 2_000_000
discount = 400_000
final_price = price - discount
course = 100
discount = 900_000
print(course)
print(final_price)
قبل از Run جواب بده: course چی چاپ میکنه؟ final_price چند میشه؟ اول برای خودت دلیلش رو بنویس، بعد جواب رو ببین:
100
1600000
نتیجه رو با ترتیب اجرای خطها توضیح بده: course بعداً به عدد ۱۰۰ وصل شده، اما final_price با تخفیف قدیمی محاسبه شده. با همین منطق میتونی خیلی از باگهای ساده مقداردهی رو پیدا کنی.
چند اشتباه رایج موقع کار با متغیر در پایتون
چند اشتباه رو همیشه یادت باشه: اسمهای مبهم انتخاب نکن، از Built-inها برای نام متغیر استفاده نکن، تفاوت = و == رو فراموش نکن و فکر نکن با عوض شدن یک مقدار، نتیجه محاسبههای قبلی خودکار آپدیت میشه. برای ادامه مسیر هم درس توابع در پایتون و هاب آموزش پایتون از صفر رو داری. اینجا هدف فقط حفظ چند قانون نیست؛ میخوام بتونی کد رو بخونی، اجرا کنی و اشتباه خودت رو پیدا کنی.
سؤالات متداول درباره متغیر در پایتون
متغیر در پایتون چیست و چطور تعریف میشه؟
متغیر اسم مشخصیه که به یک شیء یا مقدار اشاره میکنه. برای تعریفش کافیه اسم و مقدار رو با = به هم وصل کنی؛ مثل student_age = 23. لازم نیست قبلش نوع داده رو اعلام کنی.
فرق تعریف متغیر با مقداردهی متغیر در پایتون چیه؟
وقتی اولین بار اسمی رو به مقدار وصل میکنی، معمولاً میگیم متغیر رو تعریف کردی. بعداً هم میتونی همون اسم رو به مقدار دیگه وصل کنی. هر دو با عمل Assignment انجام میشن، ولی در حالت دوم اتصال قبلی اسم عوض میشه.
چرا با تغییر discount مقدار final_price خودکار تغییر نمیکنه؟
چون عبارت final_price = price - discount همون موقع محاسبه شده. تغییر بعدی discount اون دستور قدیمی رو دوباره اجرا نمیکنه. برای قیمت جدید، باید دوباره محاسبه رو بنویسی یا در محل مناسب اجراش کنی.
آیا میتونیم نوع یک متغیر در پایتون رو عوض کنیم؟
بله، در پایتون میتونی یک اسم رو اول به عدد و بعد به رشته وصل کنی؛ این ویژگی به Dynamic Typing مربوطه. فقط یادت باشه هر عملی روی هر نوع داده قابل انجام نیست و ممکنه TypeError بگیری.
قوانین نام گذاری متغیر در پایتون چیه؟
اسم نباید با عدد شروع بشه، فاصله نداشته باشه و نباید از کلمه رزروشده مثل class استفاده کنی. بهتره برای نامهای معمولی snake_case انتخاب کنی و اسم Built-inهایی مثل list رو نپوشونی.
متغیر فارسی در پایتون مجازه؟
در بسیاری از حالتها بله، چون Python از شناسههای Unicode پشتیبانی میکنه. ولی برای پروژههای تیمی معمولاً اسمهای انگلیسی معنیدار انتخاب بهتری هستن؛ هم خوندن کد راحتتر میشه، هم با ابزارها و مستندات هماهنگتره.
اگه خواستی تعریفهای فنی این درس رو از منبع اصلی هم بخونی، مستندات رسمی Assignment در Python توضیح میده اسمها چطور به اشیا وصل میشن. برای نوشتن اسمهای خوانا هم راهنمای PEP 8 مرجع خوبیه. این لینکها برای مطالعه بیشترن، نه اینکه قبل از حل تمرینها مجبور باشی همه متن انگلیسی رو بخونی.