🌟Python'da Önemli Hususlar

Python için bilmeniz ve öğrenmeniz gereken, faydalı olacak konular ve derlediğim bilgiler

🧐 Aceleci Olma Temel Kavramları Öğren

  • 🤿 Python temellerini öğrenmeden proje işlerine girmeyin

  • 📖 Terminolojiyi ve yazım kurallarını az da olsa bil

  • 🪓 Eğer ağaç kesmen söylenirse, vaktinin çoğunu baltanı bilemek için kullan

  • 😊 Sabırlı ol ve bu yazıyı sonuna kadar oku

  • 👀 Python ile tüm kavramlara Getting Started with Python Programming alanından bakabilirsin

📂 Proje Yapını ve Ortamını Belirle

  • 🏗️ Alttaki tüm dosya & dizinler root yani proje dizininde olmalıdır

  • 📈 Projende verimlilik içinvenv komutu ile sanal bir python ortamı oluşturman tavsiye edilir

    • 👷‍♂️python3 -m venv venv komutu ile venv isimli sanal ortamı oluşturursun

    • 🌃 Oluşturulan sanal ortam, bilgisayarındaki python paketlerinden etkilenmez ve onları etkilemez

    • 💁‍♂️ Sanallaştırma ile paket sürümlerindeki çakışmalardan kurtulmuş olursun

📃 Dosya İsmi
💎 Açıklama

LICENSE

Projenin lisans bilgilerini taşır (Apache, MIT vs)

README

Projen hakkında açıklamalar ve dokümanlarına bağlantılara burada yer verirsin

requirements.txt

Projenin bağımlılıklarını tutar, pip freeze > requirements.txt komutu ile oluşturulur ve pip install -r requirements.txt komutu ile indirilir

tests

Projenin test metotlarının hepsi, tests dizininde saklanmalıdır

🤷‍♂️ Boşluk veya Tab Herhangi Birini Seç

  • 🤯 Her ikisini birden kullanmaya çalışma, python bunu idare edemeyebilir

  • 💫 Her proje için kendi tarzına göre boşluk ve tab verilerini birbirileri arasında dönüştür

  • 🎯 Sadece tek bir yapıyı kullan, çok sık değiştirme

‍🧙‍♂ Detaylı bilgi için 📃 Python Pro Tips alanına bakabilirsin.

🖤 Komut İsteminden ipython Kullan

  • 💁‍♂️ python ile terminalden hızlıca işlemler yapmak havalı geliyor ama kendine eziyet etme

  • 📈 ipython sayesinde gelen kod tamamlamaları ve ekstra özelliklerle efektif ilerle

  • 📦 pip install ipython komutu ile indir ve ipython komutu ile kullan

📝 Değişken Tiplerini de Belirt

  • 🙄 Değişken tipleri ile de mi uğraşacağım demeyin, tipler gereksiz uğraş değil avantajdır

  • 🤯 Objenin tipini bilmemek, kodda karmaşıklığa sebep olacaktır

  • 🧐 typing modülü içerisinden Dict, List gibi sınıflar ile değişkenlerin tipini linter için belirle

  • 💁‍♂️ Tipleri bilen linter size doğru ve uygun kod önerileri de sunacaktır

  • 👷‍♂️ Değişken tiplerini de kontrol ettirmek istersen mypy modülüne bakabilirsin

👨‍💻 Alttaki kod parçasında yazım sırasında önerilerin düzgün olduğunu fark edeceksiniz

💎 Değişkenlere Farklı Tipler Atama

  • 👮‍♂️ Her farklı obje için farklı isimlendirme yapılmalı

  • 🙄 Aynı değişkene birden farklı obje atılması verimliliği artırmıyor

‍🧙‍♂ Detaylı bilgi için 📖 Dynamic Typing alanına bakabilirsin.

📦 Kütüphanelerden İşine Yarayanları Dahil Et

  • 🤯 Paketin veya modülün tüm metotlarını from ypackage import * şeklinde dahil etme kodunu karmaşıklaştırır

  • 👨‍💼 Sadece ihtiyacın olan metotları dahil et from ypackage import write_file ve kodunda kullan

  • 💁‍♂️ Çok fazla metoduna ihtiyacın varsa ve kategorize etmek istersen import cache şeklinde dahil et cache.counter = 5 olarak kullan

📖 Dictionary için get Kullan

  • 📈 Sözlükte olmazsa hata vermez, varsayılanı alırsın

  • 💠 Switch-case yapıları için de kullanabilirsin

‍🧙‍♂ Detaylı bilgi için 📃 Python Pro Tips alanına bakabilirsin.

🆔 == ile is aynı değildir

  • 💡 Öncelikle == eşitlik sorgularken, is adres bilgisi (veya id) sorgular

  • 💁‍♂️ Primitif değişkenlerde (int, bool … ) adresler değil değerler tutulur,is ile == eş değerdir

  • 👮‍♂️ Objeler ve list, dict gibi tipler için eş değer değildir

