Gömülü (built-in) fonksiyonlar Python'un çakısıdır: hiçbir şey kurmadan, hiçbir şey import etmeden her yerde hazırdırlar. Zaten birini aylardır kullanıyorsun — print() de bir gömülü fonksiyondur! Bir fonksiyonu çağırmak hep aynı kalıptır: isim, parantez, içine değer:
len("merhaba") # fonksiyona "merhaba" veriyoruz, o bize 7 veriyor
Fonksiyon bir sonuç döndürür — bu sonucu değişkene atayabilir, başka fonksiyona verebilir, ekrana basabilirsin. Şimdi çakının aletlerini tek tek açalım.
len() (length = uzunluk) bir şeyin kaç parçadan oluştuğunu sayar: string'de harfleri (boşluk dahil!), listede elemanları:
print(len("ilker turan")) # 11 (boşluk da sayılır)
print(len([1, 2, 3, 4, 5])) # 5
print(len(range(10))) # 10
TypeError alırsın. len yalnızca string, liste, range gibi koleksiyonlarla çalışır. Sayının basamak sayısı lazımsa önce str() ile metne çevir: len(str(12345)) → 5.int(), float(), str(), bool(), list() veri tiplerini birbirine çevirir. type() ise "bu değer ne türden?" sorusuna cevap verir — dedektif aletin:
metin = "100" print(metin * 2) # 100100 ← metin çoğaldı! print(int(metin) * 2) # 200 ← şimdi matematik oldu print(type(metin)) # <class 'str'>
"100" + 50 → TypeError. "100" * 2 → hata YOK ama 100100! Kod tuhaf davranıyorsa ilk işin type() ile bakmak olsun.Bir sayı listesinin toplamı, en küçüğü ve en büyüğü için döngüye gerek yok:
degerler = [2, 4, 6, 8] print(sum(degerler)) # 20 print(min(degerler)) # 2 print(max(degerler)) # 8
Ortalamanın hazır fonksiyonu yok ama tarifi iki aletin işbirliği:
ortalama = sum(degerler) / len(degerler) # 5.0
sum(...) / len(...). Eleman sayısını elle yazma (/ 4 gibi) — liste değişince kodun sessizce yanlış hesaplar!abs() (absolute) sayının mutlak değerini, yani sıfıra uzaklığını verir:
print(abs(-10)) # 10 print(abs(10)) # 10
Karar Verme dersinde bunu elle kurmuştuk: deger if deger > 0 else -deger — abs bu kodun hazır halidir. Fark, mesafe, borç/alacak hesaplarının vazgeçilmezi.
round() en yakın tam sayıya yuvarlar; ikinci parametre "virgülden sonra kaç basamak kalsın?" der:
pi = 3.14159 print(round(pi)) # 3 print(round(pi, 2)) # 3.14 print(round(pi, 3)) # 3.142
int() ile karıştırma: int(3.7) ondalığı kırpar (3), round(3.7) en yakına gider (4).
round(2.5) → 2, round(3.5) → 4, round(4.5) → 4. Neden? Milyonlarca işlemde hep yukarı yuvarlamak toplamı şişirir; çifte gitmek bu yanlılığı sıfırlar. Bankacılar böyle yuvarlar, adı oradan gelir.sorted() koleksiyonun sıralanmış yeni bir kopyasını döndürür; reverse=True ile büyükten küçüğe:
degerler = [8, 5, 1, 9] print(sorted(degerler)) # [1, 5, 8, 9] print(sorted(degerler, reverse=True)) # [9, 8, 5, 1] print(degerler) # [8, 5, 1, 9] ← orijinal duruyor!
String verirsen harfleri, isim listesi verirsen isimleri alfabetik sıralar. Sıralı listenin uçları çok iş görür: sorted(d)[-2] = ikinci en büyük!
sorted(d) tek başına bir işe yaramaz, sirali = sorted(d) de. (Listeyi yerinde değiştiren .sort() metodu ayrı bir şeydir — ikisini karıştırma.)print'e virgülle istediğin kadar değer verirsin. sep (ayraç) değerlerin arasına, end (bitiş) en sona ne geleceğini belirler:
print(1, 2, 3) # 1 2 3 (sep varsayılan: boşluk)
print(1, 2, 3, sep="*") # 1*2*3
print("yükleniyor", end="... ") # satır atlamadı!
print("bitti") # yükleniyor... bitti
end'in varsayılanı "\n" (satır atlama) olduğu için her print yeni satıra geçer — end'i değiştirirsen sonraki print aynı satırdan devam eder.
Gömülü fonksiyonlar çakıysa, modüller alet çantasıdır: konuya özel araçlarla dolu, ama kullanmadan önce import ile çantayı açman gerekir. İki biçim var:
import math # çantayı komple al → math.sqrt(9) from math import sqrt # çantadan tek aleti çıkar → sqrt(9)
import math biçimi daha güvenlidir: math.sqrt yazınca aletin hangi çantadan geldiği hep görünür. from ... import ... kısa yazdırır ama kalabalık programda "bu sqrt nereden geldi?" karmaşası yaratabilir.NameError: name 'math' is not defined alırsın — çanta kapalıyken alete uzanamazsın! import satırları geleneksel olarak dosyanın en başına yazılır.Matematik çantasının en çok kullanılan aletleri:
import math print(math.sqrt(144)) # 12.0 karekök (sonuç hep float!) print(math.pi) # 3.141592653589793 print(math.ceil(3.2)) # 4 tavan: HEP yukarı print(math.floor(3.8)) # 3 taban: HEP aşağı
ceil'in klasik senaryosu: 130 öğrenci, 40 kişilik otobüs → 130/40 = 3.25 → math.ceil(3.25) = 4 otobüs. round dersen 3 çıkar, 10 öğrenci yolda kalır! 😄
math.floor(-2.3) → -3 (−2 değil!), ama int(-2.3) → -2 (sadece kırpar). Pozitiflerde aynı görünen bu iki fonksiyon, negatifte yollarını ayırır.Şans çantası random: zar, kura, karıştırma...
import random print(random.randint(1, 6)) # 1-6 arası zar (İKİ UÇ DA dahil!) print(random.choice(["elma", "armut"])) # listeden rastgele seçim
Peki seed ne işe yarar? Bilgisayar aslında gerçek rastgelelik üretemez — sayıları bir tohumdan (seed) türetir. Tohumu sen sabitlersen dizi hep aynı yerden başlar:
random.seed(42) print(random.randint(1, 6)) # her çalıştırmada AYNI sayı çıkar!
Bir fonksiyonun nasıl kullanıldığını unuttun mu? Python'a sor:
help(print) # sep, end ve diğer parametreleri anlatır help(round) # ikinci parametrenin adını söyler
Çıktı ilk bakışta teknik görünür ama alışınca en hızlı başvuru kaynağın olur — internete bile gerek yok. Parantezsiz yazdığına dikkat: help(print), fonksiyonun kendisini soruyorsun, sonucunu değil.