Kurs
Python’daki her değerin bir veri tipi vardır. Veri tipleri, derleyiciye veya yorumlayıcıya veriyi nasıl kullanmak istediğinizi söyleyen bir veri sınıflandırmasıdır. Tip, veri üzerinde yapılabilecek işlemleri ve verinin hangi yapıda saklanmasını istediğinizi tanımlar. Veri biliminde, verinizi daha kolay kullanmak ve üzerinde çalışmak için sıklıkla türünü değiştirmeniz gerekir.
Python’da birçok veri tipi bulunur. Muhtemelen bunların bazılarını zaten gördünüz ve kullandınız. Sayısal değerler için tamsayılar ve kayan noktalılar, doğru/yanlış değerleri için boolean (bool) ve alfasayısal karakterler için dizgiler (string) vardır. Bir değer koleksiyonunu saklayabileceğiniz veri yapıları olarak listeler, demetler (tuple), sözlükler (dictionary) ve kümeler (set) kullanabilirsiniz. Bunlar hakkında daha fazla bilgi için DataCamp’in Python’daki Veri Tipleri kursuna göz atın.
Bu dersteki tüm örnek kodları kendiniz kolayca çalıştırmak için, Python’un önceden yüklü olduğu ve tüm kod örneklerini içeren bir DataLab çalışma kitabını ücretsiz oluşturabilirsiniz.
Python’da Veri Tiplerini Kontrol Etme
Dönüştürmeden önce veri tiplerini kontrol etmek faydalıdır. Python iki temel işlev sunar:
type(): Bir değişkenin tipini döndürür.isinstance(): Bir değişkenin belirli bir tipe ait olup olmadığını kontrol eder.
a = 5.5
print(type(a)) # Output: <class 'float'>
print(isinstance(a, int)) # Output: False
print(isinstance(a, float)) # Output: True
Python’da Örtük ve Açık Veri Tipi Dönüştürme
Python’da veri dönüştürme iki şekilde gerçekleşebilir: Ya derleyiciye bir veri tipini başka bir tipe dönüştürmesini açıkça söylersiniz ya da derleyici bunu kendisi anlar ve sizin yerinize yapar. İlkinde açık (explicit) veri tipi dönüştürmesi yaparken, ikincisinde örtük (implicit) veri tipi dönüştürmesi yapmış olursunuz.
Python’da örtük veri tipi dönüştürme
Örtük dönüştürme veya zorlama (coercion), veri tipi dönüşümünün derleme sırasında ya da çalışma zamanında gerçekleştiği ve Python tarafından doğrudan sizin için yönetildiği durumdur. Bir örneğe bakalım:
a_int = 1
b_float = 1.0
c_sum = a_int + b_float
print(c_sum)
print(type(c_sum))
2.0
<class 'float'>
İpucu: Bir nesnenin veri tipini kontrol etmek için Python’da type() işlevini kullanabilirsiniz.
Bu örnekte, bir tamsayı değeri olan a_int bir kayan noktalı değer olan b_float ile toplandı ve sonuç, derleyiciye söylemenize gerek kalmadan otomatik olarak kayan noktalı bir değer olan c_sum’a dönüştürüldü. Bu, örtük veri dönüştürmesidir.
Peki neden kayan noktalı değer tamsayıya dönüştürülmedi?
Bu durum, bilgisayar biliminde tür terfisi (type promotion) olarak bilinen daha geniş bir kavramdan kaynaklanır. Kısaca, bu, bilgiyi kaybetmeden verinizi farklı bir üst türe dönüştürerek mümkün olan her durumda işlemleri yapmanıza izin veren derleyicinin bir savunma mekanizmasıdır.
Bu, kayan noktadan tamsayıya dönüşümün yapılmamasının nedenidir; çünkü bu durumda derleyicinin kesirli kısmı atması gerekir ve bu da bilgi kaybına yol açar.
Python’da açık veri tipi dönüştürme
Açık veri tipi dönüştürme, sıkça “type casting” olarak da anılır ve bir değeri bilerek bir veri tipinden diğerine dönüştürdüğünüzde gerçekleşir. Bu yaklaşım, hedef veri tipini kodunuzda açıkça belirttiğiniz için dönüşüm üzerinde doğrudan kontrol sağlar. Python’un sağladığı otomatik (örtük) dönüşüm gereksinimlerinizi karşılamadığında yaygın olarak kullanılır.
Açık dönüşümün söz dizimi şöyledir:
target_data_type(expression)
Örneğin, bir kayan noktalı sayıyı tamsayıya dönüştürmek isterseniz şöyle yazarsınız:
int(3.14) # Converts 3.14 to 3
Not: Açık dönüşümler çok faydalı olmakla birlikte bilgi kaybına yol açabilir. Örneğin, bir kayan noktalı sayıyı tamsayıya dönüştürmek kesirli kısmın atılmasına neden olur. Programlarınızda istenmeyen sonuçlardan kaçınmak için bu sonuçları anlamak önemlidir.
Şimdi yaygın olarak kullanılan bazı açık veri tipi dönüşümlerini inceleyelim.
Python’da İlkel ve İlkel Olmayan Veri Yapıları
İlkel veri yapıları, veri işlemenin yapı taşlarıdır ve saf, basit veri değerleri içerir. Python’da dört ilkel değişken türü vardır:
- Tamsayılar
- Kayan noktalılar
- Dizgiler (Strings)
- Boolean
İlkel olmayan veri yapıları yalnızca tek bir değer değil, çeşitli biçimlerde bir değer koleksiyonu saklar. Python’da ilkel olmayan veri yapıları şunlardır:
- Listeler
- Demetler (Tuples)
- Sözlükler (Dictionaries)
- Kümeler (Sets)
Bunlar hakkında daha fazla bilgiyi DataCamp’in Python Veri Yapıları Eğitimi ile edinebilirsiniz.
İlkel Veri Yapılarında Dönüşümler
Python’da tamsayı ve kayan nokta dönüşümleri
Tamsayılar ve kayan noktalılar sayılarla ilgilenen veri tipleridir.
Bir tamsayıyı kayan noktalıya dönüştürmek için Python’da float() işlevini kullanın. Benzer şekilde, bir kayan noktalıyı tamsayıya dönüştürmek isterseniz int() işlevini kullanabilirsiniz.
a_int = 3
b_int = 2
# int'ten float'a açık tür dönüştürme
c_float_sum = float(a_int + b_int)
print(c_float_sum)
5.0
a_float = 3.3
b_float = 2.0
# float'tan int'e açık tür dönüştürme
c_int_sum = int(a_float + b_float)
print(c_int_sum)
c_float_sum = a_float + b_float
print(c_float_sum)
5
5.3
Kayan nokta hassasiyeti sorunları ve Decimal modülü
Python’da kayan noktalı aritmetik hassasiyet sorunlarına yol açabilir:
print(0.1 + 0.2) # Output: 0.30000000000000004
Bunu önlemek için Decimal modülünü kullanın:
from decimal import Decimal
print(Decimal('0.1') + Decimal('0.2')) # Output: 0.3
Python’da gerçelden karmaşığa veri tipi dönüştürme
Tamsayıları complex(real,imag) kullanarak karmaşık sayılara dönüştürebilirsiniz. İki tamsayı (gerçel ve sanal kısım) alır ve gerçek sayıları karmaşık sayılara dönüştürür.
real = 2
imag = 5
print(complex(real, imag))
(2+5j)
Python’da dizgilerle veri tipi dönüştürme
String, bir veya daha fazla karakterin (harfler, sayılar, semboller) bir koleksiyonudur. String’leri sayılara veya sayıları string’lere dönüştürmeniz oldukça sık gerekebilir.
price_cake = 15
price_cookie = 6
total = price_cake + price_cookie
print("The total is: " + total + "$")
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-12-54bd76b9b4bd> in <module>()
2 price_cookie = 6
3 total = price_cake + price_cookie
----> 4 print("The total is: " + total + "$")
TypeError: Can't convert 'int' object to str implicitly
Yukarıdaki örnek, derleyicinin bir tamsayı değeri string’e örtük olarak dönüştüremeyeceğini bildiren bir TypeError verir.
Programın burada ne yapması gerektiği size sezgisel gelebilir. Ancak derleyici her zaman emin olamayacağından, ne istediğinizi açıkça belirtebilmeniz için açık tür dönüştürme mekanizması sunar. Python’da bir tamsayıyı str() işleviyle string’e bu şekilde dönüştürebilirsiniz:
price_cake = 15
price_cookie = 6
total = price_cake + price_cookie
print("The total is: " + str(total) + "$")
The total is: 21$
Kayan noktalıyı string’e dönüştürürken de aynı şekilde çalışır.
Python’da, mümkün olduğunda string’leri tamsayı ve kayan noktalı değerlere de dönüştürebilirsiniz. Bunun ne anlama geldiğine bakalım:
price_cake = '15'
price_cookie = '6'
# String birleştirme
total = price_cake + price_cookie
print("The total is: " + total + "$")
# Tamsayıya açık tür dönüştürme
total = int(price_cake) + int(price_cookie)
print("The total is: " + str(total) + "$")
The total is: 156$
The total is: 21$
Kodu adım adım inceleyelim.
price_cake ve price_cookie başlangıçta string’tir. Daha sonra toplamı bulmanız gerekir; bu da önce bunların karşılık gelen tamsayı değerlere dönüştürülmesini gerektirir. Aksi halde derleyici, yapmak istediğiniz işlemin sayısal toplama değil, string birleştirme olduğunu varsayacaktır. Ardından bu değeri son gösterim dizgesine koymanız gerektiğinden, toplamı geri kalan mesajla birleştirmek için string’e dönüştürmeniz gerekir.
Umarız bu örnek veri tipi dönüşümlerinin önemini görmenize yardımcı olmuştur. Bu çok küçük bir veri tipi dönüştürme örneği olsa da ne kadar faydalı olabileceğini şimdiden görebilirsiniz.
Not: string’i tamsayıya veya kayan noktalıya dönüştürürken “mümkün olduğunda” ifadesini fark ettiniz mi? Bunun nedeni, her zaman string’leri sayılara dönüştürmenin ve üzerlerinde sayısal işlemler uygulamanın mümkün olmamasıdır. Derleyici bunun farkındadır ve bu yüzden denediğinizde size bir hata verir. Aşağıdaki örneğe bakın:
price_cake = 'fifteen'
price_cookie = 'six'
total = int(price_cake) + int(price_cookie)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-25-80591b8accda> in <module>()
1 price_cake = 'fifteen'
2 price_cookie = 'six'
----> 3 total = int(price_cake) + int(price_cookie)
ValueError: invalid literal for int() with base 10: 'fifteen'
Özet: Python İlkel Veri Tipi Dönüşümleri
| Dönüşüm | İşlev | Örnek | Çıktı |
|---|---|---|---|
| Tamsayıdan Kayan Noktaya | float() |
float(3) |
3.0 |
| Kayan Noktadan Tamsayıya | int() |
int(3.9) |
3 |
| String’ten Tamsayıya | int() |
int('123') |
123 |
| Tamsayıdan String’e | str() |
str(123) |
'123' |
İlkel Olmayan Veri Yapılarında Dönüşümler
Python’da demet ve listeye tür dönüştürme
Tamsayılar ve kayan noktalılarda olduğu gibi, listeleri demetlere ve demetleri listelere de dönüştürebilirsiniz.
Demetler ve listeler neydi? Python’da Listeler ve Demetler, homojen öğe koleksiyonlarını saklamak için kullanılır. Demetlerle listeler arasındaki fark, demetlerin değiştirilemez (immutable) olmasıdır; yani bir kez tanımlandıktan sonra içlerindeki değerleri silemez, ekleyemez veya düzenleyemezsiniz.
Neden listeleri demetlere dönüştürürsünüz?
Çünkü demetler değiştirilemez veri tipleridir ve oluşturduğunuz programlarda kayda değer optimizasyonlara olanak tanırlar.
Peki neden demetleri listelere dönüştürürsünüz?
Belki başlangıçtaki demette değişiklik yapmak istersiniz. Bu durumda demeti listeye çevirip değişikliği yapar, sonra tekrar demete dönüştürebilirsiniz.
Python’da, kendisine geçirilen değerin demet sürümünü döndürmek için tuple() işlevini ve benzer şekilde bir demeti listeye dönüştürmek için list() işlevini kullanabilirsiniz:
a_tuple = ('a', 1) ,('f', 2), ('g', 3)
b_list = [1,2,3,4,5]
print(tuple(b_list))
print(list(a_tuple))
(1, 2, 3, 4, 5)
[('a', 1), ('f', 2), ('g', 3)]
Benzer şekilde, Python’da bir string’i listeye veya demete şöyle dönüştürebilirsiniz:
dessert = 'Cake'
# Bir string'teki karakterleri tek tek bir demet öğelerine dönüştür
print(tuple(dessert))
# Bir string'i listeye dönüştür
dessert_list = list(dessert)
dessert_list.append('s')
print(dessert_list)
('C', 'a', 'k', 'e')
['C', 'a', 'k', 'e', 's']
Python’da sözlük ve kümeye tür dönüştürme
Bir demeti sözlüğe dönüştürmek için dict() ve bir listeyi kümeye dönüştürmek için set() işlevini kullanabilirsiniz.
print(dict(a_tuple))
print(set(b_list))
{'a': 1, 'f': 2, 'g': 3}
{1, 2, 3, 4, 5}
Diğer dönüştürme işlevlerine benzer şekilde, herhangi bir veri tipini sözlüklere ve kümelere dönüştürmek için yalnızca işlev adını sağlamanız yeterlidir.
Yapılandırılmış Veri için dataclasses kullanma (Python 3.7+)
Sözlükler veya demetler yerine, dataclasses yapılandırılmış veriyi ele almak için daha iyi bir yol sunar.
from dataclasses import dataclass
@dataclass
class Product:
name: str
price: float
in_stock: bool
item = Product("Laptop", 799.99, True)
print(item) # Output: Product(name='Laptop', price=799.99, in_stock=True)
Özet: Python İlkel Olmayan Veri Yapıları Dönüşümleri
| Dönüşüm | İşlev | Örnek | Çıktı |
|---|---|---|---|
| Listeden Demete | tuple() |
tuple([1, 2, 3]) |
(1, 2, 3) |
| Demetten Listeye | list() |
list(('a', 1)) |
['a', 1] |
| String’ten Listeye | list() |
list('Cake') |
['C', 'a', 'k', 'e'] |
| String’ten Demete | tuple() |
tuple('Cake') |
('C', 'a', 'k', 'e') |
| Demetten Sözlüğe | dict() |
dict((('a', 1), ('b', 2))) |
{'a': 1, 'b': 2} |
| Listeden Kümeye | set() |
set([1, 2, 3, 4, 5]) |
{1, 2, 3, 4, 5} |
Unicode, İkili (Binary), Sekizli (Octal) ve Onaltılı (Hexadecimal) Tamsayılar Python’da
Sayı sistemleri, herhangi bir sayısal değeri temsil etmek için kullanılan sembol veya karakter sayısını ifade eder. Günlük hayatta kullandığınız sayı sistemi onluk (decimal) olarak adlandırılır. Onluk sistemde 0, 1, 2, 3, 4, 5, 6, 7, 8 ve 9 olmak üzere on farklı sembol kullanırsınız. Bu on sembolle herhangi bir niceliği temsil edebilirsiniz. Unicode, İkili, Onaltılı ve Sekizli farklı sayı sistemlerine karşılık gelir.
Semboller bittiğinde bir sonraki basamağa geçersiniz. Onluk sistemde 9’dan bir fazlasını temsil etmek için 10 kullanırsınız; bu, bir tane onluk ve sıfır tane birlik anlamına gelir. Ancak diğer sayı sistemlerinde durum farklıdır. Örneğin yalnızca 0 ve 1 olmak üzere iki sembol kullanan ikili sistemde, semboller bittiğinde bir sonraki basamağa geçmeniz gerekir. Bu yüzden ikili sistemde sayma şu şekildedir: 0, 1, 10, 11, 100, 101, vb.
Bir sonraki bölümlerde bazı sayı sistemlerini daha ayrıntılı inceleyelim.
Python’da ikiliden onluya dönüştürme
İkili tamsayılar, tabanı iki olan sayılarla temsil edilir. Bu, ikili sayı sisteminde sayıları temsil etmek için yalnızca iki sembol olduğu anlamına gelir: 0 ve 1. İkili olarak sıfırdan yukarı doğru sayarken semboller daha çabuk tükenir: 0, 1, ???
Dahası, başka sembol kalmaz. 2 rakamına geçmezsiniz çünkü 2 ikilide yoktur. Bunun yerine 1’ler ve 0’ların özel bir birleşimini kullanırsınız. İkili sistemde 1000, onlukta 8’e eşittir. İkilide iki üsleri kullanırsınız; yani 8 temel olarak şöyledir: (1(2^3)) + (0(2^2)) + (0(2^1)) + (0(2^0)) = 8. 1 ve 0’ın konumu, 2’nin hangi kuvvetine yükseltileceğini belirler.
Bunu daha net görmek için daha karmaşık bir örneğe bakalım:
Binary Number = 1001111
Decimal value = (1*(2^6)) + (0*(2^5)) + (0*(2^4)) + (1*(2^3)) + (1*(2^2)) + (1*(2^1)) + (1*(2^0))
= 79
Python’da, onluk bir değeri karşılık gelen ikili değere dönüştürmek için bin() işlevini doğrudan kullanabilirsiniz.
Benzer şekilde, ikiliyi onluya dönüştürmek için int() işlevini kullanırsınız. int() işlevi ikinci argüman olarak dönüştürülecek sayının tabanını alır; ikili sayılar için bu değer 2’dir.
a = 79
# Taban 2 (binary)
bin_a = bin(a)
print(bin_a)
print(int(bin_a, 2)) #Base 2(binary)
0b1001111
79
Python’da sekizliden onluya dönüştürme
Sekizli, geleneksel onluk sistemden daha az sembole sahip başka bir sayı sistemidir. Tabanı sekizdir; yani tüm nicelikleri temsil etmek için sekiz sembol kullanılır. Bunlar 0, 1, 2, 3, 4, 5, 6 ve 7’dir. 7’den sonra 8 olmadığı için 10 gelir.
İkilide sayının değerini belirlemek için iki üslerini kullandığınız gibi, burada da taban sekiz olduğu için 8’in üslerini kullanırsınız.
İkili sistemde 10, sekizlide 8’e eşittir. Açalım: (1(8^1)) + (0(8^0)) = 8.
Daha karmaşık bir örnek:
Octal Number = 117
Decimal value = (1*(8^2)) + (1*(8^1)) + (7*(8^0))
= 79
Python’da, onluk bir değeri karşılık gelen sekizli değere dönüştürmek için oct() işlevini kullanabilirsiniz. Alternatif olarak, int() işlevini ve doğru tabanı (sekizli için 8) da kullanabilirsiniz.
a = 79
# Taban 8 (octal)
oct_a = oct(a)
print(oct_a)
print(int(oct_a, 8))
0o117
79
Python’da onaltılıdan onluya dönüştürme
Onaltılı, tabanı 16 olan bir sayı sistemidir. İkili ve sekizlinin aksine, onluk sistemde bulunan sayılara ek olarak altı fazladan sembol kullanır.
Peki 9’dan sonra ne gelir?
Normal sayısal değerlerin ötesinde ek sembollere ihtiyaç duyulduğunda harfler kullanılır. Dolayısıyla onaltılıda kullanılan toplam semboller şunlardır: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E ve F.
Önceki örnekle aynı değeri kullanalım:
Hexadecimal Number = 4F
Decimal value = (4*(16^1)) + (F*(16^0))
= 79
Python’da, onluk bir değeri karşılık gelen onaltılı değere dönüştürmek için hex() işlevini ya da onaltılı sayı sistemi için tabanı 16 olan int() işlevini kullanabilirsiniz.
a = 79
# Taban 16 (hexadecimal)
hex_a = hex(a)
print(hex_a)
print(int(hex_a, 16))
0x4f
79
Unicode’u karaktere dönüştürme
Python chr(), unicode tamsayılarını bir string’e dönüştürür. Unicode, çeşitli dillerin yazılı metinlerinin görüntülenmesi için evrensel olarak kabul edilen bir karakter kodlamasıdır.
“DATACAMP” ifadesini göstermek için chr() işlevine çeşitli Unicode tamsayıları verdik. Tek bir karakteri Unicode tamsayısına dönüştürmek için ord() da kullanabilirsiniz.
print(
chr(68),
chr(65),
chr(84),
chr(65),
chr(67),
chr(65),
chr(77),
chr(80),
)
D A T A C A M P
Özet: Python Sayı Sistemleri Dönüşümleri
| Dönüşüm | İşlev | Örnek | Çıktı |
|---|---|---|---|
| Onluktan İkiliye | bin() |
bin(79) |
0b1001111 |
| İkiliden Onluya | int() |
int('1001111', 2) |
79 |
| Onluktan Sekizliye | oct() |
oct(79) |
0o117 |
| Sekizliden Onluya | int() |
int('117', 8) |
79 |
| Onluktan Onaltılıya | hex() |
hex(79) |
0x4f |
| Onaltılıdan Onluya | int() |
int('4F', 16) |
79 |
| Unicode’dan Karaktere | chr() |
chr(68) |
'D' |
| Karakterden Unicode’a | ord() |
ord('D') |
68 |
Tebrikler!
Tebrikler! Python’da, ağırlıklı olarak yerleşik yöntemleri kullanarak veri tipi dönüşümlerini öğrendiniz. Bu, programlarınızı yazarken size daha fazla esneklik sağlayarak çeşitli veri tipleriyle çalışmanıza kesinlikle yardımcı olacaktır.
Matplotlib ile verinizi nasıl görselleştireceğinizi, sözlüklerle ve ünlü pandas DataFrame ile nasıl çalışacağınızı öğrenebileceğiniz harika bir Veri Bilimi için Orta Düzey Python kursumuz var. Ayrıca döngülerle programınızın akışını nasıl kontrol edebileceğinizi de göreceksiniz. Kursun sonunda, öğrendiklerinizi uygulayabileceğiniz ve bilginizi işe koşabileceğiniz bir vaka çalışması da bulunur!
SSS
Python’da bir tamsayı listesini tek bir string’e nasıl dönüştürürsünüz?
map() ile birlikte join() yöntemini kullanarak her tamsayıyı string’e dönüştürüp birleştirebilirsiniz.
int_list = [1, 2, 3, 4]
result = ''.join(map(str, int_list))
print(result) # Output: '1234'
Sayısal olmayan bir string’i Python’da tamsayıya dönüştürmeye çalışırsanız ne olur?
Geçersiz bir dizgenin tamsayı olmadığına dair bir ValueError yükseltilir.
int('abc') # Raises ValueError: invalid literal for int() with base 10: 'abc'
Python’da bir kümeyi listeye dönüştürebilir misiniz? Nasıl?
Evet, bir kümeyi list() işlevini kullanarak listeye dönüştürebilirsiniz.
a_set = {1, 2, 3}
a_list = list(a_set)
print(a_list) # Output: [1, 2, 3]
Boşlukla ayrılmış sayılardan oluşan bir string’i tamsayı listesinə nasıl dönüştürürsünüz?
String’i bölmek için split() yöntemini ve her bir kısmı tamsayıya dönüştürmek için map()’i kullanın.
numbers = "1 2 3 4"
int_list = list(map(int, numbers.split()))
print(int_list) # Output: [1, 2, 3, 4]
Python’da bir değişkenin veri tipini kontrol etmek için hangi işlevi kullanabilirsiniz?
Bir değişkenin veri tipini kontrol etmek için type() işlevini kullanabilirsiniz.
x = 5
print(type(x)) # Output: <class 'int'>
Çeşitli sektörlerde çalıştım ve birden çok rol üstlendim: yazılım geliştirici, makine öğrenimi araştırmacısı, veri bilimci, ürün yöneticisi. Ancak özünde, öğrenmeyi ve bilgiyi paylaşmayı seven bir programcıyım!

