Python'da Alt Programlama Kavramları ve Örnekler

Python'da Alt Programlama Kavramları ve Örnekler

Python'da alt programlama kavramları, modüller, fonksiyonlar, sınıflar ve daha fazlası bu rehberde! Örneklerle adım adım Python alt programlama becerilerinizi geliştirin Başlangıçtan ileri seviyeye kadar her seviyeye uygun!

Python'da Alt Programlama Kavramları ve Örnekler

Python, çok çeşitli uygulama alanlarına sahip olan bir programlama dilidir. Bu dilde, kod bloklarına parça parça ayrılabilen ve tekrar kullanılabilen birçok programlama kavramı bulunmaktadır. Bu makalede, Python'da kullanılan alt programlama kavramlarına ve örneklerine değineceğiz.

Python'da kullandığımız modüller ve paketler sayesinde, yazdığımız kodları daha düzenli ve okunaklı hale getirebiliriz. Bunun yanı sıra, modüller ve paketler kodun tekrar kullanılabilirliğini artırır. Python'da modülleri "import" anahtar kelimesi ile yükleme işlemi yapabiliriz. İlgili modül yüklendiğinde, içindeki fonksiyonlar ve nesneler bize kullanım için hazır hale gelir.

Fonksiyonlar, belirli bir işi gerçekleştiren ve parametrelerle çalışan kod bloklarıdır. Python'da fonksiyonlar, "def" anahtar kelimesi ile tanımlanır. Fonksiyonlar, aynı işi tekrar etmek istediğimizde kullanabileceğimiz tekrar kullanılabilir kod bloklarıdır. Fonksiyonlarda kullanılan parametreler, fonksiyonların işlevlerini yerine getirmesine yardımcı olur.

  • Varsayılan Parametreler: Fonksiyonlarda parametreler, varsayılan değerlerle birlikte tanımlandığında, varsayılan parametrelere dönüşür. Bu sayede, fonksiyon çağrısı sırasında parametre değeri verilmediğinde, varsayılan değer kullanılarak fonksiyon çalışır.
  • Esnek Parametreler: Python'da *args ve **kwargs olarak adlandırılan esnek parametreler, fonksiyonlarda parametre sayısını esnek hale getirir. Bu sayede, fonksiyon çağrısı sırasında farklı sayıda parametreler verilebilir.

Dekoratörler, Python'da tanımlanan fonksiyonların davranışlarını değiştirmek için kullanılan özelliklerdir. Fonksiyonları değiştirerek yeni davranışlar ekleyebilir veya mevcut davranışları değiştirebiliriz.

Sınıflarda ve nesnelerde, Python'da kodlanan her şey bir nesne olarak düşünülebilir. Sınıflar temel olarak nesnelerin çatısıdır ve nesnelerin davranışlarını belirleyen özellikleri içerirler. Python'da sınıflar, "class" anahtar kelimesi ile tanımlanır. Sınıflar miras alarak, başka bir sınıfın davranışlarını veya özelliklerini kullanabilir.

  • Özellikler ve Yöntemler: Sınıflarda, nesnelerin özellikleri veya davranışları olarak düşünebileceğimiz özellikler ve yöntemler tanımlanabilir. Sınıflarda tanımlanan özellikler, nesnelerin farklı verilerini depolayabilirken, yöntemler nesnelerin işlevlerini yerine getirmek için kullanılır.

Bu makalede, Python'da kullanılan alt programlama kavramlarına ve örneklerine değindik. Bu kavramlar, Python kodunun temel yapı taşlarıdır ve kod yazma sürecimizi daha kolay hale getirirler.


Modüller ve Paketler

Python, diğer programlama dillerinde olduğu gibi alt programlama kavramlarını da içerisinde barındırır. Bu kapsamda, Python'da modüller ve paketler oldukça önemli yer tutar. Modüller, Python ile yerel bir projede yazılan kodların başka bir projede kullanılabilmesi için kullanılan bir yapıdır. Paketler ise, modüllerin daha iyi organize edilmesi ve genel bir yapı oluşturulması açısından kullanılan bir yapıdır.

Python'da modüller ve paketler oldukça kullanışlıdır. Böylece, tekrarlanabilir kodlar daha hızlı bir şekilde yazılabilir ve diğer projelerde de kullanılabilir hale gelir. Modüllerin ve paketlerin kullanılması, kodların daha düzenli ve anlaşılır olmasını da sağlar.