‍🧙‍♂ Detaylı bilgi için 📃 Python Pro Tips alanına bakabilirsin.

👮‍♂️ If - Else Yapılarını Kısaltın

  • 🚄 Uzun yapı 1 gibi tekrarlı kontrolleri liste içerisine alın

  • 🧐 Oluşturduğunuz liste için and için all veya or için any metotlarını da kullanabilirsiniz

  • 👮‍♂️ Switch - Case yapıları için, dict objesi tanımlayın

    • 💾 Yapılacak fonksiyonları dict içerisine kaydedin

    • 🐣 dict üzerinden get metodu ile fonksiyonları çağırın

    • 🤯 Kod karmaşıklığını azaltacaktır

    • 📈 CPU kullanımını azaltıp, RAM kullanımı artıracaktır

‍🧙‍♂ Detaylı bilgi için 📃 Switch Case Kullanmadan Kod Yazabilmek alanına bakabilirsin.

🍢 Tek Satır Yapılarını Kullan

  • list ve dict gibi yapılar için tek satırlık yapılar ile işini hızlıca halledebilirsin

  • [ expression for item in list if conditional ] yapısı ile listoluşturabilirsin

  • { expression for item in dict if conditional } yapısı ile dictoluşturabilirsin

  • [on_true] if [expression] else [on_false] yapısı ile koşullu atama yapabilirsin

  • a < b < c gibi zincirleme yapıları python destekler

🤹‍♂️ Sık Kullanılabilecek İşlemleri Bil

  • set küme yapısı ile sadece eşsiz verileri tutarsın

  • max yapısı ile verilen key'e göre en yüksek değerleri bul

  • map yapısı ile üzerinde gezinebilir (ilst, set vs) verilerde her veri için fonksiyon çalıştır

  • collections.Counter yapısı ile veri listesi içerisindeki elemanları say

  • dateutil.parser.parse ile loglardan zaman bilgilerini rastgele konumlarda da olsa çek

  • chardet ile dosya içerisindeki metinleri inceleyebilirsin

🔤 String İşlemlerine Hakim Ol

  • 🌟 En çok kullanılan değişken türlerindendir ve hayatında çoooook sık karşılaşacaksın

  • 💁‍♂️ String bir char dizisi olduğundan list özelliklerini de taşır string[başlangıç:son:adım]

💠 Fonksiyonları Efektif Kullan

  • 💁‍♂️ Fonksiyonlar birden fazla değişken döndürebilir (tuple) ve bunu efektif kullanmak yararınadır

  • 🏷️ Parametre ve dönüş bilgilerini typing modülü ile belirt

  • 🔚 Dönüş tipi -> <tip> şeklinde belirtilir

🍎 Class Yapıları İle OOP Kodlama Yap

  • 🤯 İç içe karmaşık fonksiyonlar yerine sınıf yapıları ile anlaşılabilir bir düzen kur

  • 🍏 dataclass ile veri sınıfları tanımla

  • 💠 __repr__, ve __eq__ metotları otmatik olarak tanımlanır

  • 💎type zorunluluğu olduğundan ileride veri atama sorunlarını engeller

📢Python içerisinde this yerine self ile sınıf varlıklarına erişilir

💠 Özel Sınıf Metotlarını Kullanın

🆔 İsim
📃 Açıklama

__init__

Sınıf oluşturulduğunda çağırılır (constructor)

__str__

Sınıf str, f"{}" veya print ile yazdırılmak istendiğinde çağırılır

__repr__

Debug işlemleri sırasında sınıf hakkında bilgileri verir (VS Code Debug metinleri vs)

__eq__

Sınıf arasında eşitlik kıyaslaması yapıldığında çalışır (a == b)

__hash__

Dict gibi işlemlerde key olarak sınıfın kullanılması için hashable olması gerekir hash(str(self)) şeklinde kullanılabilir

🏷️ Decorator Yapısı ile Tekrarlı Kodlardan Sakın

  • ➕ Decorator yapısı fonksiyonların üstüne @ ile eklenen fonksiyonlardır

  • 🌊 Fonksiyon her çağırıldığında önce @ ile eklenen fonksiyon çalışır sonra istenen çağırılır

  • 👮‍♂️ API işlemlerinde yetki kontrolleri için kullanılması zaman kazandırır

  • 💁‍♂️ @functools.wraps(func) decorator yapısı ile asıl fonksiyonun __name__ gibi karakter özellikleri saklanır (aksi halde __name__ değeri @ olan fonksiyonun ismini verir)

📜 print'ten Vazgeç logger ile Raporlama Yap

  • 🎨 Öncelikle colorlog ile renkli raporlama yapabilirsin

  • 📦 import logging ile log paketini indirin

Buraya detaylı bilgi sonradan eklenecek

https://github.com/yemreak/blog/blob/main/docs/tr/arsiv/python/temel/raporlama.md

🔗 Faydalı Bağlantılar

Last updated

Was this helpful?