🔮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
✨ 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
şeklindelist
vedict
elemanları alan parametreler tanımlanabilir🆔 Parametre tipler
param: type
şeklinde belirtiliebilir ama zorunlu değildir
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 fonksiyonlarprivate
olarak algılanır, sınıf dışında önerilerde gözükmezler🌃
_
ile başlayan fonksiyonlar dosya içindepublic
dosya dışındaprivate
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
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ımFonksiyonların kullanımı
<paket>.<fonksiyon>
şeklindedir
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
Was this helpful?