آموزش پایتون - انواع داده

انواع داده در پایتون (Python Data Types)

انواع داده در پایتون در واقع کلاس‌ها هستند و متغیرهای تعریف‌شده، نمونه‌ها یا شیءهای این کلاس‌ها محسوب می‌شوند. از آنجا که پایتون یک زبان با تایپ‌دهی پویا (dynamically typed) است، نوع داده‌ی یک متغیر در زمان اجرا و بر اساس مقداری که به آن اختصاص داده شده تعیین می‌شود.

به طور کلی، انواع داده برای تعریف نوع یک متغیر استفاده می‌شوند. نوع داده نشان‌دهنده‌ی نوع اطلاعاتی است که قرار است در متغیر ذخیره کنیم و تعیین می‌کند چه عملیاتی را می‌توان روی آن انجام داد.

هر زبان برنامه‌نویسی طبقه‌بندی خاص خود را برای داده‌ها دارد. با این انواع داده، می‌توانیم مقادیر داده‌ای متفاوتی را ذخیره کنیم.

انواع دسته‌بندی داده‌ها در پایتون

پایتون از انواع داده‌های توکار (built-in) زیر پشتیبانی می‌کند −

  • انواع داده‌های عددی (Numeric Data Types)
    • int
    • float
    • complex
  • نوع داده‌ی رشته‌ای (String Data Types)
  • انواع داده‌های توالی (Sequence Data Types)
    • list
    • tuple
    • range
  • انواع داده‌های باینری (Binary Data Types)
    • bytes
    • bytearray
    • memoryview
  • نوع داده‌ی دیکشنری (Dictionary Data Type)
  • نوع داده‌ی مجموعه (Set Data Type)
    • set
    • frozenset
  • نوع داده‌ی بولین یا منطقی (Boolean Data Type)
  • نوع داده‌ی پوچ (None Type)

data_types

۱. انواع داده‌های عددی در پایتون

انواع داده‌های عددی در پایتون مقادیر عددی را ذخیره می‌کنند. شیءهای عددی زمانی ایجاد می‌شوند که مقداری به آن‌ها اختصاص دهید. برای مثال −

var1 = 1       # int data type
var2 = True    # bool data type
var3 = 10.023  # float data type
var4 = 10+3j   # complex data type

پایتون از چهار نوع عددی مختلف پشتیبانی می‌کند که هر کدام دارای کلاس‌های توکار در کتابخانه‌ی پایتون هستند و به ترتیب int، bool، float و complex نامیده می‌شوند −

  • int (اعداد صحیح علامت‌دار)
  • float (مقادیر حقیقی اعشاری)
  • complex (اعداد مختلط)

یک عدد مختلط از دو بخش تشکیل شده است - حقیقی (real) و موهومی (imaginary). این دو بخش با علامت '+' یا '-' از هم جدا می‌شوند. بخش موهومی با پسوند 'j' مشخص می‌شود که همان عدد موهومی است. جذر ۱- ($\mathrm{\sqrt{-1}}$) به عنوان عدد موهومی تعریف می‌شود. عدد مختلط در پایتون به صورت x+yj نمایش داده می‌شود که x بخش حقیقی و y بخش موهومی است. بنابراین، 5+6j یک عدد مختلط است.

>>> type(5+6j)
<class 'complex'>

در ادامه چند نمونه از اعداد آورده شده است −

int float complex
10 0.0 3.14j
0O777 15.20 45.j
-786 -21.9 9.322e-36j
080 32.3+e18 .876j
0x17 -90. -.6545+0J
-0x260 -32.54e100 3e+26J
0x69 70.2-E12 4.53e-7j

مثالی از انواع داده‌های عددی

در ادامه مثالی برای نمایش نحوه استفاده از اعداد صحیح، اعشاری و مختلط آورده شده است:

# integer variable.
a=100
print("The type of variable having value", a, " is ", type(a))

# float variable.
c=20.345
print("The type of variable having value", c, " is ", type(c))

# complex variable.
d=10+3j
print("The type of variable having value", d, " is ", type(d))

۲. نوع داده‌ی رشته در پایتون

رشته در پایتون توالی‌ای از یک یا چند کاراکتر یونیکد است که داخل گیومه تکی (تک کوتیشن)، دوتایی (دبل کوتیشن) یا سه‌تایی قرار می‌گیرد. رشته‌ها در پایتون غیرقابل تغییر (immutable) هستند؛ به این معنی که وقتی عملیاتی روی رشته انجام می‌دهید، همیشه یک شیء رشته‌ای جدید از همان نوع تولید می‌شود و رشته‌ی موجود تغییر نمی‌کند.