Python'da bir modül ya da paket kullanmak için, öncelikle bu yapıların içerisindeki kodların çalıştırılabilmesi için Python'ın bu yapıları tanıması gerekmektedir. Bunun için, modül ya da paketin yolu Python'a gösterilmelidir. Bu yolu göstermek için PYTHONPATH ortam değişkeni kullanılır. Bu değişkenin içerisine modül ya da paketin dosya yolu eklenerek Python'a tanıtılabilir.

Python'da modüller ve paketler birçok işlemde kullanılabilir. Örneğin, bir web uygulaması geliştirirken çok sayıda modüle ihtiyaç duyulabilir. Bu modülleri doğru bir şekilde kullanmak ve yönetmek, uygulamanın performansını olumlu etkileyecektir.

  • Bir modül yaratmak için, modül dosyasının adının sonuna .py uzantısını eklemelisiniz.
  • Paketler, birkaç modülü tek bir klasörde organizasyonu sağlamak içindir.
  • Python, ana sayfasından herhangi bir modül yüklemenizi sağlayan kapsamlı bir paket yöneticisine sahiptir.

Python'daki modüller ve paketlerin kullanımı oldukça kolaydır ve programlama sürecinde yer alan diğer kavramlarla uyumlu bir şekilde çalışır. Bu nedenle, alt programlama kavramlarını öğrenirken modüller ve paketlerin kullanımı da oldukça önemlidir.


Fonksiyonlar

Python'da fonksiyonlar programlama dilinin temel yapı taşlarından biridir. Bir fonksiyon, belirli bir görevi yerine getiren, bir ya da daha fazla girdi (parametre) alan, bu girdileri işleyen ve sonunda bir çıktı (return) üreten kod bloklarıdır. Fonksiyonlar, bir programda herhangi bir yerde, birden fazla kez, farklı parametrelerle kullanılabilir ve kod tekrarını engeller.

Python'da fonksiyonlar farklı türlerde oluşturulabilir. Örneğin, temel bir fonksiyon, fonksiyon bloğunda tanımlanan en basit fonksiyondur. Aynı zamanda lambda fonksiyonları, iç içe fonksiyonlar, rekurzif fonksiyonlar ve generator fonksiyonları da oluşturulabilir.

Fonksiyonların parametreleri, girdi olarak kullanılan değerlerdir. Parametrelerin birkaç türü vardır. Birinci tür, fonksiyon çağrısı sırasında belirli bir değer atanırken kullanılan pozisyonal parametrelerdir. İkinci tür, fonksiyon çağrısı sırasında değer ataması yapılmadan önce var olan veya varsayılan değere sahip olan varsayılan parametrelerdir. Üçüncü tür, girdi sayısı önceden belli olmayan (ön tanımsız) esnek parametrelerdir. Bu parametreler, "*" veya "**" işaretleri kullanılarak tanımlanabilir.

Varsayılan parametreler, fonksiyon çağrısı sırasında değer belirtilmese bile otomatik olarak atanan parametrelerdir. Örneğin, bir fonksiyonu def'den sonra fonksiyon(a=10, b=20) şeklinde tanımlarsanız, fonksiyon çağrısı sırasında a veya b belirtilmezse varsayılan değerleri kullanılacaktır.

Esnek parametreler, bir fonksiyon çağrısı sırasında girdi sayısı belli olmayan parametreleri kullanmanıza olanak sağlar. "*" işareti kullanarak sıralı esnek parametreler belirleyebilir veya "**" işareti kullanarak anahtar sözcük argümanları belirleyebilirsiniz.

Bu nedenle, Python'da fonksiyonlar oldukça esnek ve kullanışlıdır. Fonksiyonlar, başka bir kod bloğunda kullanılmak üzere tanımlanabilir veya doğrudan bir programda kullanılabilir. Siz de Python'da fonksiyonları kullanarak programlama dünyasındaki yerinizi sağlamlaştırabilirsiniz.


Parametreler

Python'da parametreler, bir fonksiyona girdi sağlamak için kullanılır. Bir fonksiyonun parametreleri, fonksiyonun başına parantez içinde belirtilir. Python'da fonksiyon parametreleri 4 farklı tipte olabilir.

  • Varsayılan Parametreler: Fonksiyon parametresi değeri belirtilmediğinde, varsayılan değer kullanılır.
  • Zorunlu Parametreler: Fonksiyonun çalışması için gereken en az bir şeydir ve kesinlikle belirtilmelidir.
  • Anahtar Kelime Parametreleri: Parametre adı verilerek belirtilir ve sırayla olmaları gerekmeyebilir.
  • Esnek Parametreler: Bilinmeyen sayıda parametreleri olan fonksiyonlar için kullanılır.

