Table of Contents
چرا به نوع داده نیاز داریم؟
در فصل «متغیرها و انواع داده» با خودِ انواع داده مثل int، float، str و … آشنا شدهاید. در این بخش فقط روی یک سؤال تمرکز میکنیم:
چطور بفهمیم یک مقدار دقیقاً از چه نوعی است؟
پایتون برای همین کار تابعی به نام type() دارد.
تابع `type()` چیست؟
تابع type() یک تابع داخلی پایتون (built-in) است؛ یعنی بدون نصب هیچ چیز اضافهای، همیشه در دسترس است.
کارش ساده است:
- ورودی: یک مقدار، یا نام متغیر
- خروجی: نوع (کلاس) آن مقدار
الگو:
type(مقدار_یا_متغیر)مثالهای ساده:
x = 10
print(type(x)) # نوع x چیست؟
print(type(3.14)) # نوع عدد اعشاری
print(type("سلام")) # نوع رشتهخروجی چیزی شبیه این خواهد بود:
<class 'int'>
<class 'float'>
<class 'str'>این یعنی:
int→ عدد صحیحfloat→ عدد اعشاریstr→ رشته (متن)
خواندن خروجی `type()`
وقتی type() را چاپ میکنید، شکلی مثل <class 'int'> میبینید.
این را فعلاً اینطور در نظر بگیرید:
class: یعنی این یک «نوع» است (در فصل شیگرایی دقیقتر میبینیم)'int': اسم آن نوع
برای استفادهٔ روزمره در این مرحله، کافی است اسم داخل کوتیشن را بشناسید:
<class 'bool'>→ مقدار بولی (True/False)<class 'list'>→ لیست<class 'dict'>→ دیکشنری
و ...
استفاده از `type()` روی متغیرها و مقادیر مختلف
چند مثال ترکیبی:
a = 5
b = 5.0
c = "5"
d = True
print(type(a))
print(type(b))
print(type(c))
print(type(d))خروجی:
<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>
میبینید که هرچند مقدارِ ظاهری بعضیها شبیه هم است (مثل 5 و "5")، نوع آنها فرق دارد.
همین تفاوت نوع، روی رفتار آنها در عملیات مختلف تأثیر میگذارد (که در فصلهای عملیات و تبدیل نوع بیشتر لمس میکنید).
`type()` در حالت تعاملی (REPL)
اگر پایتون را در حالت تعاملی (ترمینال) اجرا کنید، میتوانید مستقیم نوع را بررسی کنید:
>>> type(42)
<class 'int'>
>>> type(3.14)
<class 'float'>
>>> type("Hello")
<class 'str'>این روش برای آزمایش سریع و فهمیدن نوع نتیجهٔ یک عبارت خیلی مفید است.
مثلاً:
>>> type(1 + 2.0)
<class 'float'>
متوجه میشوید حاصل جمع یک int و یک float خودش float میشود.
بررسی نوع نتیجهٔ عملیات
گاهی نمیدانید نتیجهٔ یک عبارت چه نوعی میشود. type() کمک میکند:
x = 10 / 2
y = 10 // 2
print(x, type(x))
print(y, type(y))خروجی:
5.0 <class 'float'>
5 <class 'int'>
با type() میبینید:
/→ نتیجه راfloatمیکند//→ نتیجه راintمیکند (اگر بخش اعشاری نداشته باشد)
`type()` با ساختارهای داده (پیشنمایش ساده)
جزئیات این ساختارها در فصل «مجموعههای داده» میآید، اینجا فقط میخواهیم ببینیم type() چطور آنها را نشان میدهد:
numbers = [1, 2, 3]
point = (10, 20)
person = {"name": "Ali", "age": 20}
unique_numbers = {1, 2, 3}
print(type(numbers))
print(type(point))
print(type(person))
print(type(unique_numbers))خروجی:
<class 'list'>
<class 'tuple'>
<class 'dict'>
<class 'set'>
فعلاً فقط اسامی نوعها (list, tuple, dict, set) را بشناسید؛ کاربردشان را بعداً یاد میگیرید.
ذخیرهکردن نتیجهٔ `type()` در متغیر
خروجی type() خودش یک مقدار است که میتوان آن را در متغیر گذاشت:
x = 10
t = type(x)
print(t) # <class 'int'>در پروژههای ساده ابتدای کار معمولاً نیازی به ذخیرهٔ نوع نیست، ولی دانستن این موضوع بد نیست.
نکته: اشتباهات رایج با `type()`
۱. فراموش کردن پرانتز
اشتباه:
x = 10
print(type x) # خطادرست:
print(type(x))۲. بستننکردن پرانتز بیرونی
اشتباه:
print(type(10) # پرانتز بسته نشده → خطای SyntaxErrorدرست:
print(type(10))۳. انتظار مقایسهٔ مستقیم بدون آگاهی
گاه مبتدیها دنبال چیزی مثل این هستند:
x = 10
print(type(x) == "int") # این کار درست نیست
چون type(x) یک رشته برنمیگرداند، بلکه یک شیء نوع است. راههای استاندارد برای مقایسه نوع (مثل isinstance) را در سطح مقدماتی معمولاً لازم ندارید و در فصلهای بعدی که مناسب است با آن آشنا میشوید. در حال حاضر تمرکز شما باید روی فهمیدن و دیدن نوع با type() باشد، نه مقایسهٔ پیچیدهٔ آن.
استفادهٔ عملی: پیدا کردن علت خطا
خیلی وقتها خطاهای عجیب فقط به خاطر «نوع اشتباه» هستند. در این مواقع:
- قبل از خطایی که میگیرید،
print(type(متغیر))اضافه کنید - ببینید نوع آن چیزی است که انتظارش را داشتید یا نه
مثال:
age = input("سن خود را وارد کنید: ")
print(type(age)) # نوع را بررسی کن
# فرض کنید اینجا میخواهید با age جمع بزنید و خطا میگیرید
خروجی type(age) به شما نشان میدهد که مقدار ورودی یک str است، نه int؛ پس باید در فصل «تبدیل ورودی به عدد» آن را تبدیل کنید.
جمعبندی
- تابع
type()نوع یک مقدار یا متغیر را برمیگرداند. - خروجیای مثل
<class 'int'>به معنی «نوع این مقدار، عدد صحیح (int) است». - میتوانید از
type()روی هر چیزی (عدد، رشته، بولی، لیست و …) استفاده کنید. type()ابزار مهمی برای:- یادگیری انواع داده
- فهمیدن نوع خروجی عملیاتها
- پیدا کردن علت بعضی خطاها است.
در ادامهٔ مسیر، هر وقت مطمئن نبودید «این الان چه نوعی است؟»، از type() کمک بگیرید.