تا زمانی که همان توالی کاراکترها درون کوتیشن قرار گرفته باشد، تکی، دوتایی یا سه‌تایی بودن آن فرقی ندارد. بنابراین، نحوه‌های نمایش رشته‌ای زیر با هم برابر هستند.

>>> 'Tut24'
'Tut24'
>>> "Tut24"
'Tut24'
>>> '''Tut24'''
'Tut24'

یک رشته در پایتون، یک شیء از کلاس str است. این موضوع را می‌توان با تابع ()type بررسی کرد.

>>> type("Welcome To Tut24")
<class 'str'>

رشته یک نوع داده‌ی غیرعددی است. بدیهی است که نمی‌توانیم عملیات ریاضی روی آن انجام دهیم. با این حال، عملیاتی مانند برش‌زدن (slicing) و الحاق (concatenation) امکان‌پذیر است. کلاس str پایتون متدهای کاربردی متعددی را برای پردازش رشته تعریف می‌کند. زیرمجموعه‌هایی از رشته را می‌توان با استفاده از اپراتور برش ([ ] و [:] ) به دست آورد، به طوری که اندیس‌ها از 0 در ابتدای رشته شروع شده و تا 1- در انتهای رشته کار می‌کنند.

علامت بعلاوه (+) اپراتور الحاق رشته و علامت ستاره (*) اپراتور تکرار در پایتون است.

مثالی از نوع داده‌ی رشته

str = 'Hello World!'

print (str)          # Prints complete string
print (str[0])       # Prints first character of the string
print (str[2:5])     # Prints characters starting from 3rd to 5th
print (str[2:])      # Prints string starting from 3rd character
print (str * 2)      # Prints string two times
print (str + "TEST") # Prints concatenated string

این کد خروجی زیر را تولید می‌کند −

Hello World!
H
llo
llo World!
Hello World!Hello World!
Hello World!TEST

۳. انواع داده‌های توالی در پایتون

توالی (Sequence) یک نوع داده‌ی مجموعه‌ای است. این نوع، یک مجموعه مرتب از آیتم‌ها است. آیتم‌های موجود در توالی دارای اندیس موقعیتی هستند که از 0 شروع می‌شود. این مفهوم شبیه به آرایه در زبان C یا ++C است. سه نوع داده‌ی توالی زیر در پایتون تعریف شده‌اند:

  • نوع داده‌ی لیست (List)
  • نوع داده‌ی تاپل (Tuple)
  • نوع داده‌ی بازه (Range)

توالی‌ها در پایتون محدود و قابل پیمایش (iterable) هستند؛ هرگاه در پایتون از یک قابل پیمایش صحبت می‌کنیم، منظور یک نوع داده‌ی توالی است (برای مثال، یک لیست).

(الف) نوع داده‌ی لیست در پایتون

لیست‌ها در پایتون چندمنظوره‌ترین انواع داده‌های مرکب هستند. یک لیست پایتون شامل آیتم‌هایی است که با کاما از هم جدا شده و داخل قلاب یا کروشه ([]) قرار گرفته‌اند. تا حدی، لیست‌های پایتون مشابه آرایه‌ها در زبان C هستند. یک تفاوت بین آن‌ها این است که تمام آیتم‌های متعلق به یک لیست پایتون می‌توانند انواع داده‌های مختلفی داشته باشند، در حالی که آرایه C می‌تواند عناصری مربوط به یک نوع داده‌ی خاص را ذخیره کند.

>>> [2023, "Python", 3.11, 5+6j, 1.23E-4]

یک لیست در پایتون شیئی از کلاس list است. می‌توانیم آن را با تابع ()type بررسی کنیم.

>>> type([2023, "Python", 3.11, 5+6j, 1.23E-4])
<class 'list'>

همان‌طور که گفته شد، یک آیتم در لیست می‌تواند از هر نوع داده‌ای باشد. این یعنی یک شیء لیست خود می‌تواند آیتمی در لیست دیگر باشد. در این حالت، به یک لیست تودرتو (nested list) تبدیل می‌شود.

>>> [['One', 'Two', 'Three'], [1,2,3], [1.0, 2.0, 3.0]]

یک لیست می‌تواند حاوی آیتم‌هایی باشد که اعداد ساده، رشته‌ها، تاپل، دیکشنری، مجموعه یا شیئی از یک کلاس تعریف‌شده توسط کاربر هستند.

مقادیر ذخیره‌شده در یک لیست پایتون را می‌توان با استفاده از اپراتور برش ([ ] و [:]) دسترسی پیدا کرد؛ اندیس‌ها از 0 در ابتدای لیست شروع می‌شوند و تا 1- در انتها ادامه می‌یابند. علامت بعلاوه (+) اپراتور الحاق لیست و علامت ستاره (*) اپراتور تکرار است.