Varsayılan parametreler, parametre belirtilmediğinde kullanılan değerdir. Örneğin:

Fonksiyon Çıktı
def greet(name = "Dünya"): Merhaba Dünya
greet("John") Merhaba John
greet() Merhaba Dünya

Bu örnekte, "name" parametresi belirtilmediğinde, varsayılan değer "Dünya" olarak kullanılır. Daha sonra fonksiyon "greet" çağrıldığında, "name" parametresi belirtilir. İlk çağrıda "John"" ve ikinci çağrıda varsayılan değer olan "Dünya".

Esnek parametreler, bilinmeyen sayıda parametreleri olan fonksiyonlarda kullanılır. Bunlar "*" ve "**" ile başlayan parametrelerdir. "*" listeleri temsil ederken, "**" sözlükleri temsil eder. Örneğin:

Fonksiyon Çıktı
def print_names(*names): print(names)
print_names("Ali", "Veli", "Ahmet") ('Ali', 'Veli', 'Ahmet')

Bu örnekte, "print_names" fonksiyonu, bilinmeyen sayıda isimlerle çağrılabilir. Fonksiyona geçirilen isimler "names" listesi olarak depolanır ve çıktıda birleştirilir.

Python'da parametreler, fonksiyonlara gereken esnekliği sağlayan önemli bir kavramdır. Bu seçenekler arasından seçim yapabilirsiniz, böylece programlarınızda fonksiyonları daha verimli bir şekilde kullanabilirsiniz.


Varsayılan Parametreler

Varsayılan parametreler, bir fonksiyonun şunları yapmasına olanak tanır:

  • Bir parametre belirtilirse, o parametrenin alacağı değeri kullanır.
  • Bir parametre belirtilmezse, varsayılan bir değeri kullanır.

Örneğin, bir fonksiyonun alan adı belirtilmemiş bir e-posta adresini otomatik olarak domain.com olarak ayarlayabileceğini varsayalım. Fonksiyonda varsayılan bir parametre kullanarak bunu yapabiliriz:

Kod Açıklama
def email_domain(email, domain='domain.com'):    return email.split('@')[0] + '@' + domainprint(email_domain('john@gmail.com'))    # john@domain.comprint(email_domain('jane@yahoo.com', 'example.com'))   # jane@example.com            

Bu kod, e-posta adresindeki kullanıcı adını belirleyip, domain.com varsayılan değerini atıyor. İkinci örnekte ise, kullanıcının bu varsayılan değeri değiştirebileceği başka bir domain belirleniyor.

Yukarıdaki örnekte, fonksiyonun domain parametresi varsayılan bir değere sahip olduğu için, bu parametre belirtilmemiş olsa bile fonksiyon çalışacaktır. Bu, fonksiyonun daha esnek hale gelmesini sağlar.


Esnek Parametreler

Python'da esnek parametreler, belirli bir sayıda parametre kabul etmeyen ve istediğimiz kadar parametre göndermemize izin veren bir yapıdır. Bu özellik, bir fonksiyonu birden fazla şekilde çağırmamızı sağlar ve kod tekrarını azaltır.

Bir fonksiyonun esnek parametre alabilmesi için argümanlar iki şekilde tanımlanabilir:

  • *args: Birinci yöntem, *args olarak adlandırılan ve argümanların bir demet veya tuple olarak alındığı bir yapıdır. Bu yapı, fonksiyonun tanımlanmasında kullanılır ve herhangi bir sayıda argümanı kabul edebilir.
  • **kwargs: İkinci yöntem, **kwargs olarak adlandırılan ve anahtar-değer çiftleri şeklindeki argümanların bir sözlük olarak alındığı bir yapıdır. Bu yapı, özellikle argümanların isimleri önemli olduğunda kullanılır.

Aşağıda, bu yapıların nasıl kullanıldığına dair örnekler verilmiştir.

Örnek Açıklama
def my_function(*args):
 for arg in args:
  print(arg)
Bu fonksiyon, argümanların bir tuple olarak alındığı *args yapısını kullanır. Bu fonksiyon herhangi bir sayıda argüman kabul eder ve tüm argümanları alt alta ekrana yazdırır.
def my_function(**kwargs):
 for key, value in kwargs.items():
  print(key, value)
Bu fonksiyon, anahtar-değer çiftleri şeklindeki argümanların bir sözlük olarak alındığı **kwargs yapısını kullanır. Bu fonksiyon herhangi bir sayıda anahtar-değer çifti kabul eder ve tüm anahtar-değer çiftlerini ekrana yazdırır.

