Python’da, bir demet veya listenin öğeleri genişletilebilir ve birden çok değişkene atanabilir. Buna sıralı paket açma veya paketlenmemiş atama denir.
Aşağıdaki ayrıntılar burada açıklanmıştır.
- Tuple’ların ve listelerin temellerini açma
- Yuvalanmış demetler, paketlenmemiş listeler
- Alt Çizgi ile Paketi Açma:
_
- Yıldız işaretleriyle ambalajın açılması:
*
Tanımlama gruplarını, listeleri ve sözlükleri işlev bağımsız değişkenleri olarak genişletmek ve iletmek için yıldız işaretlerini kullanma hakkında bilgi için aşağıdaki makaleye bakın.
- İLİŞKİLİ:Python’da listeleri, demetleri ve sözlükleri fonksiyon argümanları olarak genişletme ve iletme
Tuple’ların ve listelerin temellerini açma
Değişkenler virgülle ayrılarak sol tarafa yazıldığında, her bir değişkene sağ taraftaki demet veya listenin bir elemanı atanır. Hem demetler hem de listeler için aynıdır (aşağıdaki örnekler demet biçiminde yazılmıştır).
t = (0, 1, 2)
a, b, c = t
print(a)
print(b)
print(c)
# 0
# 1
# 2
l = [0, 1, 2]
a, b, c = l
print(a)
print(b)
print(c)
# 0
# 1
# 2
Tuple’lar yuvarlak parantezleri atlayabildiğinden, bunun tek bir satırda birden çok değişkene birden çok değer atamak için aşağıdaki gibi kullanılabileceğini unutmayın.
a, b = 0, 1
print(a)
print(b)
# 0
# 1
Değişken sayısı eleman sayısı ile eşleşmiyorsa bir hata oluşur.
# a, b = t
# ValueError: too many values to unpack (expected 2)
# a, b, c, d = t
# ValueError: not enough values to unpack (expected 4, got 3)
Değişken sayısı eleman sayısından az ise, kalan elemanlar değişken adına bir yıldız işareti eklenerek bir liste olarak atanabilir (aşağıya bakınız).
Yuvalanmış demetler, paketlenmemiş listeler
İç içe geçmiş demetler ve listeler de paketten çıkarılabilir. İçeriği de açmak istiyorsanız, değişkeni aşağıdakilerden birine ekleyin
()
[]
t = (0, 1, (2, 3, 4))
a, b, c = t
print(a)
print(b)
print(c)
# 0
# 1
# (2, 3, 4)
print(type(c))
# <class 'tuple'>
a, b, (c, d, e) = t
print(a)
print(b)
print(c)
print(d)
print(e)
# 0
# 1
# 2
# 3
# 4
_underscore_ ile paketi açıldı.
Python’da, yalnızca paketlenmemiş değil, ihtiyaç duyulmayan değerler geleneksel olarak alt çizgiye (alt çizgi) _ atanır. Özel bir gramer anlamı yoktur; sadece _ adlı bir değişkene atanırlar.
t = (0, 1, 2)
a, b, _ = t
print(a)
print(b)
print(_)
# 0
# 1
# 2
Yıldız işaretleriyle ambalajın açılması
Değişken sayısı eleman sayısından az ise, değişken adındaki yıldız işareti elemanların bir liste halinde birlikte atanmasına neden olacaktır.
Bu sözdizimi Python 3’ten beri uygulanmaktadır ve Python 2’de mevcut değildir.
Elemanlar yıldızsız değişkenlere baştan ve sondan, kalan elemanlar yıldız işaretli değişkenlere bir liste olarak atanır.
t = (0, 1, 2, 3, 4)
a, b, *c = t
print(a)
print(b)
print(c)
# 0
# 1
# [2, 3, 4]
print(type(c))
# <class 'list'>
a, *b, c = t
print(a)
print(b)
print(c)
# 0
# [1, 2, 3]
# 4
*a, b, c = t
print(a)
print(b)
print(c)
# [0, 1, 2]
# 3
# 4
Örneğin, bir değişkene bir demet veya listenin yalnızca ilk iki öğesini atamak istiyorsanız, gerekli olmayan kısımlar için yukarıdaki alt çizgiyi kullanabilirsiniz.
a, b, *_ = t
print(a)
print(b)
print(_)
# 0
# 1
# [2, 3, 4]
Aynısı aşağıdaki gibi de yazılabilir
a, b = t[0], t[1]
print(a)
print(b)
# 0
# 1
Yalnızca bir yıldız işareti eklenebilir. Yıldızla işaretlenmiş birden çok değişken varsa, her bir değişkene kaç öğe atandığını belirlemek mümkün olmadığından bir SyntaxError hatası ortaya çıkar.
# *a, b, *c = t
# SyntaxError: two starred expressions in assignment
Yıldızla işaretlenmiş bir değişkene atanan tek bir öğenin bile liste olarak atandığını unutmayın.
t = (0, 1, 2)
a, b, *c = t
print(a)
print(b)
print(c)
# 0
# 1
# [2]
print(type(c))
# <class 'list'>
Fazladan eleman yoksa boş bir liste atanır.
a, b, c, *d = t
print(a)
print(b)
print(c)
print(d)
# 0
# 1
# 2
# []