مثالی از نوع داده‌ی لیست

list = [ 'abcd', 786 , 2.23, 'john', 70.2 ]
tinylist = [123, 'john']

print (list)            # Prints complete list
print (list[0])         # Prints first element of the list
print (list[1:3])       # Prints elements starting from 2nd till 3rd 
print (list[2:])        # Prints elements starting from 3rd element
print (tinylist * 2)    # Prints list two times
print (list + tinylist) # Prints concatenated lists

این کد خروجی زیر را تولید می‌کند −

['abcd', 786, 2.23, 'john', 70.2]
abcd
[786, 2.23]
[2.23, 'john', 70.2]
[123, 'john', 123, 'john']
['abcd', 786, 2.23, 'john', 70.2, 123, 'john']

(ب) نوع داده‌ی تاپل در پایتون

تاپل در پایتون یکی دیگر از انواع داده‌های توالی است که مشابه لیست است. یک تاپل پایتون از تعدادی مقدار تشکیل شده که با کاما از هم جدا شده‌اند. با این حال برخلاف لیست‌ها، تاپل‌ها داخل پرانتز (...) قرار می‌گیرند.

تاپل نیز یک توالی است، بنابراین هر آیتم در تاپل دارای اندیسی است که به موقعیت آن در مجموعه اشاره می‌کند. اندیس از 0 شروع می‌شود.

>>> (2023, "Python", 3.11, 5+6j, 1.23E-4)

در پایتون، تاپل شیئی از کلاس tuple است. می‌توانیم آن را با تابع ()type بررسی کنیم.

>>> type((2023, "Python", 3.11, 5+6j, 1.23E-4))
<class 'tuple'>

مانند لیست، یک آیتم درون تاپل نیز می‌تواند خود یک لیست، یک تاپل دیگر یا شیئی از هر کلاس پایتون باشد.

>>> (['One', 'Two', 'Three'], 1,2.0,3, (1.0, 2.0, 3.0))

برای تشکیل یک تاپل، استفاده از پرانتز اختیاری است. آیتم‌های داده که با کاما و بدون هیچ علامت محصورکننده‌ای جدا شده باشند، به صورت پیش‌فرض به عنوان تاپل در نظر گرفته می‌شوند.

>>> 2023, "Python", 3.11, 5+6j, 1.23E-4
(2023, 'Python', 3.11, (5+6j), 0.000123)

مثالی از نوع داده‌ی تاپل

tuple = ( 'abcd', 786 , 2.23, 'john', 70.2  )
tinytuple = (123, 'john')

print (tuple)               # Prints the complete tuple
print (tuple[0])            # Prints first element of the tuple
print (tuple[1:3])          # Prints elements of the tuple starting from 2nd till 3rd 
print (tuple[2:])           # Prints elements of the tuple starting from 3rd element
print (tinytuple * 2)       # Prints the contents of the tuple twice
print (tuple + tinytuple)   # Prints concatenated tuples

این کد خروجی زیر را تولید می‌کند −

('abcd', 786, 2.23, 'john', 70.2)
abcd
(786, 2.23)
(2.23, 'john', 70.2)
(123, 'john', 123, 'john')
('abcd', 786, 2.23, 'john', 70.2, 123, 'john')

تفاوت‌های اصلی بین لیست‌ها و تاپل‌ها عبارتند از: لیست‌ها درون کروشه ([ ]) قرار می‌گیرند و عناصر و اندازه آن‌ها قابل تغییر است (یعنی تغییرپذیر یا mutable هستند)، در حالی که تاپل‌ها درون پرانتز ( ( ) ) قرار می‌گیرند و قابل به‌روزرسانی نیستند (تغییرناپذیر یا immutable). تاپل‌ها را می‌توان به عنوان لیست‌های فقط‌خواندنی (read-only) در نظر گرفت.

کد زیر برای تاپل نامعتبر است، زیرا سعی کرده‌ایم یک تاپل را به‌روزرسانی کنیم که این کار مجاز نیست. اما حالت مشابه برای لیست‌ها امکان‌پذیر است −

tuple = ( 'abcd', 786 , 2.23, 'john', 70.2  )
list = [ 'abcd', 786 , 2.23, 'john', 70.2  ]
tuple[2] = 1000    # Invalid syntax with tuple
list[2] = 1000     # Valid syntax with list

(ج) نوع داده‌ی بازه (Range) در پایتون

