Last chance! 50% off DataCamp Premium
Sale ends in
Kodlama, bir bilgisayarın belirli bir görevi yapması için talimatlar – diğer adıyla algoritmalar – yazma sanatıdır. Geliştiriciler, bilgisayarlarla iletişim kurmak için programlama dillerini kullanır.
İngilizce, Rusça veya Keçua gibi doğal dillerde olduğu gibi, programlama dilleri de iletişim için temeli sağlayan belirli bir sözdizimsel ve anlamsal kurallar kümesinden oluşur. Doğal diller daha karmaşık, esnek ve dinamiktir, ancak bu özellikler daha sınırlı ölçüde programlama dilleri için de geçerlidir.
En basit algoritmayı bile birçok farklı şekilde yazabilirsiniz. Kod geliştirirken bir miktar esneklik istenir, ancak bu durum özellikle birden fazla kişi üzerinde çalışırken verimliliği ve etkili iletişimi zedeleyebilir.
Bu nedenle okunabilirlik, kod yazmanın kritik bir yönüdür. Geliştiricilerin aynı çizgide olmasını sağlamak için çoğu programlama dili kodlama standartları geliştirmiştir. Bu belgeler, okunabilir, sürdürülebilir ve ölçeklenebilir kod üretmek için yönergeler ve en iyi uygulamalar sunar.
Bu yazıda, en popüler veri bilimi dillerinden biri olan Python'da kodlamaya ilişkin en iyi uygulamaları keşfedeceğiz. Aşağıdaki bölümlerde sunulan uygulamalar çoğunlukla Python'da kod yazmanın standart kılavuzu olan PEP 8'e dayanmaktadır.
Python'ın ne için kullanıldığını daha fazla öğrenmek için yazımıza veya Python’a Giriş kursumuza göz atın.
“Kod, yazıldığından çok daha sık okunur. Kod her zaman okunabilirliği teşvik edecek şekilde yazılmalıdır” – Python'ın mucidi Guido van Rossum
PEP 8, Python kodu için bir stil kılavuzudur. 2001'de Guido van Rossum, Barry Warsaw ve Nick Coghlan tarafından yazılan bu kılavuz, daha okunabilir ve tutarlı kod yazmak için bir dizi öneri sunar. Değişkenlerin nasıl adlandırılacağından bir satırın sahip olması gereken maksimum karakter sayısına kadar her şeyi kapsar.
PEP, Python Geliştirme Önerisi (Python Enhancement Proposal) anlamına gelir. Bir PEP, Python için önerilen yeni özellikleri açıklayan ve Python'un tasarım ve stil gibi yönlerini belgeleyen bir belgedir.
Zorunlu olmamakla birlikte, Python topluluğunun büyük bir kısmı PEP 8 kullanır. Bu nedenle yönergeleri takip etmek şiddetle tavsiye edilir. Bunu yaparak, profesyonel bir programcı olarak itibarınızı artırırsınız.
PEP 8 geniş kabul görse de, yönergeler her özel senaryoya uymayabilir. Bu durumlarda şirketler genellikle kendi kurallarını tanımlar.
Okunabilir ve düzenli kod yazmak fark yaratır ve kariyer fırsatlarınızı artırır. Kodlama, yeni başlayanlara mekanik ve karmaşık bir süreç gibi görünse de, gerçekte kodlama bir sanattır.
Python'da kod kalitesini artırmak için takip edebileceğiniz birçok ipucu vardır. İşte en ilgili olanlardan bazıları.
Girintileme, bir kod satırının başındaki boşlukları ifade eder. Diğer programlama dillerinde girintileme yalnızca okunabilirlik için bir araçken, Python'da zorunludur. Python, bir kod bloğunu açmak için girintilemeyi kullanır. Daha net olmak gerekirse, aşağıdaki kodda görüldüğü gibi her girinti düzeyi için art arda 4 boşluk kullanılır:
for number in [1,2,3,4]:
if number % 2 == 0:
print(number)
else:
continue
PEP 8, hiçbir satırın 79 karakterden uzun olmamasını önerir. Bunun mantığı şudur: daha kısa satırlar okumayı kolaylaştırır. Ayrıca bu uzunluk, birden fazla dosyayı yan yana açık tutmanıza olanak tanır.
Üst düzey fonksiyon ve sınıf tanımlarını iki boş satırla çevreleyin. Bir sınıfın içindeki yöntem tanımları bir boş satırla çevrelenir. İlgili fonksiyon gruplarını ayırmak için (ölçülü şekilde) fazladan boş satırlar kullanılabilir. Son olarak, fonksiyonların içinde mantıksal bölümleri belirtmek için (ölçülü şekilde) boş satırlar kullanın.
Kod ustalığı zaman alır. Kod yazarken tüm ayrıntılara dikkat etmek zor ve zaman alıcı olabilir. Neyse ki makineler, özellikle linter’lar ve biçimlendiriciler, kod kalitesini sağlamamıza yardımcı olabilir.
Linter’lar kaynak kodun statik analizini yapar ve anlamsal tutarsızlıkları kontrol eder. Biçimlendiriciler ise benzer araçlardır ve kodunuzun boşluklarını, satır uzunluğunu, argüman konumlandırmasını vb. yeniden düzenleyerek farklı dosya veya projeler arasında tutarlı görünmesini sağlamaya çalışır. Python size seçebileceğiniz çok sayıda linter ve biçimlendirici sunar.
Yukarıda bahsedilen bazı kurallar açık olsa da, kodlama çoğu zaman iyi zevk ve sezgiyle ilgilidir. Bir kodlama sanatçısı olmak için Python'un dayandığı bazı ilkeleri bilmelisiniz. Bu tür ilkelere harika bir örnek, ayrı bir yazıda ele aldığımız Python'un Zen'idir.
Günlüğe kaydetme, bir yazılım çalışırken meydana gelen olayları izleme aracıdır. Özellikle uygulamalar boyut ve karmaşıklık bakımından büyüdükçe, günlükleme geliştirme, hata ayıklama, çalıştırma ve performansı izleme için kritik bir teknik haline gelir.
logging modülü, günlükleme uygulamalarını ele almak için Python’un Standart Kitaplığı'nın bir parçası olarak sürüm 2.3’ten beri yer almaktadır ve PEP 282'de kapsamlı şekilde açıklanmıştır.
Günlükleme, ruhen Print işlevine benzer. Ancak print işlevi, bir geliştiricinin faydalı bulabileceği pek çok bilgiden yoksundur. Günlükleme ise hatanın meydana geldiği zaman damgalarını ve satır numarasını kaydedebilir. Hataları veya herhangi bir bilgiyi dosyalara, soketlere vb. de yazabilir.
Modülü içe aktarmak için yalnızca şu kodu çalıştırmanız yeterlidir:
import logging
Her günlük mesajı aynı değildir. Nitekim modül, mesajın ciddiyetine göre günlük seviyeleri sunar. Şöyledir:
import logging
logging.info('This message is just informative')
logging.debug('My missions is to provide information about debugging.')
logging.critical("A Critical Logging Message")
Bunu söyledikten sonra, aşağıda Python'da günlüklemeyi ele almak için altı en iyi uygulamanın bir listesi yer almaktadır.
Daha önce, logların print işlevleriyle aynı doğrultuda bilgi sağladığını söylemiştik. Ancak loglar çok daha güçlüdür ve daha ayrıntılı bilgi sunabilir.
Özellikle günlükleme rutinlerine aşina değilseniz Print işlevine yönelmek cazip gelebilir, ancak loglar her zaman en güvenli seçenektir. Ölçeklenmeye ve karmaşık uygulamaları yönetmeye daha uygundurlar.
İnternette çok sayıda kılavuz ve dokümantasyon bulunur. Örneğin, bu DataCamp günlükleme eğitimi başlamanız için ihtiyacınız olan şey olabilir.
Bu modül, çoğu Python geliştiricisi için başvurulan seçenektir. Bu da modülün iyi bakımlı olduğu ve sorularınıza her zaman yanıt bulabileceğiniz büyük bir topluluk tarafından desteklendiği anlamına gelir.
logging modülü altı farklı mesaj seviyesiyle gelir. Her biri belirli bir amaç için tasarlanmıştır. Onlara ne kadar bağlı kalırsanız, sizin ve kullanıcıların kodunuzda neler olup bittiğini anlaması o kadar kolay olur.
Bu, print işlevlerinde bulunmayan logların kritik bir özelliğidir. Bir sorunun nerede ortaya çıktığını bilmenin yanı sıra, ne zaman olduğunu bilmek de önemlidir. Bu durumlarda zaman damgaları en büyük müttefiklerinizdir. Zaman damgalarını yazarken standart biçimi, yani ISO-8601 biçimini kullandığınızdan emin olun.
Eski günlük dosyalarını arşivlemek, sıkıştırmak veya silmek ve bellek alanı sorunlarını önlemek için FileHandler yerine TimedRotatingFileHandler gibi RotatingFileHandler sınıflarını kullanın. Bu sınıflar, bir boyut sınırı veya zaman koşulu tetiklendiğinde alanı temizler.
Yorumlar, kodumuzun gelecekteki okuyucuları için notlar düşmek açısından çok önemlidir. Kodun nasıl yorumlanması gerektiğini tanımlamak zor olsa da, izleyebileceğimiz bazı yönergeler vardır:
İki tür yorum vardır: blok yorumlar ve satır içi yorumlar.
Bir blok yorum, kendisinden sonra gelen kodu açıklar. Genellikle blok yorumu kod bloğuyla aynı düzeyde girintilersiniz. Bir blok yorumun her satırı # ve bir boşlukla başlar, şu şekilde:
# This is a block comment
print('Welcome to DataCamp!")
Öte yandan, satır içi yorumlar kodla aynı satırda görünür. Satır içi yorumlar, ifadeden en az iki boşlukla ayrılmalıdır. Blok yorumuna benzer şekilde, bir satır içi yorum tek bir kare işareti (#) ile başlar, ardından bir boşluk ve bir metin dizesi gelir.
print ("Have you ever tried Python?") # This is an inline comment
Docstring, bir modül, fonksiyon, sınıf veya yöntem tanımında ilk ifade olarak yer alan bir dize sabitidir. Genellikle, kod dokümantasyonunu otomatik olarak oluşturmak için bir dokümantasyon dizesi kullanırsınız. Bu nedenle bir docstring, çalıştırma sırasında o nesnenin obj.__doc__ özel niteliği kullanılarak erişilebilir.
Tutarlılık için docstring’ler her zaman üç çift tırnak (""") içine alınır.
Docstring’lerin iki biçimi vardır: tek satırlık ve çok satırlı docstring’ler. Tek satırlıklar gerçekten bariz durumlar içindir. Gerçekten tek satıra sığmalıdırlar. Aşağıdaki örnek, multiply() fonksiyonunda tek satırlık bir docstring’i gösterir:
def multiply(x, y):
""" Return the product of two numbers """
result = x * y
return result
Öte yandan, çok satırlı bir docstring birden fazla satıra yayılabilir. Böyle bir docstring, betiğin işlevini, komut satırı sözdizimini, ortam değişkenlerini ve dosyaları belgelendirmelidir. Kullanım iletileri oldukça ayrıntılı olabilir ve yeni bir kullanıcının komutu doğru şekilde kullanması için yeterli olmalıdır.
def calculate_salary(hours, price=20):
""" Return the salary according to the hours worked
Arguments:
hours: total hours investe
price: price of each hours worked. Minimum price is 20 dollars
"""
salary = hours * price
return salary
Docstring’lere ilişkin daha ayrıntılı bir açıklama PEP257'de bulunabilir.
Yorumlar, birlikte çalıştığınız diğer geliştiricilerin kodunuzu anlaması için önemliyken, dokümantasyon potansiyel kullanıcı topluluğunun yazılımınızı kullanmayı öğrenmesine yardımcı olmayı amaçlar. Bu kritik bir adımdır: Yazılımınız ne kadar iyi olursa olsun, dokümantasyon yeterince iyi değilse, ya da daha da kötüsü eksikse, insanlar onu kullanmayacaktır.
Özellikle yeni bir projede çalışıyorsanız bir README dosyası eklemek her zaman iyi bir uygulamadır. Bu dosyalar genellikle kodunuzun okuyucuları için ana giriş noktasıdır ve hem kullanıcılar hem de proje bakıcıları için genel bilgileri içerir.
Kısa olmakla birlikte, README dosyası projenin amacını, yazılımın ana kaynağının URL’sini ve kredi bilgilerini açıklamalıdır.
Aynı şekilde, yazılımın veya kitaplığın Python modüllerini dağıtmanın standardı olan Distutils ile paketlenip dağıtıldığından emin olmak için her zaman bir setup.py dosyası eklemelisiniz.
Ayrıca, yazılımınızın çalışması için başka bağımlılıklar veya paketler gerekiyorsa, gerekli bağımlılıkları ve sürümlerini açıklayan bir requirements.txt dosyası eklemelisiniz.
Son olarak, potansiyel kullanıcılar için ilgili olduğunu düşündüğünüz diğer tüm bilgileri eklemekte özgürsünüz. Örneğin, paketinizin veya fonksiyonlarınızın nasıl çalıştığına dair örnekler sunmak iyi bir uygulamadır.
Veri projelerinizde düzen ve tutarlılığı sağlamak için, başladığınız her proje için bir sanal ortam oluşturmak iyi bir uygulamadır.
Sanal ortamlar, diğer adıyla virtualenv’ler, Python ve projeniz için gereken kitaplıkların sürümlerini ve bunlarla ilişkili pip sürümlerini ayırmanıza ve yalıtmanıza yardımcı olur. Bu sayede son kullanıcılar, sistemin sağladıklarından bağımsız olarak kendi yazılım ve sürüm setlerini yükleyip yönetebilir.
Sanal ortam oluşturmak için önce gerekli paketi yüklememiz gerekir; terminalinize aşağıdaki kod satırını yazın:
pip install virtualenv
Yeni bir sanal ortam oluşturmak için sihri gerçekleştirecek kod aşağıdadır. Yeni sanal ortama “new_venv” adını veriyoruz
python3 -m venv /path/to/new/virtual/environment/new_venv
Yeni başlayan Python geliştiricileri arasında en yaygın hatalardan biri, değişkenlerin, sınıfların, fonksiyonların vb. yanlış adlandırılmasıdır. Adlandırma kuralları, kodun okunabilirliğini sağlamak için kritik unsurlardır.
PEP 8, Python'da nesnelerin standart şekilde nasıl adlandırılacağını açıklar. Yönergelere göre, yeni modüller ve paketler (üçüncü taraf çerçeveler dahil) bu standartlara göre yazılmalıdır, ancak mevcut bir kitaplığın farklı bir stili varsa dahili tutarlılık tercih edilir.
Çok genel veya günlük dile ait isimler kullanmaktan kaçınmalısınız. Ayrıca standart kitaplıkta kullanılan tanımlayıcılar, PEP 3131'de açıklandığı gibi ASCII ile uyumlu olmalıdır.
# Bad naming:
data_structure, ríos_españa, dictionary_with_countries_and_capitals
# Good naming:
user_profile, stop_words, global_emissions_df
Aşağıda Python'daki en yaygın nesneler için adlandırma kurallarının bir listesi yer almaktadır.
|
Tanımlayıcı |
Kural |
|
Modül |
küçük harf |
|
Sınıf |
CapWords |
|
Fonksiyonlar |
küçük harf |
|
Yöntemler |
küçük harf |
|
Tür değişkenleri |
CapWords |
|
Sabitler |
BÜYÜK HARF |
|
Paket |
küçük harf |
Python en iyi uygulamalarında ustalaşmak, temiz, verimli ve sürdürülebilir kod yazmak için gereklidir. Kod kalitesi, günlükleme, yorumlama ve dokümantasyona ilişkin yönergeleri izleyerek ve sanal ortamlar gibi araçlar kullanarak projelerinizin yönetilmesini, birlikte çalışılmasını ve ölçeklendirilmesini kolaylaştırabilirsiniz.
Python becerilerinizi geliştirmeye devam ederken, Python ve geniş uygulama yelpazesine ilişkin anlayışınızı derinleştirmek için daha kapsamlı öğrenme kaynaklarını keşfetmeyi düşünün. Yapılandırılmış bir rehberlik arıyorsanız, şu kaynaklara göz atın:
Yazılım geliştirme sırasında okunabilirliği, kaliteli kodu ve ölçeklenebilirliği sağlamak için.
Sanal ortam, her proje için ayrı ve yalıtılmış bir ortam oluşturarak farklı projelerin bağımlılıklarını birbirinden ayıran bir araçtır.
Python kodunun nasıl yazılacağına dair standart yönergeler ve en iyi uygulamalar sunan bir belgedir.
Girintileme, bir kod satırının başındaki boşlukları ifade eder. Python, bir kod bloğunu belirtmek için girintilemeyi kullanır.
Python’un Zen’i, Python programlama dilinin tasarımını etkileyen, bilgisayar programları yazmaya yönelik 19 "yol gösterici ilke"den oluşan bir derlemedir.
Python docstring, bir Python modülünü, sınıfını, fonksiyonunu veya yöntemini belgelendirmek için kullanılan bir dizedir; böylece programcılar uygulamanın ayrıntılarını okumadan ne yaptığını anlayabilir.
İki tür yorum vardır: blok yorumlar ve satır içi yorumlar.
Serbest çalışan bir veri analistiyim; dünya genelinde şirketler ve kuruluşlarla veri bilimi projelerinde iş birliği yapıyorum. Ayrıca 2+ yıllık deneyime sahip bir veri bilimi eğitmeniyim. Düzenli olarak İngilizce ve İspanyolca veri bilimiyle ilgili makaleler yazıyorum; bunların bir kısmı DataCamp, Towards Data Science ve Analytics Vidhya gibi köklü internet sitelerinde yayımlandı. Siyaset bilimi ve hukuk geçmişine sahip bir veri bilimci olarak amacım, kamu politikası, hukuk ve teknolojinin kesişiminde çalışmak; fikirlerin gücünden yararlanarak özellikle iklim krizi olmak üzere acil sorunların üstesinden gelmemize yardımcı olabilecek yenilikçi çözümler ve anlatılar geliştirmek. Kendimi otodidakt bir kişi, sürekli öğrenen ve disiplinlerarasılığın güçlü bir savunucusu olarak görüyorum. Yeni şeyler öğrenmek için asla geç değildir.
Bu kurslarla Python hakkında daha fazlasını öğrenin!
Kurs
Kurs
Kurs
blog
Dario Radečić
15 dk.

blog
Abid Ali Awan
14 dk.
Eğitim
Adel Nehme
Eğitim
Kurtis Pykes
8 dk.