تاپل(tuple) در پایتون

May 2022


 #  تاپل پایتون چیست؟

پایتون نوع دیگری را ارائه می دهد که مجموعه ای مرتب شده از اشیاء است که تاپل نامیده می شود. تاپل ها از همه جهات با لیست ها یکسان هستند، به جز ویژگی های زیر:

 

در اینجا یک مثال کوتاه وجود دارد که تعریف تاپل، ایندکس و برش را نشان می دهد:

>>> t = ('foo', 'bar', 'baz', 'qux', 'quux', 'corge')
>>> t
('foo', 'bar', 'baz', 'qux', 'quux', 'corge')

>>> t[0]
'foo'
>>> t[-1]
'corge'
>>> t[1::2]
('bar', 'qux', 'corge')

 

حتی اگر تاپل ها با استفاده از پرانتز تعریف می شوند، شما هنوز هم مانند رشته ها و لیست ها، تاپل ها را با استفاده از براکت ها ایندکس و برش می دهید. مکانیسم تغییر برعکس رشته و لیست برای تاپل ها نیز کار می کند:

>>> t[::-1]
('corge', 'quux', 'qux', 'baz', 'bar', 'foo')

 

همه چیزهایی که در مورد لیست ها یاد گرفته اید - آنها مرتب شده اند، می توانند حاوی اشیاء دلخواه باشند، می توانند فهرست بندی و تکه تکه شوند، می توانند تودرتو شوند - در مورد تاپل ها نیز صادق است. اما آنها را نمی توان اصلاح کرد:

>>> t = ('foo', 'bar', 'baz', 'qux', 'quux', 'corge')
>>> t[2] = 'Bark!'
Traceback (most recent call last):
  File "<pyshell#65>", line 1, in <module>
    t[2] = 'Bark!'
TypeError: 'tuple' object does not support item assignment

 

چرا به جای لیست از تاپل استفاده کنیم؟

 

 

در یک REPL پایتون، می توانید مقادیر چندین شی را به طور همزمان با وارد کردن مستقیم آنها در اعلان >>>، که با کاما از هم جدا شده اند، نمایش دهید:

>>> a = 'foo'
>>> b = 42
>>> a, 3.14159, b
('foo', 3.14159, 42)

 

پایتون پاسخ را در پرانتز نمایش می دهد زیرا به طور ضمنی ورودی را به صورت یک تاپل تفسیر می کند.

 

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

>>> t = ()
>>> type(t)
<class 'tuple'>

 

>>> t = (1, 2)
>>> type(t)
<class 'tuple'>
>>> t = (1, 2, 3, 4, 5)
>>> type(t)
<class 'tuple'>

 

اما چه اتفاقی می‌افتد وقتی می‌خواهید یک تاپل را با یک آیتم تعریف کنید:

>>> t = (2)
>>> type(t)
<class 'int'>

 

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

>>> t = (2,)
>>> type(t)
<class 'tuple'>
>>> t[0]
2
>>> t[-1]
2

 

احتمالاً نیازی به تعریف یک تاپل تک قلو ندارید، اما باید راهی وجود داشته باشد.

 

وقتی یک تاپل تک تنی را نمایش می دهید، پایتون کاما را اضافه می کند تا به شما یادآوری کند که تاپل است:

>>> print(t)
(2,)

 

 

همانطور که قبلاً در بالا مشاهده کردید، یک تاپل حاوی چندین آیتم را می توان به یک شی اختصاص داد:

>>> t = ('foo', 'bar', 'baz', 'qux')

 

وقتی این اتفاق می‌افتد، به این صورت است که اقلام موجود در تاپل در شیء «بسته‌بندی» شده‌اند:

تاپل در پایتون چگونه کار میکند

>>> t
('foo', 'bar', 'baz', 'qux')
>>> t[0]
'foo'
>>> t[-1]
'qux'

 

اگر آن شی «بسته‌بندی شده» متعاقباً به یک تاپل جدید اختصاص داده شود، آیتم‌های جداگانه در اشیای تاپل «بازگشایی» می‌شوند:

تاپل در پایتون چیست

>>> (s1, s2, s3, s4) = t
>>> s1
'foo'
>>> s2
'bar'
>>> s3
'baz'
>>> s4
'qux'

 

هنگام باز کردن بسته بندی، تعداد متغیرهای سمت چپ باید با تعداد مقادیر موجود در تاپل مطابقت داشته باشد:

>>> (s1, s2, s3) = t
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    (s1, s2, s3) = t
ValueError: too many values to unpack (expected 3)

>>> (s1, s2, s3, s4, s5) = t
Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    (s1, s2, s3, s4, s5) = t
ValueError: not enough values to unpack (expected 5, got 4)

 