بازه در پایتون یک توالی تغییرناپذیر از اعداد است که معمولاً برای پیمایش روی تعداد مشخصی از آیتم‌ها استفاده می‌شود.

این نوع داده توسط کلاس Range نمایش داده می‌شود. سازنده‌ی این کلاس توالی‌ای از اعداد را می‌پذیرد که از 0 شروع می‌شود و تا رسیدن به یک عدد مشخص، 1 واحد 1 واحد افزایش می‌یابد. در ادامه ساختار این تابع آورده شده است −

range(start, stop, step)

توضیحات پارامترهای استفاده‌شده به شرح زیر است −

  • start: عدد صحیح برای تعیین موقعیت شروع (اختیاری، مقدار پیش‌فرض: 0)

  • stop: عدد صحیح برای تعیین موقعیت پایان (اجباری)

  • step: عدد صحیح برای تعیین گام افزایش (اختیاری، مقدار پیش‌فرض: 1)

مثالی از نوع داده‌ی Range

در ادامه برنامه‌ای آورده شده که از حلقه for برای چاپ اعداد از 0 تا 4 استفاده می‌کند −

for i in range(5):
  print(i)

این کد خروجی زیر را تولید می‌کند −

0
1
2
3
4

حال برنامه بالا را تغییر می‌دهیم تا اعداد به جای 0 از 2 شروع به چاپ کنند −

for i in range(2, 5):
  print(i)

این کد خروجی زیر را تولید می‌کند −

2
3
4

مجدداً برنامه را تغییر می‌دهیم تا چاپ اعداد از 1 شروع شود اما با گام افزایش 2 به جای 1 همراه باشد:

for i in range(1, 5, 2):
  print(i)

این کد خروجی زیر را تولید می‌کند −

1
3

۴. انواع داده‌های باینری در پایتون

نوع داده‌ی باینری در پایتون روشی برای نمایش داده‌ها به صورت سلسله‌ای از ارقام باینری (۰ و ۱) است. این مانند یک زبان ویژه است که کامپیوترها برای ذخیره و پردازش بهینه‌ی اطلاعات از آن استفاده می‌کنند.

این نوع داده معمولاً هنگام کار با مواردی مثل فایل‌ها، تصاویر یا هر چیزی که بتوان با دو مقدار ممکن نمایش داد استفاده می‌شود. بنابراین، به جای استفاده از اعداد یا حروف معمولی، انواع داده‌های توالی باینری از ترکیبی از ۰ها و ۱ها برای نمایش اطلاعات استفاده می‌کنند.

پایتون سه روش مختلف برای نمایش داده‌های باینری ارائه می‌دهد که به شرح زیر است −

  • bytes
  • bytearray
  • memoryview

بگذارید هر یک از این انواع داده را به صورت جداگانه بررسی کنیم −

(الف) نوع داده‌ی Bytes در پایتون

نوع داده‌ی byte در پایتون نشان‌دهنده‌ی توالی‌ای از بایت‌ها است. هر بایت یک مقدار صحیح بین 0 تا 255 است. این نوع داده معمولاً برای ذخیره داده‌های باینری مانند تصاویر، فایل‌ها یا پکت‌های شبکه استفاده می‌شود.

می‌توانیم بایت‌ها را در پایتون با استفاده از ()bytes توکار یا با اضافه کردن پیشوند b به توالی‌ای از اعداد ایجاد کنیم.

مثالی از نوع داده‌ی Bytes

در مثال زیر، از تابع توکار ()bytes برای تعیین صریح توالی‌ای از اعداد که نشان‌دهنده مقادیر ASCII هستند استفاده می‌کنیم −

# Using bytes() function to create bytes
b1 = bytes([65, 66, 67, 68, 69])  
print(b1)  

نتیجه‌ی به دست آمده به صورت زیر است −

b'ABCDE'

در اینجا، از پیشوند "b" قبل از یک رشته استفاده می‌کنیم تا به طور خودکار یک شیء bytes ایجاد کنیم −

# Using prefix 'b' to create bytes
b2 = b'Hello'  
print(b2)  

خروجی کد بالا به صورت زیر است −

b'Hello'

(ب) نوع داده‌ی Bytearray در پایتون

نوع داده‌ی bytearray در پایتون کاملاً مشابه نوع داده‌ی bytes است، اما با یک تفاوت کلیدی: این نوع تغییرپذیر (mutable) است، به این معنی که می‌توانید مقادیر ذخیره‌شده در آن را پس از ایجاد تغییر دهید.

