آشنایی با متغیرها و انواع داده ها در پایتون
اگر بهتازگی برنامهنویسی با پایتون را شروع کردهاید، یکی از اولین مفاهیمی که باید یاد بگیرید، متغیرها و انواع دادهها هستند. تقریباً هر برنامهای با دادهها سروکار دارد؛ دادههایی که ممکن است دریافت، ذخیره، پردازش یا نمایش داده شوند. متغیرها و انواع داده در پایتون امکان مدیریت این اطلاعات را فراهم میکنند.
در این مقاله، با مفهوم متغیر، قواعد نامگذاری، تایپ پویا و انواع دادههای اصلی پایتون آشنا میشوید. همچنین با استفاده از مثالهای کدنویسی یاد میگیرید چگونه متغیرها را تعریف کنید، نوع دادهها را تشخیص دهید و عملیات سادهای روی آنها انجام دهید.
اگر میخواهید یادگیری پایتون را از پایه و بهصورت اصولی شروع کنید، میتوانید جزئیات و سرفصلهای کلاس برنامهنویسی پایتون سماتک را بررسی کنید.
متغیر در پایتون چیست؟
متغیر (Variable) نامی است که برای ارجاع به یک شیء یا مقدار در برنامه استفاده میشود. برخلاف تصور رایج، متغیر در پایتون صرفاً یک ظرف نیست؛ بلکه نامی است که به یک شیء در حافظه ارجاع میدهد. با استفاده از عملگر انتساب (=) میتوان یک نام را به مقدار مشخصی اختصاص داد و در ادامه برنامه از آن استفاده کرد.
message = 'Hello Python!'
age = 25
print(message) # Hello Python!
print(age) # 25
age = 26
print(age) # 26
در این مثال، متغیر message به یک رشته و متغیر age به یک عدد صحیح ارجاع میدهد. سپس مقدار اختصاصیافته به age تغییر میکند و خروجی جدید برابر با 26 خواهد بود.
مقدار متغیرها دقیقاً کجا و چگونه در حافظه ذخیره میشود؟
هنگام اجرای برنامه، پایتون اشیا و دادهها را در حافظه مدیریت میکند و متغیرها نامهایی برای دسترسی به آنها هستند. دادههای مورد استفاده برنامه معمولاً در حافظه اصلی (RAM) قرار دارند، اما نحوه مدیریت حافظه به نوع داده و اجرای برنامه بستگی دارد.
بسته شدن برنامه بهخودیخود باعث ذخیره دائمی دادهها نمیشود. اگر بخواهیم اطلاعات پس از پایان اجرای برنامه نیز باقی بمانند، باید آنها را در محلی پایدار، مانند فایل یا پایگاه داده (Database)، ذخیره کنیم.
قوانین و اصول نامگذاری متغیرها در پایتون چه هستند؟
برای نامگذاری متغیرها باید قواعد مشخصی را رعایت کنید. رعایت این قواعد از بروز خطا جلوگیری میکند و خوانایی کد را افزایش میدهد.
- نام متغیر میتواند شامل حروف، اعداد و زیرخط (_) باشد.
- نام متغیر باید با حرف یا زیرخط شروع شود و نمیتواند با عدد آغاز شود.
- استفاده از فاصله در نام متغیر مجاز نیست.
- نام متغیر نباید با کلمات کلیدی پایتون، مانند if، for و class، یکسان باشد.
- بهتر است نام متغیر کوتاه، واضح و توصیفی باشد. برای مثال، student_name از s_n گویاتر است.
- به حروف مشابه، مانند l و O، توجه کنید؛ زیرا ممکن است با اعداد 1 و 0 اشتباه گرفته شوند.
نکته: نامهایی مانند print، int، str و bool کلمات کلیدی نیستند، بلکه نام توابع داخلی پایتون هستند. استفاده از آنها بهعنوان نام متغیر از نظر نحوی مجاز است، اما توصیه نمیشود؛ زیرا دسترسی به تابع اصلی را دشوار میکند.
استاندارد طلایی نامگذاری (Snake Case) در پایتون
در پایتون، طبق راهنمای سبک کدنویسی PEP 8، برای نام متغیرها معمولاً از سبک snake_case استفاده میشود. در این روش، حروف بهصورت کوچک نوشته میشوند و کلمات با زیرخط از یکدیگر جدا میشوند.
نمونههای معتبر:
message_1 = 'valid'
greeting_message = 'valid'
student_name = 'Sarah'
نمونههای نامعتبر:
# 1_message = ‘invalid’ # نام با عدد شروع شده است
# greeting message = ‘invalid’ # نام دارای فاصله است
نام متغیرها در پایتون به بزرگی و کوچکی حروف حساس است؛ بنابراین age، Age و AGE سه نام متفاوت محسوب میشوند.
تایپ پویا (Dynamic Typing) در پایتون یعنی چه؟
پایتون یک زبان شیءگرا با سیستم نوعدهی پویا (Dynamic Typing) است. در این زبان، هنگام تعریف متغیر نیازی نیست نوع آن را بهصورت صریح مشخص کنید؛ زیرا هر شیء نوع مشخصی دارد و پایتون میتواند نوع آن را در زمان اجرا تشخیص دهد.
x = 10
print(type(x)) # <class 'int'>
x = 'ten'
print(type(x)) # <class 'str'>
در ابتدا، نام x به یک شیء از نوع int ارجاع میدهد. سپس به یک شیء از نوع str ارجاع داده میشود. این ویژگی یکی از تفاوتهای مهم پایتون با زبانهایی مانند C# است.
برای مقایسه، در C# میتوان متغیری از نوع int تعریف کرد:
int x = 10;
x = "ten"; // Compiler Error
در این مثال، نمیتوان رشته “ten” را مستقیماً به متغیر x از نوع int اختصاص داد. در مقابل، در پایتون میتوان نام یک متغیر را در ادامه به شیئی با نوع دیگری متصل کرد.
برای بررسی نوع یک مقدار یا متغیر در پایتون، از تابع داخلی type() استفاده میشود.
ترفند جذاب: مقداردهی و انتساب همزمان به چند متغیر
پایتون امکان مقداردهی همزمان به چند متغیر را فراهم میکند. این قابلیت باعث میشود کد کوتاهتر و خواناتر شود.
a , b = 3, 4
print(a , b) #3 4
در این مثال، مقدار 3 به متغیر a و مقدار 4 به متغیر b اختصاص داده میشود.
همچنین میتوان یک مقدار را به چند متغیر اختصاص داد:
a = b = c = 10
print(a, b, c) # 10 10 10
انواع دادهها (Data Types) در پایتون چه انواعی دارند؟
هر شیء در پایتون نوع مشخصی دارد. نوع داده تعیین میکند که چه نوع اطلاعاتی نگهداری میشوند و چه عملیاتهایی را میتوان روی آنها انجام داد.
پایتون انواع داده داخلی متعددی دارد که مهمترین آنها در جدول زیر آمدهاند.
| دسته | نوع داده | توضیح | مثال |
| متنی | str | رشتهای از نویسهها | x = ‘Hello World’ |
| عددی | int | عدد صحیح | x = 20 |
| عددی | float | عدد ممیز شناور | x = 20.5 |
| عددی | complex | عدد مختلط | x = 2 + 3j |
| بولی | bool | مقدار درست یا نادرست | x = True |
| دنبالهای | list | دنباله قابل تغییر | x = [‘apple’, ‘banana’] |
| دنبالهای | tuple | دنباله غیرقابل تغییر | x = (‘apple’, ‘banana’) |
| دنبالهای | range | دنبالهای از اعداد صحیح | x = range(6) |
| نگاشتی | dict | مجموعهای از جفتهای کلید و مقدار | x = {‘name’: ‘Ali’, ‘age’: 20} |
| مجموعهای | set | مجموعهای بدون اعضای تکراری | x = {‘apple’, ‘banana’} |
| مجموعهای | frozenset | مجموعه غیرقابل تغییر | x = frozenset({‘apple’, ‘banana’}) |
| باینری | bytes | دنبالهای غیرقابل تغییر از بایتها | x = b’Hello’ |
| باینری | bytearray | دنبالهای قابل تغییر از بایتها | x = bytearray(5) |
| باینری | memoryview | نمایی از دادههای باینری بدون کپی مستقیم داده | x = memoryview(bytes(5)) |
| مقدار تهی | NoneType | نوع مقدار ویژه None | x = None |
در ادامه، برخی از پرکاربردترین انواع داده را بررسی میکنیم.
کار با دادههای متنی یا همان رشتهها (Strings) در پایتون
رشته (str) برای نگهداری متن استفاده میشود. رشتهها را میتوان با استفاده از تککوتیشن (‘) یا دابلکوتیشن (“) تعریف کرد.
my_string = 'hello'
my_string_2 = "hello"
sentence = "It's a Python string"
در مثال سوم، استفاده از دابلکوتیشن این امکان را فراهم میکند که آپاستروف (‘)موجود در It’s بدون نیاز به روشهای دیگر در رشته قرار بگیرد.
اگر بخواهیم دو رشته را به هم متصل کنیم، میتوانیم از عملگر + استفاده کنیم: در این مثال، رشتهها با یک فاصله به یکدیگر متصل میشوند.
hello = 'hello' world = 'world' print(hello + ' ' + world) # hello world
آشنایی با انواع اعداد در پایتون (int، float و complex)
پایتون سه نوع داده عددی اصلی دارد: int، float و complex.
- int: برای اعداد صحیح مانند 7 و 20 استفاده میشود.
- float: برای اعداد ممیز شناور مانند 7.0 و 20.5 به کار میرود.
- complex: برای اعداد مختلط، مانند 2 + 3j، استفاده میشود.
my_int = 7
my_float = 7.0
another_float = float(7)
my_complex = 2 + 3j
print(my_int) # 7
print(my_float) # 7.0
print(another_float) # 7.0
print(my_complex) # (2+3j)
در این مثال، تابع float() عدد صحیح 7 را به مقدار ممیز شناور 7.0 تبدیل میکند.
چطور محاسبات و عملگرهای ریاضی را در پایتون انجام دهیم؟
پایتون از عملگرهای ریاضی مانند جمع (+)، تفریق (-)، ضرب (*) و تقسیم (/) پشتیبانی میکند. همچنین با استفاده از پرانتز میتوان ترتیب انجام عملیات را مشخص کرد.
print(7 + 3) # 10
print(7 - 3) # 4
print(7 * 3) # 21
print(7 / 2) # 3.5
print(2 + 3 * 4) # 14
print((2 + 3) * 4) # 20
در مثالهای بالا، پایتون اولویت استاندارد عملگرها را رعایت میکند. به همین دلیل، در عبارت 2 + 3 * 4 ابتدا ضرب انجام میشود.
نکته مهم: عملگر تقسیم معمولی (/) در پایتون نتیجهای از نوع float برمیگرداند؛ حتی اگر حاصل تقسیم یک عدد صحیح باشد.
print(10 / 2) # 5.0
print(type(10 / 2)) # <class 'float'>
در عملیات حسابی میان اعداد int و float نیز معمولاً نتیجه از نوع float خواهد بود:
print(2 + 1.5) # 3.5
البته نوع نتیجه به عملگر و نوع دادههای ورودی بستگی دارد؛ بنابراین نباید فرض کرد که حضور هر مقدار float در تمام عملیاتها الزاماً نتیجهای از نوع float تولید میکند.
چرا اعداد اعشاری در پایتون گاهی محاسبات عجیبی دارند؟ (خطای دقت)
اعداد ممیز شناور در کامپیوتر با دقت محدود نمایش داده میشوند. برخی از اعداد اعشاری، مانند 0.1 و 0.2، نمایش دودویی دقیق و محدودی ندارند. به همین دلیل، نتیجه بعضی محاسبات ممکن است با مقدار ریاضی مورد انتظار تفاوت بسیار کوچکی داشته باشد.
print(0.1 + 0.2) # 0.30000000000000004
این رفتار ناشی از نحوه نمایش اعداد ممیز شناور است و لزوماً به معنای اشتباه بودن محاسبه نیست. در کاربردهایی که دقت اعشاری اهمیت زیادی دارد، مانند محاسبات مالی، میتوان از نوع Decimal استفاده کرد.
ترفندهای ترکیب کردن عدد و رشته (متن) کنار هم
عملگر + برای جمع اعداد یا اتصال رشتهها استفاده میشود. اما نمیتوان با این عملگر یک عدد و یک رشته را مستقیماً با هم ترکیب کرد.
one = 1
two = 2
hello = 'hello'
print(one + two) # 3
print('hello' + ' world') # hello world
اگر عبارت زیر را اجرا کنید، پایتون خطای TypeError ایجاد میکند:
print(one + two + hello)
علت این خطا آن است که نتیجه one + two از نوع int است، در حالی که hello از نوع str است.
برای رفع این مشکل، میتوان عدد را با استفاده از تابع str() به رشته تبدیل کرد:
print(str(one + two) + hello) # 3hello
روش دیگر، استفاده از f-string است که برای ترکیب متن و مقادیر متغیرها خوانایی بیشتری دارد:
print(f'{one + two} {hello}') # 3 hello
جمعبندی
متغیرها و انواع داده از مفاهیم پایهای برنامهنویسی با پایتون هستند. متغیرها امکان دسترسی به دادهها را فراهم میکنند و انواع داده مشخص میکنند که اطلاعات چگونه نمایش داده شوند و چه عملیاتی روی آنها قابل انجام باشد.
- نام متغیرها را مطابق قواعد پایتون و ترجیحاً با سبک snake_case انتخاب کنید.
- پایتون از تایپ پویا پشتیبانی میکند؛ بنابراین نوع یک نام میتواند در طول اجرای برنامه تغییر کند.
- برای بررسی نوع یک شیء از تابع type() استفاده کنید.
- انواع داده پرکاربرد شامل str، int، float، bool، list، tuple و dict هستند.
- عملگر + برای جمع اعداد یا اتصال رشتهها به کار میرود؛ برای ترکیب عدد و متن باید تبدیل نوع انجام دهید یا از f-string استفاده کنید.
- در محاسبات اعشاری، به محدودیت دقت اعداد ممیز شناور توجه داشته باشید.
درک درست متغیرها و انواع داده، پایهای برای یادگیری موضوعات پیشرفتهتر مانند شرطها، حلقهها، توابع، ساختارهای داده و برنامهنویسی شیءگرا در پایتون است.
سؤالات متداول
متغیر نامی است که به یک شیء یا مقدار ارجاع میدهد و امکان استفاده مجدد از آن را در بخشهای مختلف برنامه فراهم میکند.
خیر. پایتون از تایپ پویا پشتیبانی میکند و نیازی نیست هنگام تعریف متغیر، نوع آن را بهصورت صریح بنویسید.
با استفاده از تابع داخلی type() میتوان نوع شیء مورد اشاره متغیر را بررسی کرد. برای مثال:
x = 10
print(type(x)) #
int برای اعداد صحیح و float برای اعداد ممیز شناور استفاده میشود. برای مثال، 10 از نوع int و 10.0 از نوع float است.
بله. میتوان یک نام را در ادامه برنامه به شیئی با نوع دیگری اختصاص داد. برای مثال، متغیری که ابتدا به یک عدد ارجاع میدهد، میتواند بعداً به یک رشته ارجاع دهد.