Tuples

Tuples:Değiştirilemez(Sabit) Dizinler

Listeleme tipine benzemekle birlikte farkları değiştirilemez olmalarıdır(Aslında değiştirilebilir Ancak doğrudan değiştirilemezler). Listeleme tipine uygulanabilen birçok işlem tuple tipinede uygulanabilir. Örneklerle açıklamaya devam:

>>> (1, 2) + (3, 4) # Bitistirme islemi

(1, 2, 3, 4)

>>> (1, 2) * 4 # Tekrarlama islemi

(1, 2, 1, 2, 1, 2, 1, 2)

>>> T = (1, 2, 3, 4)

>>> T[0], T[1:3]

(1, (2, 3))

mesela burada neden

1, (2,3)

çıkışını vermedi de

(1, (2, 3))

gibi bir çıkış verdi ? Bunun nedeni tek elemanlı tuple tanımlanmak istendiğinde tanımın tamsayı tipi tanımlamakla (parantez kullanarak) aynı olacağından dolayıdır. Örneğin

>>> x=(10)

>>> x

10

>>> x[0]

Traceback (most recent call last):

File “<pyshell#31>”, line 1, in -toplevel-

x[0]

TypeError: unsubscriptable object

Dizin işlemi(index) yapmak istediğimizde hata mesajı aldık. Çünkü oluşturduğumuz x değeri değeri 10 olan bir nesneye işaret eden bir tam sayıdır. Peki bir elemanlı tuple nasıl tanımlayacağız. Şöyle:

>>> x=(10,)

>>> x

(10,)

>>> x[0]

10

Görüldüğü üzere x artık bir tuple ‘dır. Örneklere devam edelim:

>>> T = (‘cc’, ‘aa’, ‘dd’, ‘bb’)

>>> T.sort()

Traceback (most recent call last):

File “<pyshell#36>”, line 1, in -toplevel-

T.sort()

AttributeError: ‘tuple’ object has no attribute ‘sort’

#nasil yapariz peki ?

>>> tmp = list(T)

>>> tmp.sort( )

>>> tmp

[‘aa’, ‘bb’, ‘cc’, ‘dd’]

>>> T = tuple(tmp)

>>> T

(‘aa’, ‘bb’, ‘cc’, ‘dd’)

Buradan çıkarılacak sonuç şudur: Bir tuple tanımlandığında değiştirilemezlik kalkanına bürünen tek şey ismidir. Yani ismi üzerinden gerçekleştirilecek değiştirme işlemleri başarısız olacaktır. İsmi ise ancak yeniden tanımlama ile değiştirilebilir.Örneğin;

>>> T = (1, [2, 3], 4)

>>> T[1][0]=’onur’ # hata mesaji alinmaz. Dogru bir islem

>>> T

(1, [‘onur’, 3], 4)

>>> T[1]=[‘onur’,3]

Traceback (most recent call last):

File “<pyshell#40>”, line 1, in -toplevel-

T[1]=[‘onur’,3]

TypeError: object doesn’t support item assignment

İkisi de aynı işlem gibi gözükmesine rağmen ikinci işlemde hata aldık. Garip gözükmesine rağmen T[1] i tuple a ait bir işlem olarak görürken T[1][1] i ise T[1] ile ulaştığımız listeleme tipine ait bir işlem olarak görmektedir. Python ‘a hoş geldiniz :)

Tuple ‘ın önemi nedir diye sorulacak olursa, karmaşık bir program içinde aynı nesneye referans gösteren başka bir işaretçinin , kullandığınız işaretçinin gösterdiği alandaki bilgileri değiştirmeyeceğinden emin olmanızı sağlıyor. Özellikle yapısal yordamlarda genellikle tuple tipleri kullanılmaktadır. Bu da veri tabanı bütünlüğünü(integrity) korumak için alınan önlemlerden birisidir.

Tuple formlarını ismi üzerinden işlemlerle değiştiremeyeceğimizi, ancak bir sabit gibi de olmadıklarını, tekrar atama ile işaret ettiği nesnelerin değiştirilebileceğini söylemiştik.. Daha önceden bahsedilen bir noktaya dikkat çekmek için bir küçük hata yaptığımız bir örnekle bu durumu açıklayalım:

T = (1, 2, 3)

T[2] = 4 # Hata!

T = T[:2] + (4,)

>>>T

(1, 2, 4)

>>> T=T[:2]+(5) #'(5)’ ile ‘5’ aynıdır. Bir diziyle tamsayı yı birleştiremeyiz

Traceback (most recent call last):

File “<pyshell#5>”, line 1, in -toplevel-

T=T[:2]+(5)

TypeError: can only concatenate tuple (not “int”) to tuple

Çözüm yolu benzer ifadedeki gibi:

>>> T =T[:2]+(5,)

>>> T

(1, 2, 5)

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s