شما می‌توانید با استفاده از روش‌های مختلف یک bytearray ایجاد کنید، از جمله با پاس دادن یک قابل پیمایش از اعداد صحیح (نشان‌دهنده مقادیر بایت)، کدگذاری یک رشته، یا تبدیل یک شیء موجود از نوع bytes یا bytearray. برای این کار، از ()bytearray استفاده می‌کنیم.

مثالی از نوع داده‌ی Bytearray

در مثال زیر، با پاس دادن یک قابل پیمایش از اعداد صحیح که مقادیر بایت را نشان می‌دهند، یک bytearray ایجاد می‌کنیم −

# Creating a bytearray from an iterable of integers
value = bytearray([72, 101, 108, 108, 111])  
print(value)  

خروجی به دست آمده همان‌طور که در زیر نشان داده شده است می‌باشد −

bytearray(b'Hello')

اکنون با انکود کردن یک رشته با استفاده از کدگذاری "UTF-8"، یک bytearray می‌سازیم −

# Creating a bytearray by encoding a string
val = bytearray("Hello", 'utf-8')  
print(val)  

نتیجه‌ی تولید شده به صورت زیر است −

bytearray(b'Hello')

(ج) نوع داده‌ی Memoryview در پایتون

در پایتون، memoryview یک شیء توکار است که نمایی از حافظه‌ی شیء اصلی را ارائه می‌دهد؛ عموماً شیءهایی که از پروتکل بافر پشتیبانی می‌کنند، مانند آرایه‌های بایتی (bytearray) و بایت‌ها (bytes). این قابلیت به شما امکان می‌دهد بدون کپی کردن داده‌های شیء اصلی، به آن‌ها دسترسی داشته باشید که دسترسی به حافظه را برای مجموعه‌داده‌های بزرگ بهینه می‌کند.

شما می‌توانید با روش‌های مختلفی یک memoryview ایجاد کنید. این روش‌ها شامل استفاده از سازنده‌ی ()memoryview، برش‌زدن بایت‌ها یا اشیاء bytearray، استخراج از اشیاء آرایه، یا استفاده از توابع توکار مانند ()open هنگام خواندن از فایل‌ها است.

مثالی از نوع داده‌ی Memoryview

در مثال داده‌شده، با ارسال یک شیء پشتیبانی‌شده به سازنده‌ی ()memoryview، مستقیماً یک شیء memoryview می‌سازیم. اشیاء پشتیبانی‌شده عموماً شامل آرایه‌های بایتی (bytearray)، بایت‌ها (bytes) و سایر اشیائی هستند که از پروتکل بافر پشتیبانی می‌کنند −

data = bytearray(b'Hello, world!')
view = memoryview(data)
print(view)

خروجی کد بالا به صورت زیر است −

<memory at 0x00000186FFAA3580>

اگر یک شیء آرایه (array) دارید، می‌توانید با استفاده از رابط بافر، یک memoryview ایجاد کنید، همان‌طور که در زیر نشان داده شده است −

import array
arr = array.array('i', [1, 2, 3, 4, 5])
view = memoryview(arr)
print(view)

خروجی به دست آمده همان‌طور که در زیر نشان داده شده است می‌باشد −

<memory at 0x0000017963CD3580>

همچنین می‌توانید با برش‌زدن یک شیء bytes یا bytearray یک memoryview ایجاد کنید −

data = b'Hello, world!'
# Creating a view of the last part of the data
view = memoryview(data[7:])  
print(view)

نتیجه‌ی به دست آمده به صورت زیر است −

<memory at 0x00000200D9AA3580>

۵. نوع داده‌ی دیکشنری در پایتون

دیکشنری‌های پایتون نوعی جداول هش (hash table) هستند. کلید دیکشنری می‌تواند تقریباً از هر نوع داده‌ای در پایتون باشد، اما معمولاً اعداد یا رشته‌ها هستند. از طرف دیگر، مقادیر می‌توانند هر شیء دلخواهی در پایتون باشند.

دیکشنری در پایتون مانند آرایه‌های متناظر (associative arrays) یا هش‌های موجود در Perl است و از جفت‌های key:value (کلید:مقدار) تشکیل شده است. جفت‌ها با کاما از هم جدا شده و داخل آکولاد {} قرار می‌گیرند. برای برقراری نگاشت بین کلید و مقدار، علامت نقطه‌ویرگول ':' بین آن دو قرار می‌گیرد.

>>> {1:'one', 2:'two', 3:'three'}

در پایتون، دیکشنری شیئی از کلاس توکار dict است. می‌توانیم آن را با تابع ()type بررسی کنیم.

>>> type({1:'one', 2:'two', 3:'three'})
<class 'dict'>