Esnek parametreler kullanarak oluşturulan fonksiyonlar, programlama alanında oldukça esnek yapılar oluşturarak kod tekrarını azaltır ve işlem maliyetini düşürür.


Dekoratörler

Python'da dekoratörler, bir fonksiyonun işlevselliğini değiştirmeden önce veya sonra çalışacak bir işlev eklemek için kullanılır. İşlevlerde kullanılan @ sembolü ile tanımlanırlar. Bu sembol, fonksiyonların üstünde kullanılır ve @ sembolünden sonra bir dekoratör fonksiyonunun adı belirtilir.

Bir dekoratör fonksiyonu tanımlamak için, normal bir işlev tanımlarsınız ve daha sonra herhangi bir iç fonksiyon yazarsınız. İç fonksiyon, dekore edilen işlevi çağırır ve herhangi bir ek işlevsellik ekler. Genellikle dekoratörler iç fonksiyonları, dekore edilen işlevi etkilemeden çeşitli işleri yerine getirmeleri için kullanır.

Örneğin, aşağıdaki örnekte, dekoratör fonksiyonu "my_decorator" kullanılarak "say_hello" fonksiyonu dekore edilmiştir. Dekore edilmiş fonksiyon, "my_decorator" fonksiyonunda belirtilen mesajı, fonksiyondan önce ve sonra yazdırır.

def my_decorator(func):   def wrapper():       print("Fonksiyondan önceki mesaj")       func()       print("Fonksiyondan sonraki mesaj")   return wrapper@my_decoratordef say_hello():   print("Merhaba")say_hello()

Bu kod bloğu çalıştırıldığında, "Merhaba" kelimesi "my_decorator" fonksiyonunda belirtilen mesajlardan önce ve sonra yazdırılır. Bu örnek, dekoratörlerin fonksiyonların işlevselliğini değiştiremeden ekstra işlevsellik eklemelerine nasıl izin verdiklerini göstermektedir.


Sınıflar ve Nesneler

Python'da sınıflar, nesnelerin temeli olarak kullanılır. Peki sınıflar tam olarak nedir? Sınıflar, nesnelerin belirli bir örüntüsünü tanımlayan bir kod bloğudur. Sınıftan yola çıkarak bir nesne oluşturulabilir ve bu nesnenin belli özellikleri vardır. Nesne, sınıfın bir örneğidir ve belli özellikleri (değişkenler) ve yöntemleri (fonksiyonlar) içerir.

Sınıflar oluştururken şu iki özelliği kullanabiliriz: özellik(process/property) ve yöntem(method). Özellikler, sınıfa ait değişkenlerdir ve nesnelerin veri saklamalarını sağlar. Yöntemler ise sınıfa ait fonksiyonlardır ve nesneye özel işlemlerin yapılmasını sağlar. Ayrıca sınıflarda statik yöntemler de kullanılabilir. Statik yöntemler, nesneye ait olmayan yöntemlerdir ve genellikle sınıf seviyesinde işlemler yapmak için kullanılırlar.

Nesnelerin oluşturulması için ise sınıf isminden yararlanılabilir. Nesne oluşturulduktan sonra, özelliklere ve metotlara sınıf adı ile erişim sağlanır. Python'da nesne oluşturma işlemi oldukça basittir. Bunu yapmak için, sınıf adını kullanarak bir nesne türetmek yeterlidir.

Örneğin; bir araba sınıfı tanımlamak istediğimizde, sınıf adı olarak "Araba" kullanabiliriz. Bu sınıf özellikleri olarak "model", "renk", ve "yıl" gibi değişkenler içerir. Bu sınıfın hızlanma ve yavaşlama gibi işlemler yapan "hızlan" ve "yavaşla" gibi işlev (method)lerin de olması we can define methods like speedup and slowdown that do operations like acceleration and deceleration. Elde edilen nesne türüne göre, özel olarak oluşturulan özelliklere ve yöntemlere erişilebilir.

Örnek Kod Açıklama
class Araba: Araba sınıfının tanımlanması
    def __init__(self, model, renk, yil): İlk değerlerin atanması
        self.model = model -
        self.renk = renk -
        self.yil = yil -
    def hizlan(self): Araba hızlandığında yapılacak işlev
        print("Araba hızlandı!") -
araba1 = Araba("Ferrari", "Kırmızı", "2019") Yeni bir araba nesnesinin tanımlanması
print(araba1.model, araba1.renk, araba1.yil) Arabanın özelliklerinin yazdırılması
araba1.hizlan() "Araba hızlandı" mesajının yazdırılması

