Data Type ها در پایتون
مقدمه
در پایتون، Data Type یا نوع داده مشخص میکند که یک متغیر چه نوع اطلاعاتی را نگهداری میکند و چه عملیاتی روی آن قابل انجام است. درک درست انواع دادهها برای هر برنامهنویسی در پایتون حیاتی است، زیرا عملیاتی که میتوانید روی یک عدد انجام دهید (مانند جمع کردن) با عملیاتی که روی یک رشته انجام میدهید (مانند الحاق) متفاوت است.
پایتون یک زبان Dynamically Typed است، یعنی نوع داده متغیر در زمان اجرا (Runtime) مشخص میشود و نیازی به تعریف صریح نوع داده هنگام تعریف متغیر (مانند زبانهای C++ یا Java) نیست.
# مثال Dynamic Typing
x = 10 # در این لحظه x از نوع int است
print(type(x))
x = "Hello" # حالا x از نوع str شده است
print(type(x))
انواع دادههای اصلی در پایتون به دستههای بزرگی تقسیم میشوند: اعداد (Numeric)، رشتهها (String)، بولین (Boolean)، دنبالهها (Sequence Types) شامل List و Tuple، مجموعهها (Set Types)، و نگاشتها (Mapping Types) شامل Dictionary.
Numeric Data Types (انواع دادههای عددی)
این انواع داده برای ذخیره مقادیر عددی استفاده میشوند.
1) int (Integer)
int برای نمایش اعداد صحیح (بدون قسمت اعشاری) استفاده میشود. در پایتون 3، اندازه اعداد صحیح محدود به حافظه سیستم است و نیازی به نگرانی درباره سرریز شدن (Overflow) در محاسبات استاندارد نیست.
ویژگیها:
- اعداد کامل مثبت، منفی و صفر.
مثال:
age = 30
count = -7
big_number = 12345678901234567890
print(type(age))
2) float (Floating Point Number)
float برای نمایش اعداد اعشاری (اعداد با ممیز شناور) استفاده میشود. این اعداد با دقت استاندارد IEEE 754 ذخیره میشوند.
ویژگیها:
- شامل یک نقطه اعشار.
مثال:
price = 19.50
pi = 3.14159
temperature = -0.5
print(type(price))
# نمایش با نماد علمی
scientific_num = 1.2e3 # معادل 1200.0
3) complex (Complex Number)
complex برای نمایش اعداد مختلط استفاده میشود که شامل یک بخش حقیقی و یک بخش موهومی هستند. بخش موهومی با پسوند j یا J مشخص میشود.
ویژگیها:
- فرمت:
a + bj
مثال:
z = 2 + 3j
real_part = z.real
imaginary_part = z.imag
print(f"عدد مختلط: {z}")
print(f"بخش حقیقی: {real_part}")
print(f"بخش موهومی: {imaginary_part}")
print(type(z))
String (str)
رشتهها برای ذخیره دادههای متنی استفاده میشوند. رشتهها دنبالهای از کاراکترها هستند.
ویژگیها:
- قابل تغییر نیستند (Immutable): پس از تعریف یک رشته، نمیتوانید یک کاراکتر خاص در آن را بدون ایجاد یک رشته جدید تغییر دهید.
- میتوانند با تک کوتیشن (
')، دابل کوتیشن (") یا سه تایی کوتیشن ("""یا''') تعریف شوند. سه تایی کوتیشنها برای تعریف رشتههای چند خطی مناسباند.
مثال:
name = "Ali"
message = 'Hello Python World'
long_text = """این یک متن
چند خطی است."""
# عملیات الحاق (Concatenation)
greeting = name + " says " + message
print(greeting)
# دسترسی به کاراکتر (این عمل یک رشته جدید برنمیگرداند، فقط کاراکتر را میخواند)
first_char = name[0] # 'A'
# رشته ها ایمیوتیبل هستند، تلاش برای تغییر مستقیم خطا میدهد:
# name[0] = 'B' # TypeError
Boolean (bool)
نوع داده بولین فقط دو مقدار ممکن را دارد که نشاندهنده وضعیت درست یا غلط بودن یک شرط هستند.
مقادیر ممکن:
True(صحیح/درست)False(غلط/نادرست)
کاربرد:
اغلب در عملیات شرطی، حلقهها و توابع مقایسهای استفاده میشوند.
مثال:
is_active = True
is_admin = False
# مقایسه ها همیشه یک مقدار بولین برمیگردانند
a = 5
b = 10
comparison_result = (a < b) # True
print(type(comparison_result))
Sequence Types (انواع داده دنبالهای)
این انواع داده مجموعهای مرتب از آیتمها هستند.
1) List
لیستها انعطافپذیرترین ساختار دادهای در پایتون هستند و برای ذخیره مجموعهای از آیتمها با انواع دادههای مختلف استفاده میشوند.
ویژگیها:
- مرتب (Ordered): آیتمها دارای یک ترتیب مشخص هستند و میتوان آنها را با استفاده از اندیس (Index) فراخوانی کرد (شروع از 0).
- قابل تغییر (Mutable): میتوان آیتمهای موجود در لیست را تغییر داد، حذف کرد یا به آن اضافه نمود.
- اجازه تکرار (Allows Duplicates): میتواند شامل آیتمهای تکراری باشد.
مثال:
numbers = [1, 2, 3, 4, 5]
mixed_list = [10, "apple", 3.14, True]
# دسترسی و تغییر
print(numbers[0]) # 1
numbers[0] = 100 # تغییر آیتم اول
print(numbers) # [100, 2, 3, 4, 5]
# اضافه کردن آیتم
numbers.append(6)
# عملیات برش (Slicing)
subset = numbers[1:4] # [2, 3, 4]
2) Tuple
تاپلها بسیار شبیه به لیستها هستند، با این تفاوت که پس از ایجاد، قابل تغییر نیستند.
ویژگیها:
- مرتب (Ordered): مانند لیستها.
- غیرقابل تغییر (Immutable): پس از تعریف، نمیتوان آیتمهای آن را تغییر داد. این باعث میشود تاپلها کمی سریعتر از لیستها باشند و بتوان از آنها به عنوان کلید در دیکشنریها استفاده کرد (در حالی که لیستها نمیتوانند).
- اجازه تکرار: آیتمهای تکراری مجاز هستند.
- عموماً با پرانتز
()تعریف میشوند (اگرچه پرانتزها در تعریف اختیاری هستند، اما برای خوانایی استفاده میشوند).
مثال:
point = (10, 20)
colors = ("red", "green", "blue", "red")
# دسترسی
print(colors[0]) # red
# تلاش برای تغییر منجر به خطا میشود:
# point[0] = 5 # TypeError: 'tuple' object does not support item assignment
# تاپل تک عضوی باید با یک کاما تعریف شود:
single_tuple = (5,)
Set Types (انواع داده مجموعهای)
مجموعهها ساختاری برای ذخیره مجموعهای از آیتمهای منحصر به فرد هستند.
1) Set
ستها مجموعهای نامرتب از آیتمهای منحصر به فرد (بدون تکرار) هستند.
ویژگیها:
- نامرتب (Unordered): آیتمها اندیس ندارند و ترتیب آنها تضمین نمیشود.
- غیرقابل تغییر اعضا (Mutable Container): خود مجموعه قابل تغییر است (میتوان آیتم اضافه یا حذف کرد)، اما آیتمهای درون آن باید از نوع Immutable باشند (مانند اعداد، رشتهها، تاپلها).
- بدون تکرار (No Duplicates): آیتمهای تکراری به طور خودکار حذف میشوند.
مثال:
items = {1, 2, 2, 3, 4, 1}
print(items) # {1, 2, 3, 4} - تکرارها حذف شدند
# عملیات مجموعه ای (Intersection, Union)
set_a = {1, 2, 3}
set_b = {3, 4, 5}
union_set = set_a.union(set_b) # {1, 2, 3, 4, 5}
# اضافه کردن آیتم
items.add(5)
2) Frozenset
frozenset مشابه set است، اما غیرقابل تغییر (Immutable) است. این ویژگی به ما اجازه میدهد از frozenset به عنوان آیتم درون یک set دیگر یا به عنوان کلید دیکشنری استفاده کنیم.
مثال:
numbers = frozenset([1, 2, 3, 3, 4])
print(numbers)
Mapping Type (نوع نگاشت)
1) Dictionary (dict)
دیکشنریها مجموعهای از جفتهای کلید-مقدار (Key-Value Pair) هستند که برای بازیابی سریع دادهها بر اساس یک کلید مشخص طراحی شدهاند.
ویژگیها:
- مرتب (Ordered): از پایتون 3.7 به بعد، دیکشنریها ترتیب درج را حفظ میکنند.
- قابل تغییر (Mutable): میتوان کلیدها و مقادیر را اضافه، حذف یا تغییر داد.
- کلیدهای منحصر به فرد: هر کلید در دیکشنری باید منحصر به فرد باشد.
- کلیدها باید Immutable باشند: معمولاً از رشتهها، اعداد یا تاپلها به عنوان کلید استفاده میشود.
مثال:
user = {
"name": "Ali",
"age": 25,
"city": "Tehran"
}
# دسترسی به مقدار بر اساس کلید
print(user["name"]) # Ali
# تغییر یا اضافه کردن آیتم
user["age"] = 26
user["email"] = "ali@example.com"
# حذف آیتم
del user["city"]
print(user)
None Type
NoneType
None یک نوع داده خاص در پایتون است که برای نشان دادن نبود مقدار (Absence of Value) یا مقدار تهی استفاده میشود. این با صفر (0) یا رشته خالی ("") تفاوت دارد؛ None به معنای “هیچ چیز” است.
ویژگیها:
- فقط یک مقدار دارد:
None. - اغلب برای مقداردهی اولیه متغیرهایی که بعداً قرار است مقدار بگیرند یا برای مشخص کردن مقداری که یک تابع به طور پیشفرض برمیگرداند (در صورتی که صراحتاً مقداری برنگرداند) استفاده میشود.
مثال:
result = None
if result is None:
print("نتیجه هنوز محاسبه نشده است.")
def print_only():
print("فقط چاپ می کنم")
return_value = print_only() # تابع چیزی برنمیگرداند
print(type(return_value)) # <class 'NoneType'>
بررسی نوع داده (Type Checking)
برای فهمیدن اینکه یک متغیر در هر لحظه از چه نوع دادهای است، از تابع داخلی type() استفاده میشود. برای بررسی اینکه آیا متغیر از نوع خاصی هست یا خیر، از تابع isinstance() استفاده میشود که انعطافپذیری بیشتری دارد.
استفاده از type()
x = 10.5
y = [1, 2]
print(f"نوع x: {type(x)}") # <class 'float'>
print(f"نوع y: {type(y)}") # <class 'list'>
استفاده از isinstance()
این تابع در تستهای شرطی بسیار مفیدتر است، زیرا میتواند انواع مختلفی را همزمان چک کند.
value = 50
if isinstance(value, int):
print("این یک عدد صحیح است.")
if isinstance(value, (int, float)):
print("این یک عدد (صحیح یا اعشاری) است.")
تبدیل نوع داده (Type Casting)
پایتون توابعی برای تبدیل صریح یک نوع داده به نوع دیگر فراهم میکند (مثلاً تبدیل رشته به عدد یا عدد به رشته).
تابعکاربردint()تبدیل به عدد صحیحfloat()تبدیل به عدد اعشاریstr()تبدیل به رشتهlist()تبدیل به لیستtuple()تبدیل به تاپلset()تبدیل به مجموعه
مثال:
str_num = "123"
int_num = int(str_num) # 123
float_val = float(int_num) # 123.0
# تبدیل لیست به تاپل
my_list = [1, 2, 3]
my_tuple = tuple(my_list)
# تبدیل رشته به لیست کاراکترها
word = "Python"
chars = list(word) # ['P', 'y', 't', 'h', 'o', 'n']
جمعبندی
Data Type ها هسته اصلی زبان پایتون هستند. شناخت درست آنها، از جمله تفاوت بین انواع Mutable (مانند List و Dict) و Immutable (مانند String، Tuple و Number)، برای نوشتن کدی تمیز، بهینه و قابل نگهداری حیاتی است.