Python'da En İyi Uygulamalar
Bu makale, Python'da en iyi uygulamaları açıklar.
Python'da en iyi uygulamaları gerçek kod örnekleriyle açıklayacağız ve okunabilir, bakımı kolay kod yazma yöntemlerini tanıtacağız.
YouTube Video
Python'da En İyi Uygulamalar
Okunabilirliği en yüksek öncelik haline getirin
Öncelikle, 'okunabilirliği en yüksek öncelik haline getirmek' konusuna bakalım.
Python, 'okunabilirliğe' değer veren bir dildir. Öncelikle, amacı bir bakışta belli olan kod yazmaya öncelik verin.
1# Bad example: unclear variable names
2a = 10
3b = 5
4c = a * bBu kodda, değişken adları anlamını iletmiyor, bu nedenle başkalarının anlaması zaman alıyor.
1# Good example: descriptive variable names
2price = 10
3quantity = 5
4total_cost = price * quantityDeğişken adlarını açık yazarak, kodunuz kendini belgeleyen hale gelir.
Açık kod yazın
Şimdi de 'açık kod yazmak' konusuna bakalım.
Python'da, 'açık niyet', 'örtük davranışa' tercih edilir.
1# Bad example: implicit truthy check
2if data:
3 process(data)Bu kodda, data'dan ne beklendiği belli değil ve bu hata oluşumuna zemin hazırlıyor.
1# Good example: explicit condition
2if len(data) > 0:
3 process(data)Koşulları açık yazarak, kodun amacı ile tanımı uyumlu hale gelir.
Fonksiyonları küçük ve tek bir sorumluluğa odaklı tutun
Şimdi de 'fonksiyonları küçük ve tek bir sorumluluğa odaklı tutmak' konusuna bakalım.
Bir fonksiyon çok fazla iş yaparsa, test ve bakım zorlaşır.
1# Bad example: doing too many things
2def handle_user(user):
3 save_to_database(user)
4 send_email(user)
5 write_log(user)Bu kodda, işlemler birbirine sıkı sıkıya bağlı hale gelerek, yeniden kullanım ve değişikliği zorlaştırır.
1# Good example: single responsibility
2def save_user(user):
3 save_to_database(user)
4
5def notify_user(user):
6 send_email(user)
7
8def log_user(user):
9 write_log(user)Fonksiyonları ayırarak, rolleri netleşir ve test etmek kolaylaşır.
Tür ipuçlarını aktif olarak kullanın
Şimdi de 'tür ipuçlarını aktif olarak kullanmak' konusuna bakalım.
Tür ipuçları, belgelenme amacı taşır ve hataları önlemek için güçlü bir araçtır.
1# Bad example: Without type hints
2def add(a, b):
3 return a + bBu kodda, argüman ve dönen değerlerin türleri belli değil, bu da yanlış kullanıma yol açabilir.
1# Good example: With type hints
2def add(a: int, b: int) -> int:
3 return a + bTür ipuçları ile IDE tamamlama, statik analiz ve okunabilirlik büyük ölçüde artar.
None dönebilme olasılığını açıkça belirtin
Şimdi de 'None dönebilme olasılığını açıkça belirtmek' konusuna bakalım.
None dönebilen fonksiyonlar, kullananlar tarafından sıklıkla göz ardı edilir.
1# Bad example: Ambiguous return value
2def find_user(user_id):
3 if user_id == 1:
4 return {"id": 1, "name": "Alice"}
5 return NoneBu kodda, bir dönüş değeri olup olmadığı belli değil.
1# Good example: explicit return type
2from typing import Optional, Dict, Any
3
4def find_user(user_id: int) -> Optional[Dict[str, Any]]:
5 if user_id == 1:
6 return {"id": 1, "name": "Alice"}
7 return NoneOptional kullanarak, None dönebilme olasılığını tür olarak belirtebilirsiniz.
İstisnaları (exception) çok geniş kapsamda yakalamayın
Şimdi de 'istisnaları çok geniş kapsamda yakalamamak' konusuna bakalım.
İstisna yakalama, temelde sadece gerekli olanı kapsamalı.
1# Bad example: catching all exceptions
2try:
3 result = int(value)
4except Exception:
5 result = 0Bu kod, fark edilmesi gereken hataları gizleyebilir.
1# Good example: catch specific exception
2try:
3 result = int(value)
4except ValueError:
5 result = 0İstisnaları sınırlandırarak, beklenmeyen sorunları gözden kaçırmazsınız.
with ifadesi ile kaynakları güvenli şekilde yönetin
Şimdi de 'with ifadesiyle kaynakları güvenle yönetmek' konusuna bakalım.
Dosya ve kilit gibi kaynaklar her zaman güvenli şekilde serbest bırakılmalıdır.
1# Bad example: manual close
2file = open("data.txt")
3content = file.read()
4file.close()Bu kodda, bir istisna oluşursa close() çağrılmayabilir.
1# Good example: using context manager
2with open("data.txt") as file:
3 content = file.read()with ifadesi kullanarak, bir istisna oluşsa bile temizleme işlemi güvenli şekilde yapılır.
Liste kavrayışlarını (list comprehension) uygun şekilde kullanın
Şimdi de 'liste kavrayışlarını uygun şekilde kullanmak' konusuna bakalım.
Basit dönüştürme işlemleri, liste kavrayışları ile kısaca yazılabilir.
1# Bad example: Verbose loop
2squares = []
3for i in range(10):
4 squares.append(i * i)Bu kodda, temel işlem zor görünüyor.
1# Good example: Clear list comprehension
2squares = [i * i for i in range(10)]Liste kavrayışlarını uygun kullandığınızda, kodun okunabilirliği artar.
Sihirli sayılardan (magic numbers) kaçının
Şimdi de 'sihirli sayılardan kaçınmak' konusuna bakalım.
Sayı ve metinleri doğrudan yazmak anlamlarını belirsizleştirir.
1# Bad example: magic number
2if status == 404:
3 handle_not_found()Bu kodda, 404'ün anlamını bildiğiniz varsayılır.
1# Good example: named constant
2NOT_FOUND = 404
3
4if status == NOT_FOUND:
5 handle_not_found()Adlandırma yapmak, amacınızı açık hale getirir.
Sadece 'çalışan' değil, bakımı kolay kod yazın
Son olarak, 'sadece çalışan değil, bakımı kolay kod yazmak' konusuna bakalım.
Önemli olan, ileride sizin veya başkasının kodu okuyabilmesidir.
1# Bad example: Hard to maintain
2def f(x):
3 return x * 1.08 + 100Bu kodda, koddan gereksinimler anlaşılamıyor.
1# Good example: Easy to maintain
2TAX_RATE = 1.08
3BASE_FEE = 100
4
5def calculate_total(price: float) -> float:
6 return price * TAX_RATE + BASE_FEEAnlamı adlara yansıtarak, kodun kendisi gereksinim haline gelir.
Özet
Python'da en iyi uygulamalar, zekice kod yerine kolay anlaşılır kod yazmaya dayanır. Küçük alışkanlıklar oluşturmak, daha az hata içeren ve uzun süre kullanılabilecek kodlar üretmenizi sağlar.
Yukarıdaki makaleyi, YouTube kanalımızda Visual Studio Code'u kullanarak takip edebilirsiniz. Lütfen YouTube kanalını da kontrol edin.