Python Günlükleri 4 - Fonksiyonlar, Parametreler, Exception, Class

Merhaba,

Yeni bir yazıyla devam edelim. Keyifli okumalar :)


1. Fonksiyonlar
  • Fonksiyon, bir grup kodun özel bir görevi yerine getirdiği bir konteyner yapısıdır.
  • Yazdığımız fonksiyonları kodumuzun içinde tekrar kullanabiliriz.
  • Fonksiyon yapısı:
def greet_user():
    print("Hello there!")
    print("Welcome abroad!")
  • PEP8'e göre fonksiyon tanımladıktan sonra iki satır boşluk bırakmak gerekir.
  • Her zaman önce fonksiyon tanımlanır, sonra çağrılır.

2. Parametreler
  • Fonksiyonlarda, bir lokal değişken görevi üstlenen parametreler tanımlayabiliriz.
# with parameters
def greet_user2(name):
    print(f'Hello {name}!')  # same as a local variable in function: name = "Hatice"    
    print("Welcome abroad!")


greet_user2("Hatice")
  • Argüman, fonksiyonlara sağladığımız asıl değerlerdir. Örnekteki "Hatice" argümandır.
  • Parametre, fonksiyonlarda değer almamızı sağlamak için tanımladığımız yer tutuculardır (placeholders). Örnekteki name parametredir.
  •  Bir fonksiyonda birden fazla parametre tanımlanabilir.

3. Anahtar Argümanlar (Keyword Arguments)
  • Fonksiyonda sıralamanın önemli olduğu argümanlara pozisyona bağlı (positional) argüman denir. Örneğin def greeting(first_name, last_name) olarak tanımlanan bir fonksiyonda argüman sıralaması önemlidir.
  • Anahtar argümanlar sayesinde sıralamanın önemi ortadan kalkar. Yukarıdaki örnek için fonksiyon şöyle çağrılabilir:
    • greeting(last_name="Ay", first_name="Hatice")
  • Bu ikili kombinasyona anahtar argümanlar denir.
  • Anahtar argümanlar her zaman kullanılmaz. Kodun okunabilirliğini arttırmak için karmaşık sayısal argümanları, anahtar argümanlar olarak yazabiliriz.
    • Örneğin cost_calc(total=50, shipping=5, discount=0.1)
  • ÖNEMLİ NOT: Anahtar argümanlar her zaman pozisyona bağlı argümanlardan sonra gelir.
    • Örneğin cost_calc(total=50, 5, 0.1) şeklinde bir fonksiyon çağrılamaz. Önce pozisyona bağlı argümanları yazmalıyız. cost_calc(50, shipping=5, discount=0.1) doğru yazımıdır.

3. Return İfadesi
  • Fonksiyonla bir değeri/sonucu döndürmek için kullanılır. Örneğin: hesaplanan bir sayı
  • Fonksiyonda return yoksa Python varsayılan olarak "None" değerini döndürür.
def square(number):
    return number * number


result = square(4)
print(result)


4. Exceptions (İstisnalar)
  • Exceptions ifadesi, programın çalışmasına engel (crashing program) olan hatalara denir.
  • Hatasız olarak çalışan program her zaman "exit code 0" mesajı ile biter. Bu mesaj harici aldığımız sonuçlar hatayı temsil eder.
  • Yapılan hatalarla baş etmek ve programımızın çökmemesi için "try: except: " yapısını kullanırız.
  • Try bloğu ile çalıştırmak istediğimiz kodu yazarız. Except ile hangi hata tipiyle karşılaşacaksak onu belirtip, bu hata meydana geldiğinde programın nasıl davranması gerektiğini yazarız.

# örneğin age değerine asd gibi bir string yazılması
# age değerine sıfır yazılması
try:
    age = int(input("Age: "))
    income = 20000    risk = income / age
    print(age)
except ValueError:
    print("Invalid value...")
except ZeroDivisionError:
    print("Age can not be zero... Zero division error...")


5. Sınıflar (Classes)
  • Nesne oluşturucu (object constructor) tanımlarken class yapısını kullanırız.
  • Her nesne, oluşturulduğu class a ait farklı bir örnektir (instance).
  • Class yapısı bir "blueprint" veya "template" olarak kullanılır. Bu taslakla istenildiği kadar nesne oluşturulabilir.
  • Class yapısı metot ve property (özellik) içerir.

class Point:
    def move(self):
        print("move")

    def draw(self):
        print("draw")


point1 = Point()
point1.draw()  # method
point1.x = 10  # attribute
print(point1.x)


  • Constructor metodu ile tanımladığımız class için belli özelliklerin nesneyi oluştururken tanımlanmasını sağlayabiliriz.
class Point:
    # constructor init method:    
    def __init__(self, x, y):
        self.x = x  # point.x = 10        
        self.y = y  # point.y = 20
    def move(self):
        print("move")

    def draw(self):
        print("draw")


# point1.draw()  --> method
# point1.x = 10  -->  attribute

point1 = Point(10, 20)
point1.draw()
print(point1.x)
print(point1.y)