دیکشنری‌ها درون آکولاد ({ }) قرار می‌گیرند و مقادیر را می‌توان با استفاده از کروشه ([]) مقداردهی کرد یا به آن‌ها دسترسی یافت.

مثالی از نوع داده‌ی دیکشنری

dict = {}
dict['one'] = "This is one"
dict[2]     = "This is two"

tinydict = {'name': 'john','code':6734, 'dept': 'sales'}


print (dict['one'])       # Prints value for 'one' key
print (dict[2])           # Prints value for 2 key
print (tinydict)          # Prints complete dictionary
print (tinydict.keys())   # Prints all the keys
print (tinydict.values()) # Prints all the values

این کد خروجی زیر را تولید می‌کند −

This is one
This is two
{'dept': 'sales', 'code': 6734, 'name': 'john'}
['dept', 'code', 'name']
['sales', 6734, 'john']

دیکشنری پایتون یک توالی نیست. این داده مجموعه‌ای از آیتم‌هاست اما هر آیتم (جفت key:value) مانند رشته، لیست یا تاپل با اندیس موقعیتی شناسایی نمی‌شود. بنابراین، عملیات برش‌زدن روی دیکشنری قابل انجام نیست. دیکشنری یک شیء تغییرپذیر است، بنابراین انجام عملیات افزودن، ویرایش یا حذف با قابلیت‌های مربوطه تعریف‌شده در کلاس dict امکان‌پذیر است. این عملیات در فصل‌های بعدی توضیح داده خواهند شد.

۶. نوع داده‌ی مجموعه (Set) در پایتون

مجموعه (Set) پیاده‌سازی مفهوم مجموعه در ریاضیات برای زبان پایتون است. یک مجموعه در پایتون یک کالکشن است، اما مانند رشته، لیست یا تاپل، یک مجموعه اندیس‌گذاری‌شده یا مرتب نیست. یک شیء نمی‌تواند بیش از یک بار در مجموعه ظاهر شود، در حالی که در لیست و تاپل، یک شیء یکسان می‌تواند چندین بار تکرار شود.

آیتم‌هایی که با کاما از هم جدا شده‌اند در مجموعه، داخل آکولاد {} قرار می‌گیرند. آیتم‌های موجود در مجموعه‌ها می‌توانند از انواع داده‌های متفاوتی باشند.

>>> {2023, "Python", 3.11, 5+6j, 1.23E-4}
{(5+6j), 3.11, 0.000123, 'Python', 2023}

توجه داشته باشید که آیتم‌های موجود در مجموعه ممکن است از همان ترتیبی که وارد شده‌اند پیروی نکنند. موقعیت آیتم‌ها توسط پایتون بهینه‌سازی می‌شود تا عملیات روی مجموعه همان‌طور که در ریاضیات تعریف شده انجام گیرد.

مجموعه در پایتون شیئی از کلاس توکار set است، همان‌طور که می‌توان با تابع ()type آن را بررسی کرد.

>>> type({2023, "Python", 3.11, 5+6j, 1.23E-4})
<class 'set'>

یک مجموعه فقط می‌تواند اشیاء تغییرناپذیر (immutable) مانند عدد (int, float, complex یا bool)، رشته یا تاپل را ذخیره کند. اگر سعی کنید یک لیست یا دیکشنری را در مجموعه قرار دهید، پایتون خطای TypeError رخ می‌دهد.

>>> {['One', 'Two', 'Three'], 1,2,3, (1.0, 2.0, 3.0)}
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

هشینگ (Hashing) مکانیزمی در علوم کامپیوتر است که جستجوی سریع‌تر اشیاء را در حافظه کامپیوتر امکان‌پذیر می‌سازد. فقط اشیاء تغییرناپذیر قابل هش شدن هستند.

حتی اگر یک مجموعه اجازه ذخیره آیتم‌های تغییرپذیر را ندهد، خود مجموعه تغییرپذیر است. از این رو، عملیات افزودن/حذف/به‌روزرسانی روی شیء مجموعه با استفاده از متدهای موجود در کلاس توکار set مجاز است. پایتون همچنین مجموعه ای از اپراتورها را برای انجام عملیات روی مجموعه‌ها دارد. متدها و اپراتورها در فصل‌های بعدی توضیح داده شده‌اند.

مثالی از مجموعه

set1 = {123, 452, 5, 6}
set2 = {'Java', 'Python', 'JavaScript'}

print(set1)
print(set2)

این کد خروجی زیر را ایجاد می‌کند −

{123, 452, 5, 6}
{'Python', 'JavaScript', 'Java'}

۷. نوع داده‌ی بولین (Boolean) در پایتون

