🔮Fonksiyonlar

Python'da fonksiyonlar

💡 Fonksiyonlar Hakkında

  • Fonksiyonlara değişken değerlerinin kopyası gönderilir

  • Parametre olarak aldıkları değişkenleri değiştiremezler

🏠 Dahili Fonksiyonlar

🌃 Harici Fonksiyonlar

  • Fonksiyonları kullanmadan önce import <paket> ile paketi dahil etmeniz lazım

  • Fonksiyonların kullanımı <paket>.<fonksiyon> şeklindedir

✨ Fonksiyon İşlemleri

Kodların derlenme yapısı yukarıdan aşağı olduğu için fonksiyonlar, yukarıda (önceden) tanımlanmadan kullanılamaz.

def function_name(parameters):
  """docstring"""
  statement(s)

💎 Fonksiyon Parametreleri

Fonksiyonlar tanımlandığı vakit varsayılan atamalar yapılır.

Bu yüzden zaman hesaplama gibi işlemleri burada yapmanız mantıklı olmayacak, zaman farkı 0 olarak gelecektir.

def greet(name, msg = "Good morning!"):
   """
   This function greets to
   the person with the
   provided message.

   If message is not provided,
   it defaults to "Good
   morning!"
   """

   print("Hello",name + ', ' + msg)

greet("Kate") # Varsayılan parametreyi kullanma
greet("Bruce","How do you do?") # Sıralı parametre verme
greet("Bruce", msg="Naber") # İşaretleyerek paremetre verme

🧱 Fonksiyon Türleri

def calc_factorial(x):
    """This is a recursive function
    to find the factorial of an integer"""

    if x == 1:
        return 1
    else:
        return (x * calc_factorial(x-1))

num = 4
print("The factorial of", num, "is", calc_factorial(num))
calc_factorial(4)              # 1st call with 4
4 * calc_factorial(3)          # 2nd call with 3
4 * 3 * calc_factorial(2)      # 3rd call with 2
4 * 3 * 2 * calc_factorial(1)  # 4th call with 1
4 * 3 * 2 * 1                  # return from 4th call as number=1
4 * 3 * 2                      # return from 3rd call
4 * 6                          # return from 2nd call
24                             # return from 1st call

💚 Özyineleyen Fonksiyonların Avantajları

  • Özyineleyen fonksiyonlar kodun daha temiz ve zarif gözükmesini sağlar

  • Karmaşık bir görev alt görevlere ayrılarak rahat çözülebilir

  • İç içe döngülere göre daha iyidir

💔 Özyineleyen Fonksiyonların Zararları

  • Bazı durumlarda anlaşılabilmesi zordur

  • Uzun tekrarlarda çok fazla vakit ve zaman harcarlar

  • Hata ayıklama oldukça zordur

🤯 Global, Local ve Nonlocal Kavramları

🏃‍♂️ Fonksiyonlarda Hız

Fonksiyonlarda işlem yapılma hızı, manuel (kod satırı olarak) işlem yapılmasından daha hızlıdır.

  • ~%80 daha hızlı çalıştığını script üzerinden görebilirsiniz

  • Bu değer bilgisayar donanımınıza göre değişiklik gösterecektir

  • Hafızayı (memorial) kullanan fonksiyonlar tekrarlı (recursive) fonksiyonlardan daha hızlıdır.

Ek kaynaklar:

from time import time

# Obje uzunluğu
RANGE = 1000

# Toplam test sayısı
TEST_RANGE = 10000

# Fonksiyonun yavaş kaldığı testlerin sayısı
func_slow_count = 0

# Objeyi oluşturma
data1 = [i for i in range(RANGE)]
data2 = [i for i in range(RANGE)]
data3 = [i for i in range(RANGE)]

avg_func_speed = 0
for test in range(TEST_RANGE):
    first_time = time()

    # Normal işleme
    data = []
    for test2 in range(len(data1)):
        data.append(data1[test2])
    for test2 in range(len(data2)):
        data.append(data2[test2])
    for test2 in range(len(data3)):
        data.append(data3[test2])

    normal_time = time() - first_time

    # Fonksiyon ile işleme
    def fdata(data1, data2, data3):
        data = []
        for test2 in range(len(data1)):
            data.append(data1[test2])
        for test2 in range(len(data2)):
            data.append(data2[test2])
        for test2 in range(len(data3)):
            data.append(data3[test2])
        return data

    data = [i for i in range(RANGE)]

    first_time = time()

    # Fonksiyon ile veri atama
    fdata = fdata(data1, data2, data3)

    func_time = time() - first_time

    if normal_time - func_time < 0:
        func_slow_count += 1

    avg_func_speed = (
        avg_func_speed * test + (normal_time / func_time - 1) * 100
    ) / (test + 1)

print("Fonksiyon işlemi normalden %" + "%.2f daha hızlı, testlerde " % avg_func_speed + "%" + "%.2f ihtimalle yavaş kalmıştır." %
      (func_slow_count * 100 / TEST_RANGE))

🐥 Fonksiyon Parametre Tipleri

from type import Tuple, List
from pathlib import Path
def foo(root: Path, privates=[], exbool=False, msg: str) -> Tuple[List, List]:
    ...
    return ["temp"], ["temp"]

‍🧙‍♂ Detaylı bilgi için Function Parameter Types in Python yazısına bakabilirsin.

Last updated

© 2024 ~ Yunus Emre Ak ~ yEmreAk