Skip to content

Latest commit

 

History

History
204 lines (139 loc) · 7.01 KB

File metadata and controls

204 lines (139 loc) · 7.01 KB

### Fonksiyonlar Devamı

Python’da, fonksiyon parametrelerinin sadece konum ya da sadece anahtar kelime ile çağrılmasını sağlamak için / ve * sembolleri kullanılır. Bu özellikler, fonksiyonlara girilen argümanların nasıl ve hangi sırayla verilmesi gerektiğini daha net bir şekilde belirtmeye yarar.

Sadece Konumla Girilen Argümanlar (Positional-Only Arguments)

Bir fonksiyonun sadece konumla girilen argümanlar almasını istiyorsanız, parametrelerin sonuna / sembolünü ekleyebilirsiniz. Bu durumda, /'dan önce tanımlanan parametreler yalnızca konum yoluyla verilebilir ve anahtar kelime ile verilirse hata alırsınız.

Örnek:

def my_function(x, /):
    print(x)

my_function(3)       # Bu geçerli, çünkü argüman konumla giriliyor.
my_function(x=3)     # Bu geçersiz ve hata verir, çünkü x yalnızca konumla girilmeliydi.
Neden Kullanılır?

Sadece konumla girilen argümanlar, bir fonksiyonun belirli bir sırayla çağrılmasını garanti eder ve fonksiyonun çağrılırken x=... gibi anahtar kelimelerle verilmesini istemediğiniz durumlarda faydalıdır.

Sadece Anahtar Kelimeyle Girilen Argümanlar (Keyword-Only Arguments)

Bir fonksiyonun bazı parametrelerinin yalnızca anahtar kelimeyle belirtilmesini istiyorsanız, parametre listesinin başına * sembolü ekleyebilirsiniz. *'den sonraki parametreler yalnızca anahtar kelimeyle girilebilir; yani, doğrudan konumla girilirse hata alınır.

Örnek:

def my_function(*, x):
    print(x)

my_function(x=3)     # Bu geçerli, çünkü x anahtar kelimeyle belirtilmiş.
my_function(3)       # Bu geçersiz ve hata verir, çünkü x anahtar kelime olarak verilmeliydi.
Neden Kullanılır?

Anahtar kelimeyle girilen argümanlar, kodun daha anlaşılır olmasını sağlar. Ayrıca, belirli bir parametrenin yanlış sırayla verilme riskini azaltır, çünkü her parametre anahtar kelimeyle tanımlandığı için hangi değerin hangi parametreye ait olduğu açıkça bellidir.

Özet:

  • / sembolü: parametre / biçiminde kullanılır ve yalnızca konum ile girilen parametreleri belirtir.
  • * sembolü: *, parametre biçiminde kullanılır ve yalnızca anahtar kelimeyle girilen parametreleri belirtir.

Bu özellikler özellikle çok sayıda parametre içeren veya dikkatli çağrılması gereken fonksiyonlarda faydalıdır.


Değer Döndürmek

Bir fonksiyonun sonuç olarak bir değer döndürmesi için return ifadesi kullanılır:

def my_function(x):
    return 5 * x

print(my_function(3))
print(my_function(5))
print(my_function(9))

Rekürsiyon (Recursion)

Bir fonksiyonun kendisini çağırmasına rekürsiyon denir:

def tri_recursion(k):
    if k > 0:
        result = k + tri_recursion(k - 1)
        print(result)
    else:
        result = 0
    return result

print("Rekürsiyon Örneği:")
tri_recursion(6)

Rekürsiyon, dikkatli yazılmadığında sonsuz döngüye girme riski taşır.


Değişkenlerin Kapsamı ve Global Değişkenler

Python'da değişkenlerin hangi alanlarda geçerli olduğunu belirleyen bir kapsam (scope) kavramı vardır. Fonksiyon içinde tanımlanan değişkenler yalnızca o fonksiyon içinde geçerlidir. Ancak global anahtar kelimesi kullanılarak değişkenler global hale getirilebilir:

def fonksiyon_a():
    global a
    a = 1
    b = 2
    return a + b

def fonksiyon_b():
    c = 3
    return a + c