بسته بندی و باز کردن بسته بندی را می توان در یک عبارت ترکیب کرد تا یک تخصیص ترکیبی ایجاد شود:

>>> (s1, s2, s3, s4) = ('foo', 'bar', 'baz', 'qux')
>>> s1
'foo'
>>> s2
'bar'
>>> s3
'baz'
>>> s4
'qux'

 

مجدداً، تعداد عناصر موجود در تاپل در سمت چپ تخصیص باید با عدد سمت راست برابر باشد:

>>> (s1, s2, s3, s4, s5) = ('foo', 'bar', 'baz', 'qux')
Traceback (most recent call last):
  File "<pyshell#63>", line 1, in <module>
    (s1, s2, s3, s4, s5) = ('foo', 'bar', 'baz', 'qux')
ValueError: not enough values to unpack (expected 5, got 4)

 

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

>>> t = 1, 2, 3
>>> t
(1, 2, 3)

>>> x1, x2, x3 = t
>>> x1, x2, x3
(1, 2, 3)

>>> x1, x2, x3 = 4, 5, 6
>>> x1, x2, x3
(4, 5, 6)

>>> t = 2,
>>> t
(2,)

 

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

 

تخصیص تاپل اجازه می دهد تا کمی عجیب از Python اصطلاحی را ارائه دهید. اغلب هنگام برنامه نویسی، دو متغیر دارید که باید مقادیر آنها را عوض کنید. در اکثر زبان های برنامه نویسی، لازم است یکی از مقادیر در یک متغیر موقت ذخیره شود، در حالی که swap به صورت زیر انجام می شود:

>>> a = 'foo'
>>> b = 'bar'
>>> a, b
('foo', 'bar')

>>># We need to define a temp variable to accomplish the swap.
>>> temp = a
>>> a = b
>>> b = temp

>>> a, b
('bar', 'foo')

 

در پایتون، مبادله را می توان با یک انتساب تاپل انجام داد:

>>> a = 'foo'
>>> b = 'bar'
>>> a, b
('foo', 'bar')

>>># Magic time!
>>> a, b = b, a

>>> a, b
('bar', 'foo')

 

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


5:47:36


0

Intro

10:38

رایگان

1

Variable

12:30

رایگان

2

String

19:22

رایگان

3

List

8:46

رایگان

4

While

9:6

رایگان

5

If

8:37

رایگان

6

For

6:12

رایگان

7

range

4:17

رایگان

8

break, continue, pass

9:15

رایگان

9

Function

12:32

رایگان

10

List methods

12:11

رایگان

11

Tuple

8:29

رایگان

12

Set

7:47

رایگان

13

Dictionary

9:19

رایگان

14

Module

10:40

رایگان

15

fstring

5:35

رایگان

16

format

7:34

رایگان

17

File

17:14

رایگان

18

Scope

6:25

رایگان

19

OOP

12:15

رایگان

20

Method

20:19

رایگان

21

class/instance variable

14:7

رایگان

22

class/static method

13:25

رایگان

23

Inheritance

17:6

رایگان

24

Special methods

9:50

رایگان

25

Access points

11:12

رایگان

26

property

6:54

رایگان

27

Exceptions

21:17

رایگان

28

Standard library

12:51

رایگان

29

Docstring

10:49

رایگان

30

Virtualenv

11:2

رایگان


دوره‌های پیشنهادی

دوره اول آموزش جنگو(django)

دوره اول آموزش جنگو(django)

دوره آموزش GraphQL در پایتون

دوره آموزش GraphQL در پایتون

دوره آموزش Celery

دوره آموزش Celery

ارسال نظر

تلاش میکنم سوالات شما را در کمتر از یک روز پاسخ بدم

مری

September 2021

سایتتون بسیار عالیه و آموزشاتون خیلی روونه . واقعا ازتون ممنونم و خسته نباشید .
میخواستم بدونم شما نقشه ی راهی برای پیش برد اموزش ها ندارید ؟ و اینکه پیشنهادتون برای پروژه ی تمرینی چیه ؟ (اگر بخوایم یکم فراتر از حدس اعداد و سنگ کاغذ قیچی و... که همه جا معرفی میکنن ،تمرین کنیم )

ارسال نظر


امیرحسین بیگدلو

September 2021

سلام
برای دوره های پایتون مونگارد میتونید مقاله زیر رو بخونید:
https://www.mongard.ir/articles/51/python-advanced-courses/
اگر هم میخواید پروژه بزنید میتونید دوره‌‌های پروژه محور پایتون رو ببینید.
مثلا در دوره سوم پروژه محور پایتون پکیج more_itertools رو داریم مینویسیم.