Sınıflar ve nesneler, Python programlama dilinin en önemli yapı taşlarından biridir. Kullanımları oldukça kolaydır ve nesne yönelimli programlamanın temel pratiklerindendir. Doğru bir şekilde kullanıldıklarında, kodlar daha düzenli ve okunaklı hale gelir.


Miras

Python'da miras, bir sınıfın özelliklerinin başka bir sınıfa aktarılmasıdır. Bu yöntem, kod tekrarını azaltır ve nesne yönelimli programlama prensiplerinin uygulanmasını kolaylaştırır. Miras alan sınıf, temel sınıfın özelliklerine sahip olur ve bu özelliklere ek özellikler ekleyebilir.

Bir sınıfı miras almak için, yeni sınıfın adından sonra parantez içinde temel sınıfın adı yazılır. Bu şekilde, yeni sınıf, temel sınıfın özelliklerine erişebilecektir. Örneğin, "hayvan" adında bir sınıfımız varsa, "kedi" adında yeni bir sınıf oluşturmak için şu kodu kullanabiliriz:

class Kedi(Hayvan):    #kedi özellikleri ve metodları

Bu şekilde, "Kedi" sınıfı, "Hayvan" sınıfının özelliklerine sahip olacak ve biz de "Kedi" sınıfı için ek özellikler veya metodlar tanımlayabileceğiz. Örneğin, "Kedi" sınıfı, "Hayvan" sınıfındaki "beslenme" özelliğini kullanabilir ve ayrıca "tüy rengi" gibi yeni bir özellik ekleyebilir.

Mirasın önemli bir yararı, temel sınıfta yapılan değişikliklerin, türetilmiş sınıflara da yansıtılabilmesidir. Örneğin, "Hayvan" sınıfındaki "beslenme" özelliğini değiştirirsek, "Kedi" sınıfı da otomatik olarak etkilenecektir.

Bir sınıfın birden fazla sınıftan miras alması da mümkündür. Bu durumda, parantez içinde virgülle ayrılmış olarak birden fazla sınıf adı belirtilir. Örneğin, "Köpek" sınıfı, hem "Hayvan" sınıfının hem de "EvcilHayvan" sınıfının özelliklerini kullanabilir.

Özetle, miras kavramı, Python'da nesne yönelimli programlama prensiplerinin uygulanmasını kolaylaştıran önemli bir yapıdır. Temel sınıfın özellikleri, türetilmiş sınıflara aktarılarak kod tekrarının önüne geçilir ve değişikliklerin tüm sınıflara yansıması mümkün hale gelir.


Özellikler ve Yöntemler

Python'da sınıfların en önemli özelliklerinden biri, sınıflarda tanımlanan özellikler ve yöntemlerdir. Özellikler, bir sınıfın nesnelerine ait veri alanlarıdır. Örneğin, bir Araba sınıfı oluşturduğumuzda, bu sınıfın özellikleri araba markası, modeli, yılı, rengi vb. olabilir.

Yöntemler ise bir sınıfın nesnelerinde kullanılan işlevlerdir. Örneğin, Araba sınıfımızda fren yapma, hızlanma veya yavaşlama gibi işlemleri gerçekleştiren yöntemler kullanabiliriz. Bu sayede, sınıfın nesnelerinin işlemlerini daha düzenli ve kolay bir şekilde yönetebiliriz.

Bunun yanı sıra, Python'da sınıflarda statik yöntemler de kullanılabilir. Bu yöntemler, sınıfın nesneleriyle değil, sınıfın kendisiyle ilgilidir. Örneğin, Araba sınıfımızda aracın maksimum hızını döndüren bir statik yöntem oluşturabiliriz.

Sınıflarda özellikler ve yöntemler tanımlandıktan sonra, bu özellik ve yöntemlere nesneler üzerinden erişilebilir. Örneğin, Araba sınıfımızda bir nesne oluşturduktan sonra, bu nesnenin özelliklerine ve işlevlerine "." operatörü ile erişebilirsiniz.

Özellikler Yöntemler
- Veri alanlarıdır - İşlevlerdir
- Sınıfın nesnelerine ait - Sınıfın nesnelerinde kullanılırlar
- Nesneler üzerinden erişilirler - "." ile erişilirler

Özellikle yazılım geliştirme sürecinde, sınıfların özellikleri ve yöntemleri, kodun organizasyonu ve yeniden kullanılabilirliği açısından oldukça önemli bir yere sahiptir. Geliştirilen bir sınıfın hem özellikleri hem de yöntemleri, mümkün olduğunca doğru ve net bir şekilde tanımlanarak, sınıfın nesnelerinin kullanımı ve yönetimi kolaylaştırılabilir.