print(fonksiyon_a())  # Çıktı: 3
print(fonksiyon_b())  # Çıktı: 4

Global değişkenler genellikle önerilmez, çünkü başka bir fonksiyonda kazara değiştirilebilirler.


Lambda Fonksiyonları

Lambda fonksiyonları, Python'da tek satırlık, küçük ve anonim fonksiyonlar oluşturmak için kullanılır.

Lambda fonksiyonlarının genel yapısı şöyledir:

lambda argüman1, argüman2, ... : ifade
  • argüman1, argüman2, ... → Lambda fonksiyonuna girilen parametreler.
  • ifade → Fonksiyonun geri döndüreceği sonuç, burada yalnızca tek bir ifade olabilir.

Örnekler

  1. Basit Toplama İşlemi

    toplama = lambda x, y: x + y
    print(toplama(3, 5))  # Çıktı: 8
    • Burada toplama isimli bir lambda fonksiyonu tanımlandı. Bu fonksiyon, x ve y parametrelerini alır ve bunların toplamını döner.
  2. Karesini Alma

    karesi = lambda x: x ** 2
    print(karesi(4))  # Çıktı: 16
    • karesi fonksiyonu bir sayıyı alır ve karesini döner.
  3. Koşullu İfade Kullanımı

    çift_mi = lambda x: "Çift" if x % 2 == 0 else "Tek"
    print(çift_mi(5))  # Çıktı: Tek
    print(çift_mi(4))  # Çıktı: Çift
    • Bu örnekte x sayısının çift olup olmadığını kontrol eden bir lambda fonksiyonu oluşturulmuştur.
  4. Liste Elemanlarını Sıralamak

    Lambda fonksiyonları, sorted() gibi fonksiyonlarda key parametresi ile de kullanılabilir.

    sayılar = [(1, 2), (4, 1), (5, -1), (3, 3)]
    sıralı = sorted(sayılar, key=lambda x: x[1])
    print(sıralı)  # Çıktı: [(5, -1), (4, 1), (1, 2), (3, 3)]
    • Burada sorted() fonksiyonuna key olarak verilen lambda, her tuple'ın ikinci elemanına göre sıralama yapılmasını sağlıyor.
  5. Harita (map) Fonksiyonu ile Kullanım

    map() fonksiyonu, bir liste gibi veri yapılarının her elemanına belirli bir işlevi uygulamak için kullanılır.

    sayılar = [1, 2, 3, 4]
    kareler = list(map(lambda x: x ** 2, sayılar))
    print(kareler)  # Çıktı: [1, 4, 9, 16]
    • Bu örnekte, map() fonksiyonu ile her sayının karesi alınmıştır.

DRY (Don’t Repeat Yourself)

Tekrarlayan kodlardan kaçınmak için aynı kod parçasını bir fonksiyon içine almanız önerilir. Böylece, tek bir yerde değişiklik yaparak tüm kodunuzu güncel tutabilirsiniz. Bu, kodunuzu daha okunabilir ve bakımı daha kolay hale getirir.


Örnek Uygulama:

def fibonacci(n):
    fib_sequence = [0, 1]

    for i in range(2, n):
        next_number = fib_sequence[i - 1] + fib_sequence[i - 2]
        fib_sequence.append(next_number)
    return fib_sequence[:n]  

n = int(input("Kaç Fibonacci sayısı görmek istersiniz? "))

if n <= 0:
    print("Lütfen pozitif bir sayı girin.")
else:
    print("Fibonacci dizisi:", fibonacci(n))

Hafta4 Projesi: Öğrenci Yönetim Uygulaması

Son haftada Python eğitmimizi sonlandırırken uygulama yaparak bu zamana kadar öğrendiklerimizi pekiştirdik. Proje olarak terminalden çalışan bir öğrenci yönetim programı yazdık. Bundan önceki haftalarda öğrendiğimiz yapıların büyük bir kısımını kullanarak pekiştirmiş olduk. Proje dosyası linki: Proje dosyası için tıklayabilirsiniz...

Verdiğimiz projeyi başarıyla tamamlayan Aziz arkadaşımızın kaynak kodları da burada bulunuyor. Proje dosyası linki: Proje dosyası için tıklayabilirsiniz