bugün
- şarapçı koala yalnız değildir8
- uludağ sözlük size ne kattı7
- fusya semsiyeli yabanci13
- sarapci koala44
- tayyip bey yaşayan en büyük devrimci liderdir3
- recep tayyip erdoğan7
- seksenlerde nasıl görünürdüm trend i6
- keşan2
- arkadaşlar görüşürüz2
- rica ediyorum kimse beni savunmasın2
- sigara içmeyenleri anlamamak5
- gece 2 de komşu kızının balkonda seksting yapması4
- yazın anlamının kadın ayağı olması2
- hazret ktc2
- sibel canın 35 senedir 35 yaşında gibi görünmesi5
- tik tok2
- melissa vargas'dan tokat yemek5
- 4 kez üst üste cumaya gitmemek5
- kıvırcık saç8
- guendouzi ve greenwooda uefa disiplin süreci19
- mutlu bey biraderin elmas bey birader olması2
- iktidarsız erkek2
- bir kızın aşkı size naptırabilir5
- çağla idi2
- piercing takmanın zorluğu5
- hiçbir şeyin tat vermemesi4
- serhat kılıç20
- yazarların 80 lerde nasıl göründüğü13
- bedelli askerlik yapan erkek erkek midir sorgusu2
- otoyol ve köprülerin özelleştirilmesi4
- kelebek saç kesimi4
- eksilenmekten aldığım tadı hiçbir şeyden almadım3
- kurucu önder3
- ak çomarların tartışmada fetöcü ilan etme eşiği3
- seri eksicim kooooş3
- yalnız ölmek5
- abd de valilik adayına silahlı saldırı3
- sevmediğiniz insanla devamlı karşılaşmak2
- mesai ücretine çöken iş veren2
- biraderitasyon2
- tung tung tung sahur3
- tai lung42
- mel mel bakan birine usulca sokulmak2
- bir bela geliyor11
- yalnızlık edebiyatı13
- çomarizasyon2
- 6 eylül 2026 türkiye italya voleybol maçı18
- rüyada çaylak olduğunu görmek2
- türklerin yoğurt dışında icadının olmadığı gerçeği3
- çomarların herkesi pkk lı yapması2
türkce ye "yapı" olarak geçmiştir. C dilini class sistemine yaklaştıran bir ögedir. Zaten java ve c++ ta da class structa cok benzer bir yapıdır. Struct in içine istenilen degişkenler konur ve o noktadan sonra o bir bütün gibi düşünülebilir. Hatta struct kullanılarak kendi degişken türünüzü yaratabilirsiniz. Birkaç örnek vermek gerekirse:
struct yazar{
char nick[20];
int entrySayisi;
int yas;
}
şeklinde tanımlanır. Daha sonra bu türü kullanmak için ise
struct yazar a;
şeklinde bir a structı yaratılır ve "a.yas" şeklinde istediginiz struct elemanına ulaşabilir ve degiştirebilirsiniz.
Ben sürekli struct yazmam derseniz kendi türünüzü de tanımlayabilirsiniz. Şöyle ki:
typedef struct yazar{
char nick[20];
int entrySayisi;
int yas;
}a;
yazar a;
şeklinde yazarak structı kullanabilirsiniz.
struct yazar{
char nick[20];
int entrySayisi;
int yas;
}
şeklinde tanımlanır. Daha sonra bu türü kullanmak için ise
struct yazar a;
şeklinde bir a structı yaratılır ve "a.yas" şeklinde istediginiz struct elemanına ulaşabilir ve degiştirebilirsiniz.
Ben sürekli struct yazmam derseniz kendi türünüzü de tanımlayabilirsiniz. Şöyle ki:
typedef struct yazar{
char nick[20];
int entrySayisi;
int yas;
}a;
yazar a;
şeklinde yazarak structı kullanabilirsiniz.
(bkz: structure)
c ve c++'ta yer alan bir veri yapısı. structure'ın kısaltılmış hali.
python'da da var bu yapılar. yazının sözlük formatından geçmemiş daha mükemmel hali burada [ https://aligoren.com/pythonda-struct-kullanimi ].
Kısacası struct bir şablon olarak gelir önümüze. Bildiğimiz manada struct, farklı verileri bir araya getiriyoruz yani aslında grupluyor. Peki kullanımı nasıl olmalı.
Örneğin D dilinden örnek verecek olursak Ali Çehreli hocam çok güzel açıklamış:
struct GununSaati {
int saat;
int dakika;
}
Bu D dili ile yazılan bir örnek. Ve oradan bir alıntı yapmak istiyorum:
"struct birbirleriyle ilişkili değişkenleri bir araya getirerek yeni bir tür olarak kullanma olanağı verir:"
Benim de yukarıda söylediğimle aynı aslında. Ve sonrasında alt kısımda bir açıklama daha getirilmiş.
"Yukarıdaki tanım, saat ve dakika isimli iki int değişkeni bir araya getiren ve ismi GününSaati olan yeni bir tür tanımlar.
Yukarıdaki tanımdan sonra artık başka türler gibi kullanabileceğimiz GününSaati isminde yeni bir türümüz olur.
Örnek olarak int türüne benzer kullanımını şöyle gösterebiliriz:"
Evet buraya kadar biraz anlam çıkarılmış olmalı sanıyorum ki. Peki bunu Python'da nasıl yaparız?
Bunun için öncelikle collections kullanmamız gerekiyor. Ve buradan dahil edeceğimiz namedtuple da struct'ımızı oluşturmamızda bize yardımcı olacak. Basit bir anlatım yapmaya çalışayım. Bir namedtuple için.
namedtuple ilk argüman olarak Tip Adı olarak kabul edilen bir argüman alır. Diğer işe yarar argüman ise bu bize özgü tipe ait alanlardır. Yukarıdaki D dili örneğine tekrar bakarsak saat ve bakika, yazacağımız python kodunda bizim alanlarımız olacaktır. Temelde kod yapısı şöyle olacaktır:
namedtuple("TipAdı", "tip_alanı ikinci_alan üçüncü_alan")
O zaman bir örnek kod görelim bu anlamamız açısından daha iyi olacaktır.
from collections import namedtuple
YeniTip = namedtuple('GununSaati', "saat dakika")
Öncelikle namedtuple'ı çağırdık bunu söylemiştim. namedtuple'ı bir değişkene atadım aslında artık namedtuple'ın işlerini YeniTip yönetecek. Burada namedtuple GununSaati adında yeni bir tür oluşturdu. Bu türün alanları ise saat ve dakika oluyor. Tür dediğim kısım aslında tip kısmı. Zaten verdiğim açıklama linkine de bakarsanız oranın alacağı parameter TypeName olarak belirtilmiş. Peki yeni türümüzü hazırladık nasıl kullanacağız?
Öncelikle bu yeni tipimizi bir değişkene ilkleyelim. Bu ilkleme sırasında YeniTip argüman alan bir işlev gibi davranacak. Bunu bir kod ile görelim:
zaman = YeniTip(15, 30)
Oluşturduğumuz zaman değişkeni, YeniTip olarak ilklediğimiz veri tipine ilklendi. Artık zaman değişkeni ile istediğim alanlara erişebilirim. Bu örnekte alanlarımız saat ve dakika idi. Örnekte 15 saat, 30 ise dakika oluyor. Şu an yazdığımız kodların tam haline bakalım:
from collections import namedtuple
YeniTip = namedtuple('GununSaati', "saat dakika")
zaman = YeniTip(15, 30)
print(zaman.saat)
print(zaman.dakika)
Bu kodun verdiği çıktı 15 ve 30 olacaktır. Eğer özel bir tür var ise yani GununSaati gibi bir tür var ise bu türe ait alanları öğrenmek yine çok basit. Yukarıdaki zaman değişkeni üzerinden gidecek olursak şöyle açıklayayım:
print(zaman._fields) # print(zaman._fields)
ya da henüz herhangi bir değer almamış hali ile yani saf hali ile tip üzerinden kontrolü şöyle sağlarız:
print(YeniTip._fields)
Bu sayede değer girmek zorunda kalmamış oluruz. Ayrıca dikkat etmemiz gereken bir diğer husus ise değeri bir kere verilmiş namedtuple'a daha sonra tekrar değer veremiyorsunuz. Yani şunu yapamazsınız
zaman = YeniTip(15, 30)
zaman.saat = 20
Eğer bunu yaparsanız şöyle bir hata alırsınız:
Traceback (most recent call last):
File "test.py", line 6, in <module>
zaman.saat = 20
AttributeError: can't set attribute
Hmm diyor ki bir değer set edemezsiniz. O yüzden eğer yapılara bir değer vereceksek ilklediğimiz anda bu değerleri vermemiz gerekiyor. Ancak bu dinamik değerler alamaz demek değildir. Örnek verecek olursak:
from collections import namedtuple
saat = [10, 11, 12, 13, 14, 15]
YeniTip = namedtuple('GununSaati', "saat dakika")
for sa in saat:
zaman = YeniTip(sa, 30)
print(zaman.saat, ":", zaman.dakika)
"""
10 : 30
11 : 30
12 : 30
13 : 30
14 : 30
15 : 30
"""
Yukarıdaki örneği verdim. Aslında bunu iterable hale getirmemizi sağlayan _make işlevi var. Örneğin;
from collections import namedtuple
saat_dakika = [15, 30]
YeniTip = namedtuple("GununSaati", "saat dakika")
YeniTip._make(saat_dakika)
# GununSaati(saat=15, dakika=30)
Makaleyi yanlışa götürmemek adına yukarıdaki set edilemez hatasına farklı bir açıdan yaklaşalım. Evet direkt olarak bir set etme işlemi yapamıyoruz ancak _replace işlevi ile değeri değiştirebiliriz. Fakat bunu tanımlamadan hemen sonra yapmalıyız. Örnek şöyle olmalı:
from collections import namedtuple
YeniTip = namedtuple('GununSaati', "saat dakika")
zaman = YeniTip(15, 30)
zaman = zaman._replace(saat=19)
print(zaman.saat) # 19
Son olarak da zaman değişkenine type kontrolü yapalım.
from collections import namedtuple
YeniTip = namedtuple('GununSaati', "saat dakika")
zaman = YeniTip(15, 30)
zaman = zaman._replace(saat=19)
print(type(zaman))
# <class '__main__.GununSaati'>
Kısacası struct bir şablon olarak gelir önümüze. Bildiğimiz manada struct, farklı verileri bir araya getiriyoruz yani aslında grupluyor. Peki kullanımı nasıl olmalı.
Örneğin D dilinden örnek verecek olursak Ali Çehreli hocam çok güzel açıklamış:
struct GununSaati {
int saat;
int dakika;
}
Bu D dili ile yazılan bir örnek. Ve oradan bir alıntı yapmak istiyorum:
"struct birbirleriyle ilişkili değişkenleri bir araya getirerek yeni bir tür olarak kullanma olanağı verir:"
Benim de yukarıda söylediğimle aynı aslında. Ve sonrasında alt kısımda bir açıklama daha getirilmiş.
"Yukarıdaki tanım, saat ve dakika isimli iki int değişkeni bir araya getiren ve ismi GününSaati olan yeni bir tür tanımlar.
Yukarıdaki tanımdan sonra artık başka türler gibi kullanabileceğimiz GününSaati isminde yeni bir türümüz olur.
Örnek olarak int türüne benzer kullanımını şöyle gösterebiliriz:"
Evet buraya kadar biraz anlam çıkarılmış olmalı sanıyorum ki. Peki bunu Python'da nasıl yaparız?
Bunun için öncelikle collections kullanmamız gerekiyor. Ve buradan dahil edeceğimiz namedtuple da struct'ımızı oluşturmamızda bize yardımcı olacak. Basit bir anlatım yapmaya çalışayım. Bir namedtuple için.
namedtuple ilk argüman olarak Tip Adı olarak kabul edilen bir argüman alır. Diğer işe yarar argüman ise bu bize özgü tipe ait alanlardır. Yukarıdaki D dili örneğine tekrar bakarsak saat ve bakika, yazacağımız python kodunda bizim alanlarımız olacaktır. Temelde kod yapısı şöyle olacaktır:
namedtuple("TipAdı", "tip_alanı ikinci_alan üçüncü_alan")
O zaman bir örnek kod görelim bu anlamamız açısından daha iyi olacaktır.
from collections import namedtuple
YeniTip = namedtuple('GununSaati', "saat dakika")
Öncelikle namedtuple'ı çağırdık bunu söylemiştim. namedtuple'ı bir değişkene atadım aslında artık namedtuple'ın işlerini YeniTip yönetecek. Burada namedtuple GununSaati adında yeni bir tür oluşturdu. Bu türün alanları ise saat ve dakika oluyor. Tür dediğim kısım aslında tip kısmı. Zaten verdiğim açıklama linkine de bakarsanız oranın alacağı parameter TypeName olarak belirtilmiş. Peki yeni türümüzü hazırladık nasıl kullanacağız?
Öncelikle bu yeni tipimizi bir değişkene ilkleyelim. Bu ilkleme sırasında YeniTip argüman alan bir işlev gibi davranacak. Bunu bir kod ile görelim:
zaman = YeniTip(15, 30)
Oluşturduğumuz zaman değişkeni, YeniTip olarak ilklediğimiz veri tipine ilklendi. Artık zaman değişkeni ile istediğim alanlara erişebilirim. Bu örnekte alanlarımız saat ve dakika idi. Örnekte 15 saat, 30 ise dakika oluyor. Şu an yazdığımız kodların tam haline bakalım:
from collections import namedtuple
YeniTip = namedtuple('GununSaati', "saat dakika")
zaman = YeniTip(15, 30)
print(zaman.saat)
print(zaman.dakika)
Bu kodun verdiği çıktı 15 ve 30 olacaktır. Eğer özel bir tür var ise yani GununSaati gibi bir tür var ise bu türe ait alanları öğrenmek yine çok basit. Yukarıdaki zaman değişkeni üzerinden gidecek olursak şöyle açıklayayım:
print(zaman._fields) # print(zaman._fields)
ya da henüz herhangi bir değer almamış hali ile yani saf hali ile tip üzerinden kontrolü şöyle sağlarız:
print(YeniTip._fields)
Bu sayede değer girmek zorunda kalmamış oluruz. Ayrıca dikkat etmemiz gereken bir diğer husus ise değeri bir kere verilmiş namedtuple'a daha sonra tekrar değer veremiyorsunuz. Yani şunu yapamazsınız
zaman = YeniTip(15, 30)
zaman.saat = 20
Eğer bunu yaparsanız şöyle bir hata alırsınız:
Traceback (most recent call last):
File "test.py", line 6, in <module>
zaman.saat = 20
AttributeError: can't set attribute
Hmm diyor ki bir değer set edemezsiniz. O yüzden eğer yapılara bir değer vereceksek ilklediğimiz anda bu değerleri vermemiz gerekiyor. Ancak bu dinamik değerler alamaz demek değildir. Örnek verecek olursak:
from collections import namedtuple
saat = [10, 11, 12, 13, 14, 15]
YeniTip = namedtuple('GununSaati', "saat dakika")
for sa in saat:
zaman = YeniTip(sa, 30)
print(zaman.saat, ":", zaman.dakika)
"""
10 : 30
11 : 30
12 : 30
13 : 30
14 : 30
15 : 30
"""
Yukarıdaki örneği verdim. Aslında bunu iterable hale getirmemizi sağlayan _make işlevi var. Örneğin;
from collections import namedtuple
saat_dakika = [15, 30]
YeniTip = namedtuple("GununSaati", "saat dakika")
YeniTip._make(saat_dakika)
# GununSaati(saat=15, dakika=30)
Makaleyi yanlışa götürmemek adına yukarıdaki set edilemez hatasına farklı bir açıdan yaklaşalım. Evet direkt olarak bir set etme işlemi yapamıyoruz ancak _replace işlevi ile değeri değiştirebiliriz. Fakat bunu tanımlamadan hemen sonra yapmalıyız. Örnek şöyle olmalı:
from collections import namedtuple
YeniTip = namedtuple('GununSaati', "saat dakika")
zaman = YeniTip(15, 30)
zaman = zaman._replace(saat=19)
print(zaman.saat) # 19
Son olarak da zaman değişkenine type kontrolü yapalım.
from collections import namedtuple
YeniTip = namedtuple('GununSaati', "saat dakika")
zaman = YeniTip(15, 30)
zaman = zaman._replace(saat=19)
print(type(zaman))
# <class '__main__.GununSaati'>
Gündemdeki Haberler
Güncel Önemli Başlıklar