نوع بولین در پایتون یکی از انواع داده‌های توکار است که یکی از دو مقدار True (درست) یا False (نادرست) را نشان می‌دهد. تابع ()bool در پایتون به شما امکان می‌دهد مقدار هر عبارت را ارزیابی کرده و بر اساس آن عبارت، True یا False برگردانید.

یک عدد بولین تنها دو مقدار ممکن دارد که توسط کلمات کلیدی True و False نمایش داده می‌شوند. این مقادیر به ترتیب معادل اعداد صحيح 1 و 0 هستند.

>>> type (True)
<class 'bool'>
>>> type(False)
<class 'bool'>

مثالی از نوع داده‌ی بولین

در ادامه برنامه‌ای آورده شده که مقدار متغیرهای بولین a و b را چاپ می‌کند −

a = True
# display the value of a
print(a)

# display the data type of a
print(type(a))

این کد خروجی زیر را تولید می‌کند −

true
<class 'bool'>

برنامه‌ی دیگری در ادامه آمده است که عبارات را ارزیابی کرده و مقادیر بازگشتی را چاپ می‌کند −

# Returns false as a is not equal to b
a = 2
b = 4
print(bool(a==b))

# Following also prints the same
print(a==b)

# Returns False as a is None
a = None
print(bool(a))

# Returns false as a is an empty sequence
a = ()
print(bool(a))

# Returns false as a is 0
a = 0.0
print(bool(a))

# Returns false as a is 10
a = 10
print(bool(a))

این کد خروجی زیر را تولید می‌کند −

False
False
False
False
False
True

۸. نوع None در پایتون

نوع None در پایتون با "NoneType" نمایش داده می‌شود. این نوع داده خود یک شیء مستقل است. NoneType نشان‌دهنده‌ی مقادیر پوچ یا عدم وجود یک مقدار است.

مثالی از نوع None

در مثال زیر، مقدار None را به متغیر x اختصاص می‌دهیم و نوع آن را چاپ می‌کنیم که برابر با NoneType خواهد بود −

# Declaring a variable
# And, assigning a Null value (None)

x = None

# Printing its value and type
print("x = ", x)
print("type of x = ", type(x))

این کد خروجی زیر را تولید می‌کند −

x =  None
type of x =  <class 'NoneType'>

دریافت نوع داده (Getting Data Type)

برای دریافت نوع داده‌ها در پایتون، می‌توانید از تابع ()type استفاده کنید. تابع ()type یک تابع توکار است که کلاس شیء داده‌شده را برمی‌گرداند.

مثال

در مثال زیر، نوع مقادیر و متغیرها را به دست می‌آوریم −

# Getting type of values
print(type(123))
print(type(9.99))

# Getting type of variables
a = 10
b = 2.12
c = "Hello"
d = (10, 20, 30)
e = [10, 20, 30]

print(type(a))
print(type(b))
print(type(c))
print(type(d))
print(type(e))

این کد خروجی زیر را تولید می‌کند −

<class 'int'>
<class 'float'>
<class 'int'>
<class 'float'>
<class 'str'>
<class 'tuple'>
<class 'list'>

تنظیم نوع داده (Setting Data Type)

در پایتون، هنگام تعریف متغیر یا شیء، نیازی به تعیین نوع داده ندارید. نوع داده به طور خودکار بر اساس مقدار تخصیص‌یافته تنظیم می‌شود.

مثال

مثال زیر نحوه تنظیم نوع داده‌ی یک متغیر را بر اساس مقدار داده‌شده نشان می‌دهد −

# Declaring a variable
# And, assigning an integer value

x = 10

# Printing its value and type
print("x = ", x)
print("type of x = ", type(x))

# Now, assigning string value to
# the same variable
x = "Hello World!"

# Printing its value and type
print("x = ", x)
print("type of x = ", type(x))

این کد خروجی زیر را تولید می‌کند −

x =  10
type of x =  <class 'int'>
x =  Hello World!
type of x =  <class 'str'>

انواع داده‌های اولیه و غیراولیه (Primitive and Non-primitive)

انواع داده‌های توضیح داده شده در بالا را می‌توان به دو دسته اولیه (Primitive) و غیراولیه (Non-primitive) نیز تقسیم کرد.

۱. انواع اولیه (Primitive Types)

انواع داده‌های اولیه، انواع داده‌های بنیادی هستند که برای ساخت انواع داده‌های پیچیده (که گاهی ساختارهای داده‌ی پیچیده نامیده می‌شوند) استفاده می‌شوند. عمدتاً چهار نوع داده‌ی اولیه وجود دارد که عبارتند از −

  • اعداد صحیح (Integers)
  • اعداد اعشاری (Floats)
  • بولین‌ها (Booleans)، و
  • رشته‌ها (Strings)

