🔮Fonksiyonlar

Python üzerinde fonksiyonlar ve metotlar

👀 Hızlı Bakış

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

  • 💁‍♂️ Parametre olarak aldıkları objelerin içeriğini değiştirebilirler, ama kendisini değiştiremezler

  • ✨ Parametre değerleri tanımlandıkları anda atanır, her çağırıldığında değil

  • ⚡ Varsayılan parametre değerleri değiştirilemez değerler olmalıdır, aksi halde sorunlar oluşur

‍‍🧙‍♂ Detaylı bilgi için 📖 Mutable Default Arguments alanına bakabilirsin.

✨ Oluşturma

  • 🆔 Fonksiyon ismi eşsiz olmalıdır, override yapısını python desteklemez

  • 💎 Parametreler tip belirtmeden de yazılabilir

  • 📝 Dokümantasyon için fonksiyonun tanımlandığı satırın altına """ karakterleri arasına içerik yazılır

  • return yapısı ile sonuçlarını döndürürler

📢 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)

💎 Parametreler

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

  • 🚄 *args, **kwargs şeklinde list ve dict elemanları alan parametreler tanımlanabilir

  • 🆔 Parametre tipler param: type şeklinde belirtiliebilir ama zorunlu değildir

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

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
# Değerlerin kopyalanması
def increase(a):
	return a + 2

a = 5
b = increase(a)  # 7
print(a)  # 5

♿ Erişebilirlik

  • 🙄 Python üzerinde private ve public yapısı derleyici tarafından kontrol edilmez

  • ⚖️ Kodun anlaşılabilirliği artırmak için programcılar tarafından belirlenen kurallardır

  • 🌫️ __ ile başlayan fonksiyonlar private olarak algılanır, sınıf dışında önerilerde gözükmezler

  • 🌃 _ ile başlayan fonksiyonlar dosya içinde public dosya dışında private olarak ifade edilir (interval)

🧱 Türler

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

KavramAçıklamaEriş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

🏃‍♂️ Hız Hakkında

  • 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))

💠 Dahili ve Harici Fonksiyonlar

  • Dahili fonksiyonlar, python ile gelen hazır fonksiyonlardır ve direkt olarak kullanılabilirler

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

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

FonksiyonAçı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)

string = "Yemreak"
for i, char in enumerate(string):
  print(i, char)

# 0 Y
# 1 e
# 2 m
# ...

Last updated

© 2024 ~ Yunus Emre Ak ~ yEmreAk