تاپلها
در این درس تاپل میسازید و باز میکنید، دلیل تغییرناپذیری آن را میفهمید و تصمیم میگیرید کجا تاپل و کجا لیست به کار میآید.
آنچه در این درس میآموزید
- تاپل بسازید و با اندیس به عضوهای آن دسترسی پیدا کنید
- توضیح دهید تغییرناپذیری تاپل چه سودی دارد
- عضوهای تاپل را با unpacking در چند متغیر پخش کنید
فهرست مطالب
در درس قبل با لیست آشنا شدید: دنبالهای مرتب که هر لحظه میتوانید محتوایش را عوض کنید. تاپل (Tuple) همان دنبالهٔ مرتب است با یک تفاوت کلیدی: بعد از ساخت، دیگر تغییر نمیکند. این محدودیت عیب نیست؛ ابزاری است برای اعلام «این داده ساختار ثابتی دارد و نباید دستخورده شود».
در این درس تاپل میسازید، تفاوتش را با لیست میسنجید و با باز کردن تاپل (Unpacking) چند مقدار را یکجا به چند متغیر میدهید.
ساخت تاپل و دسترسی به عضوها
تاپل با پرانتز ساخته میشود؛ اما خواندن عضوها با اندیس و تابع len() دقیقاً مثل لیست است:
point = (3, 4)
print(point[0])
print(point[-1])
print(len(point))3 4 2
اندیس صفر اولین عضو است و اندیس منفی از انتها میشمارد؛ همهٔ قواعد درس لیست اینجا هم برقرار است.
تغییرناپذیری
اولین تلاش برای تغییر یک تاپل با خطا روبهرو میشود:
point = (3, 4)
point[0] = 10TypeError: 'tuple' object does not support item assignment
پایتون اجازه نمیدهد عضوی از تاپل جایگزین، اضافه یا حذف شود. این سختگیری سه سود عملی دارد:
- اطمینان: مختصات نقطه یا سال تولد در میانهٔ برنامه تصادفی عوض نمیشود.
- کلید دیکشنری: تاپل میتواند کلید دیکشنری باشد؛ لیست نمیتواند (در درس دیکشنری میبینید چرا).
- سبکی: تاپل از لیست همارزشش کمی کممصرفتر است.
ویرگول میسازد، نه پرانتز
:::
باز کردن تاپل
در درس متغیرها جابهجایی x, y = y, x را دیدید؛ اکنون رازش روشن میشود: سمت راست یک تاپل بود. میتوانید عضوهای هر تاپلی را در یک سطر بین چند متغیر پخش کنید:
x, y = (3, 4)
print(x + y)
def min_max(numbers):
return (min(numbers), max(numbers))
low, high = min_max([4, 1, 9, 2])
print(low, high)7 1 9
تابع min_max دو نتیجه را یکجا برمیگرداند؛ در واقع یک تاپل دوعضوی. فراخوانکننده با یک سطر unpacking آن را به دو متغیرِ معنادار میشکند. هرگاه تابعی باید بیش از یک نتیجه بدهد، این الگو راهحل استاندارد پایتون است.
تاپل یا لیست؟
قاعدهٔ ساده: دادهای که تعداد و جایگاه عضوهایش ثابت است تاپل میگیرد (مختصات، رنگ، رکورد نام و سن)؛ مجموعهای که طولش در جریان برنامه عوض میشود یا همهٔ اعضایش همنوعاند، لیست.
| ویژگی | لیست | تاپل |
|---|---|---|
| تغییر محتوا بعد از ساخت | مجاز | ممنوع |
| نماد ساخت | کروشه | پرانتز |
| کاربرد نمونه | سبد خرید | مختصات نقطه |
| کلید دیکشنری | نامجاز | مجاز |
تبدیل بین دو دنیا هم با توابع آماده انجام میشود:
items = ["book", "pencil"]
fixed = tuple(items)
print(fixed)('book', 'pencil')
تابع tuple() هر دنبالهای را تاپل میکند و list() دقیقاً برعکس.
تمرینها
تمرین
تمرین ۱ — دو نتیجه با یک برگشت
تابعی به نام sum_diff بنویسید که دو عدد بگیرد و جمع و تفاضلشان را در قالب یک تاپل برگرداند. آن را برای ۱۰ و ۳ فراخوانی کنید، نتیجهٔ کامل را چاپ کنید و سپس با unpacking دو نتیجه را در دو متغیر بریزید و جدا چاپ کنید.
# Write your code hereنمایش راهحل
def sum_diff(a, b):
return (a + b, a - b)
result = sum_diff(10, 3)
print(result)
s, d = result
print(s, d)(13, 7) 13 7
::: :::
خلاصه
- تاپل دنبالهای مرتب و تغییرناپذیر است؛ اندیسگذاری و
len()در آن مثل لیست کار میکند. - آنچه تاپل میسازد ویرگول است؛ تاپل تکعضوی به ویرگول نیاز دارد:
(5,). - تغییرناپذیری باعث اطمینان میشود و اجازهٔ استفاده بهعنوان کلید دیکشنری میدهد.
- با unpacking عضوهای تاپل در یک سطر به چند متغیر میروند.
- دادهٔ ساختارثابت تاپل میگیرد و مجموعهٔ در حال تغییر لیست.
تاپل جایگاه هر مقدار را با شماره نگه میدارد؛ اما گاهی میخواهید با نام به داده رجوع کنید نه با شماره. در درس بعدی با دیکشنری، نگاشت کلید به مقدار را میسازیم.