۲. انواع غیراولیه (Non-primitive Types)

انواع داده‌های غیراولیه مقادیر یا مجموعه‌ای از مقادیر را ذخیره می‌کنند. عمدتاً چهار نوع داده‌ی غیراولیه وجود دارد که عبارتند از −

  • لیست‌ها (Lists)
  • تاپل‌ها (Tuples)
  • دیکشنری‌ها (Dictionaries)، و
  • مجموعه‌ها (Sets)

تبدیل انواع داده در پایتون (Python Data Type Conversion)

گاهی اوقات ممکن است نیاز به انجام تبدیل بین انواع داده‌های توکار داشته باشید. برای تبدیل داده‌ها بین انواع داده‌های مختلف پایتون، به ببسادگی از نام نوع داده به عنوان یک تابع استفاده می‌کنید.

بخوانید: تبدیل نوع داده در پایتون (Type Casting)

مثال

در ادامه مثالی آورده شده که مقادیر مختلف را به ترتیب به مقادیر صحیح، اعشاری و رشته‌ای تبدیل می‌کند −

print("Conversion to integer data type")
a = int(1)     # a will be 1
b = int(2.2)   # b will be 2
c = int("3.3")   # c will be 3

print (a)
print (b)
print (c)

print("Conversion to floating point number")
a = float(1)     # a will be 1.0
b = float(2.2)   # b will be 2.2
c = float("3.3") # c will be 3.3

print (a)
print (b)
print (c)

print("Conversion to string")
a = str(1)     # a will be "1" 
b = str(2.2)   # b will be "2.2"
c = str("3.3") # c will be "3.3"

print (a)
print (b)
print (c)

این کد خروجی زیر را تولید می‌کند −

Conversion to integer data type
1
2
3
Conversion to floating point number
1.0
2.2
3.3
Conversion to string
1
2.2
3.3

توابع تبدیل انواع داده

چندین تابع توکار برای انجام تبدیل از یک نوع داده به نوع دیگر وجود دارد. این توابع شیء جدیدی را که نشان‌دهنده مقدار تبدیل‌شده است برمی‌گردانند.

شماره تابع و توضیحات
1 تابع ()int در پایتون

مقدار x را به یک عدد صحیح تبدیل می‌کند. در صورتی که x یک رشته باشد، base مبنا را مشخص می‌کند.

2 تابع ()long در پایتون

مقدار x را به یک عدد صحيح بزرگ (long integer) تبدیل می‌کند. در صورتی که x یک رشته باشد، base مبنا را مشخص می‌کند. این تابع منسوخ شده است.

3 تابع ()float در پایتون

مقدار x را به یک عدد اعشاری تبدیل می‌کند.

4 تابع ()complex در پایتون

یک عدد مختلط ایجاد می‌کند.

5 تابع ()str در پایتون

شیء x را به یک نمایش رشته‌ای تبدیل می‌کند.

6 تابع ()repr در پایتون

شیء x را به یک رشته عبارتی (expression string) تبدیل می‌کند.

7 تابع ()eval در پایتون

یک رشته را ارزیابی کرده و یک شیء برمی‌گرداند.

8 تابع ()tuple در پایتون

توالی s را به یک تاپل تبدیل می‌کند.

9 تابع ()list در پایتون

توالی s را به یک لیست تبدیل می‌کند.

10 تابع ()set در پایتون

توالی s را به یک مجموعه تبدیل می‌کند.

11 تابع ()dict در پایتون

یک دیکشنری ایجاد می‌کند. d باید توالی‌ای از تاپل‌های (key,value) باشد.

12 تابع ()frozenset در پایتون

توالی s را به یک مجموعه منجمد (غیرقابل تغییر) تبدیل می‌کند.

13 تابع ()chr در پایتون

یک عدد صحیح را به کاراکتر معادل آن تبدیل می‌کند.

14 تابع ()unichr در پایتون

یک عدد صحیح را به یک کاراکتر یونیکد تبدیل می‌کند.

15 تابع ()ord در پایتون

یک تک کاراکتر را به مقدار عددی صحیح آن تبدیل می‌کند.

16 تابع ()hex در پایتون

یک عدد صحیح را به یک رشته ۱۶-تایی (hexadecimal) تبدیل می‌کند.

17 تابع ()oct در پایتون

یک عدد صحیح را به یک رشته ۸-تایی (octal) تبدیل می‌کند.

پیشرفت مطالعه: وضعیت خوانده‌شدن این درس فقط در همین مرورگر ذخیره می‌شود؛ بدون نیاز به حساب کاربری.