🔮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

Fonksiyon
Açıklama
Örnek
Çıktı

print(<string>)

Ekrana yazma

print("X: {1}, Y: {2}")

X: {1}, Y: {2}

print('\r' + <string>, end='')

Satır başına yazı yazma

sum, len

Toplama, uzunluk, ortalama

sum([1, 2, 3])

5

eval(<string>)

Verilen stringi hesaplama

eval("x + 5")

6

type(<obje>)

Objenin türünü bulma

type(x)

<class 'number'>

enumerate(<obje>, <si>)

Numaralandırma

i, line in enumerate(file, 0)

🌃 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ı

Kavram
Açıklama
Erişim

global

Tüm modülde geçerli değişkenler

Okuma

local

Fonksiyonların içerisindeki yerel değişkenler

Okuma ve Yazma

nonlocal

Modül ile fonksiyon arasında kalan, genellikle iç içe fonksiyonlarda kullanılan değişkenler

🏃‍♂️ 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