2.8. Demetler

Bir demet, değiştirilemez, sıralı bir değerler dizisidir. Oluşturulduktan sonra içindeki öğeler eklenemez, kaldırılamaz veya değiştirilemez.

2.8.1. Demet oluşturma

Bir demet oluşturmak için parantezleri (veya yalnızca virgülleri) kullanın:

empty   = ()
point   = (3, 4)
triple  = 1, 2, 3                # parentheses are optional
mixed   = (1, "two", 3.14)
nested  = ((1, 2), (3, 4))

2.8.1.1. Tek öğe tuzağı

Bir değerin etrafındaki parantezler yalnızca parantezdir; aslında bir demeti oluşturan şey virgüldür. Tek öğeli bir demet için sondaki bir virgül gereklidir:

>>> (1)
1                                # just an int in parens
>>> (1,)
(1,)                             # a one-element tuple
>>> type((1)), type((1,))
(<class 'int'>, <class 'tuple'>)

2.8.2. Uzunluk, indeksleme ve dilimleme

Listeler ve dizelerle aynı – len(), indeksleme, dilimleme, in ve + / * hepsi aynı şekilde çalışır:

>>> point = (3, 4, 5)
>>> len(point)
3
>>> point[0]
3
>>> point[1:]
(4, 5)
>>> 4 in point
True
>>> (1, 2) + (3, 4)
(1, 2, 3, 4)

2.8.3. Değiştirilemezlik

Demetlerde append, pop, sort veya başka herhangi bir yerinde değişiklik metodu yoktur. İndekslenmiş atama TypeError hatası verir:

>>> point = (3, 4)
>>> point[0] = 99
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item assignment

Bir demeti “değiştirmek” için değiştirilmiş değerlerle yeni bir tane oluşturun.

2.8.4. Paketi açma

Bir demetin başlıca süper gücü paketi açmadır: her öğeyi tek bir ifadede ayrı bir değişkene atamaktır.

Üç öğeli bir (1, 2, 3) demeti, x, y, z adlı üç değişkene paketi açılırken.

Paketi açma, bir demetin her öğesini tek bir atamada adlı bir değişkene bağlar.

>>> point = (3, 4)
>>> x, y = point
>>> x
3
>>> y
4

Sağ taraf herhangi bir yinelenebilir nesne olabilir – bir liste, bir dize, bir fonksiyonun dönüş değeri:

>>> a, b, c = "abc"
>>> a, b, c
('a', 'b', 'c')

Baştaki bir *, paketi açmanın “geri kalanını” bir listede toplar:

>>> first, *rest = [10, 20, 30, 40]
>>> first
10
>>> rest
[20, 30, 40]

2.8.5. Birden çok dönüş değeri

Bir fonksiyon, birkaç değeri aynı anda iletmek için bir demet döndürebilir; çağıran, gelirken bunların paketini açar:

def size_of(rect):
    return (rect[2] - rect[0], rect[3] - rect[1])

width, height = size_of((10, 20, 110, 140))
# width = 100, height = 120

return üzerindeki parantezler isteğe bağlıdır – yalın bir return a, b de bir demettir.

2.8.6. Demet ve liste karşılaştırması

Hangisine başvurulacağına dair pratik bir rehber:

  • Sabit biçimli, genellikle heterojen veriler için demet: (x, y) noktaları, (r, g, b) renkleri, birden çok dönüş değeri, daha sonra kullanılmak üzere paketlenmiş fonksiyon argümanları.

  • Değişken uzunluklu, genellikle homojen veriler için liste: bir ölçümler listesi, işlenecek bir öğeler kuyruğu, eklemeyi beklediğiniz herhangi bir şey.

Demetler ayrıca hashlenebilirdir (içindeki her öğe hashlenebilir olduğu sürece), bu nedenle bir dict içinde anahtar olarak kullanılabilirler.