Python’un Benzersiz Özellikleri Nelerdir? — Bölüm 4 (Son)

Cahit Barkin Ozer
12 min readFeb 10, 2024

--

Python benzersiz özellikler serisinin Son Bölümü.

For English:

Python Kodların Hızlandırılması

Hepimizin bildiği gibi Python yorumlanmış bir programlama dilidir. Python uygulamaları, kodlarını genel makine koduna dönüştürmek için bir yorumlayıcıya ihtiyaç duyar. Bir Python modülünün yürütülebilmesinden önce kodunun ayrıştırılması ve anlaşılması gerekir. Çeşitli karşılaştırma çalışmalarına göre Python, C++, Java ve C# gibi derlenmiş programlama dillerinden önemli ölçüde daha yavaştır.

Python programlarını hızlandırmak, günümüzde yazılım mühendisleri için, özellikle de büyük veri kümeleri ve birden fazla ilişkili girdi parametresi (özellikleri) içeren makine öğrenimi projelerinde kritik bir konudur.

Python programlarını hızlandırmak için en yaygın araçlar şunlardır:

  • Cython, isteğe bağlı C’den ilham alan sözdizimi ile öncelikle Python’da yazılan kodla C benzeri performans sağlamayı amaçlayan bir programlama dilidir. Cython, CPython uzantı modülleri oluşturmak için yaygın olarak kullanılan derlenmiş bir dildir.
  • PyPy, Python kodunu verimli statik olarak yazılmış kod halinde derleyen RPython programlama dili üzerine kurulmuştur. Bu noktada PyPy, ortaya çıkan RPython kodunu bytecode’a dönüştürür ve C tabanlı bir yorumlayıcı içerir. Üretilen bayt kodu derlenmiş kod üzerinde yürütülür. Paket, Python programlamayı hızlandırmak için kullanılabilecek bir “tam zamanında” (JIT) derleme sürümünü içerir. JIT derlemesi, kodun yürütmeden önce değil çalışma zamanında derlendiği bir bilgisayar kodunu yürütme yöntemidir.
  • Numba, Python ve NumPy kodunun bir kısmını çalışma zamanı sırasında hızlı makine koduna dönüştüren açık kaynaklı bir JIT derleyicisidir. Günümüzde Python programlarını hızlandırmak için en popüler uygulamadır. NumPy dizilerini ve işlevlerini kullanarak öncelikle bilimsel hesaplama için oluşturuldu. Numba, NumPy dizi ifadelerini birkaç CPU çekirdeğinde otomatik olarak çalıştırabilir, bu da paralel döngüler oluşturmayı kolaylaştırır. Numba aracı, birkaç kod değişikliğiyle CPU ve GPU’larda Python programlamayı paralelleştirmek için çeşitli seçenekler sunar.

Numba

Numba’nın tam zamanında derleyicisinin programınızı hızlandırmanıza nasıl yardımcı olabileceğine bakalım.

import numpy as np
import timeit
from numba import jit

# Define a Python function that calculates the sum of squares
def sum_of_squares(arr):
result = 0
for x in arr:
result += x**2
return result

# Decorate the function with @jit to compile it with Numba
@jit
def numba_sum_of_squares(arr):
result = 0
for x in arr:
result += x**2
return result

# Create a large array
arr = np.arange(1000000)

# Time the execution of the Python function
start_time = timeit.default_timer()
sum_of_squares(arr)
end_time = timeit.default_timer()
python_time = end_time - start_time

# Time the execution of the Numba-compiled function
start_time = timeit.default_timer()
numba_sum_of_squares(arr)
end_time = timeit.default_timer()
numba_time = end_time - start_time

print("Python Function Execution Time:", python_time)
print("Numba-compiled Function Execution Time:", numba_time)

Veri Görselleştirme

Veri görselleştirme, her istatistiksel analiz veya makine öğrenimi çabasında kritik bir aşamadır. Haritalar veya grafikler genellikle bu tür tasvirleri göstermek için kullanılır. Veri görselleştirme verilerin anlaşılmasına yardımcı olarak ilişkilerin, önyargıların ve aykırı değerlerin erken tespitine olanak tanır.

Python’daki en popüler üç veri görselleştirme ekosistemi kütüphanesi Matplotlib, Seaborn ve Bokeh’tir.

Matplotlib

En popüler kütüphane olan Matplotlib, dağılım (scatter) grafikleri, çubuk (bar) grafikler, histogramlar, çizgi (line) grafikleri, pasta (pie) grafikleri, gövde (stem) grafikleri, kontur (contour) grafikleri, titreme (quiver) grafikleri ve spektrogramlar dahil olmak üzere çok çeşitli grafik türleri sunar. Bir Matplotlib şekli aşağıda görüldüğü gibi çok sayıda bileşene ayrılabilir:

  • Bu şekil bir veya daha fazla eksen (grafik) içerebilir. Bir figürü çizilmiş bir tuval gibi düşünebiliriz.
  • Eksenler genellikle grafikler olarak adlandırılır. Bir şeklin birden fazla ekseni olabilir. İki veya üç eksenli (3 boyutlu) öğeler içerir. Her eksenin bir başlığı, x etiketi ve y etiketi vardır.
  • Eksen, grafiğin sınırlarını oluşturan çizgi benzeri nesnelerin sayısını ifade eder.
  • Figürün unsurlarının tamamı sanatçılar tarafından yaratılmıştır. Örnekler arasında metin nesneleri, Line2D nesneleri ve koleksiyon nesneleri bulunur.
import matplotlib.pyplot as plt
import numpy as np

# Sample data
x = np.random.normal(size=1000)
y = np.random.normal(size=1000)
categories = ['A', 'B', 'C', 'D']
values = [7, 13, 5, 10]
x_line = np.linspace(0, 10, 100)
y_line = np.sin(x_line)

# Create figure and subplots
fig, axes = plt.subplots(2, 3, figsize=(15, 10))

# Histogram
axes[0, 0].hist(x, bins=30, color='skyblue', edgecolor='black')
axes[0, 0].set_title('Histogram')
axes[0, 0].set_xlabel('Value')
axes[0, 0].set_ylabel('Frequency')

# Scatter plot
axes[0, 1].scatter(x, y, alpha=0.5)
axes[0, 1].set_title('Scatter Plot')
axes[0, 1].set_xlabel('X')
axes[0, 1].set_ylabel('Y')

# Horizontal bar chart
axes[0, 2].barh(categories, values, color='lightgreen')
axes[0, 2].set_title('Horizontal Bar Chart')
axes[0, 2].set_xlabel('Values')
axes[0, 2].set_ylabel('Categories')

# Vertical bar chart
axes[1, 0].bar(categories, values, color='lightcoral')
axes[1, 0].set_title('Vertical Bar Chart')
axes[1, 0].set_xlabel('Categories')
axes[1, 0].set_ylabel('Values')

# Line plot
axes[1, 1].plot(x_line, y_line, color='orange')
axes[1, 1].set_title('Line Plot')
axes[1, 1].set_xlabel('X')
axes[1, 1].set_ylabel('Y')

# Remove empty subplot
fig.delaxes(axes[1, 2])

# Adjust layout
plt.tight_layout()

# Show plot
plt.show()

Seaborn

Seaborn kütüphanesi Matplotlib’e dayanmaktadır; ancak Matplotlib’in yerine geçmekten ziyade onun bir tamamlayıcısıdır. Öncelikle istatistiksel veri görselleştirmesi için tasarlanmıştır. Seaborn, veri görselleştirme için şu özellikleri sunar: Grafikleri şekillendirmek için temalar oluşturur, tek değişkenli ve iki değişkenli dizi verilerini görselleştirir, doğrusal ve doğrusal olmayan regresyon modellerine uyum sağlar ve görselleştirir, istatistiksel zaman serisi verilerini çizmede üstündür, NumPy ve pandas veri yapılarıyla iyi çalışacak şekilde tasarlanmıştır. Seaborn kullanım örneği:

import seaborn as sns
import matplotlib.pyplot as plt

# Load the Iris dataset
iris = sns.load_dataset("iris")

# Set the style for seaborn
sns.set(style="whitegrid")

# Swarm Plot
plt.figure(figsize=(12, 6))
plt.subplot(2, 2, 1)
sns.swarmplot(x="species", y="sepal_length", data=iris)
plt.title("Swarm Plot")

# Factor Plot (using a box plot for this example)
plt.subplot(2, 2, 2)
sns.boxplot(x="species", y="sepal_width", data=iris)
plt.title("Factor Plot (Box Plot)")

# Box Plot
plt.subplot(2, 2, 3)
sns.boxplot(x="species", y="petal_length", data=iris)
plt.title("Box Plot")

# Pair Plot
plt.subplot(2, 2, 4)
sns.pairplot(iris, hue="species", markers=["o", "s", "D"])
plt.title("Pair Plot")

# Adjust layout for better visualization
plt.tight_layout()

# Show the plots
plt.show()

Bokeh

Bokeh kütüphanesi öncelikle web tarayıcılarının etkileşimli veri görselleştirmeleri için tasarlanmıştır. Bokeh kitaplığı BokehJS tarafından girdi olarak kullanılan bir JSON dosyası oluşturur. Bir JSON dosyası, yaygın bir veri değişim formatı olan JavaScript Nesne Gösterimi’ndeki (JSON) basit veri yapılarını ve nesneleri içerir. Çoğunlukla bir web uygulaması ile sunucu arasında veri göndermek için kullanılır. İstemci tarafı yazılımı BokehJS, bu JSON dosyasını herhangi bir yaygın web tarayıcısı tarafından gösterilebilecek verilere dönüştürür.

from bokeh.plotting import figure, show
from bokeh.io import output_notebook
from bokeh.models import ColumnDataSource
import numpy as np

# Output to notebook
output_notebook()

# Create data
x = np.linspace(0, 4*np.pi, 100)
y_line = np.sin(x)
y_cos = np.cos(x)
categories = ['A', 'B', 'C', 'D']
values = [3, 7, 5, 2]
x_scatter = np.random.rand(50) * 10
y_scatter = np.random.rand(50) * 10

# Line plot
line_plot = figure(title="Line Plot", x_axis_label='x', y_axis_label='sin(x)')
line_plot.line(x, y_line, line_width=2)

# Cosine plot
cos_plot = figure(title="Cosine Plot", x_axis_label='x', y_axis_label='cos(x)')
cos_plot.line(x, y_cos, line_color="red", line_width=2)

# Bar chart
bar_chart = figure(x_range=categories, title="Bar Chart", x_axis_label='Categories', y_axis_label='Values')
bar_chart.vbar(x=categories, top=values, width=0.5)

# Scatter plot
scatter_plot = figure(title="Scatter Plot", x_axis_label='x', y_axis_label='y')
scatter_plot.scatter(x_scatter, y_scatter, size=8, color="navy", alpha=0.5)

# Show plots
show(line_plot)
show(cos_plot)
show(bar_chart)
show(scatter_plot)

Veritabanlarına Erişim

SQLAlchemy, Python için açık kaynaklı bir SQL araç seti ve nesne ilişkisel eşleyicisidir (ORM). MySQL açık kaynak veritabanı üzerinde CRUD (Oluşturma, Okuma, Güncelleme ve Silme) işlemlerinin nasıl yapılacağını göstereceğiz. Bu kütüphane açık kaynaklıdır, platformlar arasıdır ve tamamen Python ile yazılmıştır. SQLAlchemy, uygulama geliştiricilerine SQL’in (yapılandırılmış sorgu dili) tam gücünü ve esnekliğini sağlamak için nesne ilişkisel eşleyici (ORM) yaklaşımını kullanır.

ORM, bir programlama sınıfı nesnesi, bir veritabanı tablosuna (varlığa) eşlenerek, nesne modelinin ve veritabanı şemasının bir bağlantısını oluşturmasına izin verir. Sonuç olarak, bu ilişkisel bağlantı, yazılım mühendislerinin gerekli kod miktarının yanı sıra proje geliştirme/bakım süresini de önemli ölçüde en aza indirmesine olanak tanır.

MySQL için PyMySQL sürücüsü, Python Veritabanı API spesifikasyon belgesi PEP 249 ile uyumlu bir Python MySQL istemci modülüdür.

Engine (motor) nesnesi tüm SQLAlchemy uygulamalarının başlangıç noktasıdır. Veritabanının birincil nesnesidir ve SQLAlchemy uygulamasına bir bağlantı havuzu ve veritabanı ile uygulama programlama arayüzünün (API) belirli bir kombinasyonuyla nasıl iletişim kurulacağını ve işlevleri açıklayan bir lehçe (dialect) aracılığıyla teslim edilen Python Veritabanı API Belirtimi (DBAPI)’dir. Bir motor oluşturmak, “create_engine()” işlevinin çağrılmasını yapılmasını gerektirir.

Bağlantı nesnesi, veritabanı motoru ile onu çağıran istemci uygulaması arasında arayüz görevi görür. Gerçek DBAPI bağlantısını temsil eden nesnedir. Bir bağlantı nesnesi oluşturmak için motor.connect() yöntemini kullanın. Bağlantı nesnesinin oluşturulmasıyla, herhangi bir veritabanı CRUD eylemi, desteklenen herhangi bir veritabanı motoruna gönderilebilir.

SqlAlchemy CRUD (oluşturma, okuma, güncelleme ve silme) örnekleri:

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# Create SQLite database engine
engine = create_engine('sqlite:///books.db', echo=True)

# Create declarative base
Base = declarative_base()

# Define Book model
class Book(Base):
__tablename__ = 'books'

id = Column(Integer, primary_key=True)
title = Column(String)
author = Column(String)
genre = Column(String)

def __repr__(self):
return f'<Book(title={self.title}, author={self.author}, genre={self.genre})>'

# Create tables
Base.metadata.create_all(engine)

# Create session
Session = sessionmaker(bind=engine)
session = Session()

# Create
book1 = Book(title='To Kill a Mockingbird', author='Harper Lee', genre='Fiction')
book2 = Book(title='1984', author='George Orwell', genre='Science Fiction')
session.add_all([book1, book2])
session.commit()

# Read
all_books = session.query(Book).all()
print("All books:")
for book in all_books:
print(book)

# Update
book_to_update = session.query(Book).filter_by(title='1984').first()
book_to_update.genre = 'Dystopian Fiction'
session.commit()

# Read after update
updated_book = session.query(Book).filter_by(title='1984').first()
print("Updated book:", updated_book)

# Delete
book_to_delete = session.query(Book).filter_by(title='To Kill a Mockingbird').first()
session.delete(book_to_delete)
session.commit()

# Read after delete
remaining_books = session.query(Book).all()
print("Remaining books:")
for book in remaining_books:
print(book)

# Close session
session.close()

Üretim Ortamında Python

https://realpython.com/python-virtual-environments-a-primer/

Sanal Ortam (virtual environment) , yalıtılmış Python sanal ortamları oluşturarak farklı projelerin bağımlılıklarını ayrı tutmaya yardımcı olan basit bir yardımcı programdır. Python paketleri (kütüphaneler) global olarak değil yalıtılmış ortamda dağıtılır. Windows, Unix ve MacOS için mevcut olan Anaconda Dağıtım Paketi, en popüler sanal ortam oluşturma araçlarından biridir. Python paketleri seçilen Python sürümüne uygun olarak kurulmalıdır.

Herhangi bir bilgisayar programı üretime sunulmadan önce, potansiyel kusurların ortadan kaldırıldığından emin olmak için test edilmelidir. Python, birim ve entegrasyon testleri için “unittest” çerçevesini içerir.

Kaynak kodunuzu dokümante etmek günümüzde her program için bir zorunluluktur. Programlama yorumları, uygulama geliştiricilerinin gelecekteki bakım ve hata ayıklama için kaynak kodunu hızlı bir şekilde kavramasına olanak tanır. Python’un kod ve yorum stilleri PEP 8 (Python Enhancement Proposal) ile modellenmiştir. Blok, satır içi ve “docstring” yorumları Python koduna yorum yapmak için idealdir.

Sanal Ortamlar (Virtual Environments)

Python’un paketleri (kütüphaneler) indirme, dağıtma ve saklama konusunda kendi yöntemi vardır. Her Python uygulamasının farklı gereksinimleri vardır. Bu, tek bir Python kurulumunun tüm uygulamaların ihtiyaçlarını karşılayamayacağı anlamına gelir. Çeşitli proje gereksinimleri için Python’un çeşitli sürümlerini ve bunlarla ilişkili kitaplıkları yönetmek için sanal ortamları (VE) kullanmak akıllı bir geliştirme uygulamasıdır.

Basit bir sanal ortam, belirli bir Python sürümü için Python kurulumunun yanı sıra gerekli ekstra kitaplıkları içeren bağımsız bir dizin ağacı olabilir. Python, en yaygın olanı “venv” olarak adlandırılan çeşitli sanal ortam kurulum araçlarını içerir. Bu modül, isteğe bağlı olarak sistem site dizinlerinden bağımsız olan kendi site dizinleriyle hafif sanal ortamlar oluşturmak için iyi bir destek sunar. Her sanal ortamın kendi Python modül dosyaları vardır ve site klasörlerinde kurulu benzersiz bir Python paketleri koleksiyonuna sahip olabilir.

# Create a new virtual environment named 'myenv'
python3 -m venv myenv

# Activate the virtual environment (on Windows)
myenv\Scripts\activate

# Activate the virtual environment (on Unix or MacOS)
source myenv/bin/activate

deactivate

# Delete the virtual environment directory (on Unix or MacOS)
rm -rf myenv

# Delete the virtual environment directory (on Windows)
rmdir /s myenv

Oluşturulan sanal ortamın yapısı:

  • İlgili modüllerin bulunduğu bir klasör ekleyin.
  • Lib klasörü, Python kitaplıklarını ve seçilen Python sürümüne bağlı paketleri içeren bir site paketleri klasörü içerir.
  • Komut dosyaları, Python ile ilgili exe dosyalarının yanı sıra bunları etkinleştirmek ve devre dışı bırakmak için yarasa dosyalarını içerir.
  • pyvenv.cfg dosyası Python VM’nin ana kurulum dizinini, sürümünü ve diğer ayarlarını belirtir.

Bağımlılık Yönetimi

Python’un bağımlılıkları aşağıdaki iki kitaplık (paketler) kullanılarak yönetilir:

  • Pip, Python Paket Dizininden (PyPI) program yüklemek için tercih edilen Python kurulum yazılımıdır. Bu paket Python ile ilgili yazılımlar için halka açık bir depo görevi görür. Python topluluğu tarafından oluşturulan ve paylaşılan uygulamaları bulmayı ve yüklemeyi kolaylaştırır.
  • Ana paket olan conda, Windows için Anaconda Prompt’taki komut satırı komutlarıyla veya macOS veya Linux için terminal penceresinde kullanılabilir (McKinney, 2017).

Python sanal ortam kurarken başlangıçta “conda” kullanmanız önerilir. Conda kurulacak gerekli paketi bulamazsa ikinci seçenek olarak “pip”i kullanın. Her iki paketin komutları da kurulu Python sürümü için uygun paket sürümüne bağımlılığı kontrol edecek kadar akıllıdır.

Conda vs Pip

Aşağıdaki tablo conda ve pip’i karşılaştırmaktadır.

Birim ve Entegrasyon Testleri

https://realpython.com/python-testing/

Yazılım testi artık herhangi bir bilgisayar programının geliştirme yaşam döngüsünün önemli bir bileşenidir. Yazılım kalite güvencesi (Quality Assurance) mühendisleri yazılım testine odaklanır. Günümüzde yazılım mühendislerinin kullandığı en popüler fonksiyonel test programları şunlardır:

  • Birim testleri, yazılımın işlevselliğini sağlar ve sorunların hızlı bir şekilde tanımlanmasına ve çözülmesine yardımcı olur.
  • Entegrasyon testleri bir programın çeşitli işlevlerini ve bunların etkileşimlerini değerlendirir. Ayrıca, uygulamanızı bir bütün olarak test ederek, uygulamanızda mümkün olduğunca çok sayıda bozuk işlevi belirlemenize yardımcı olur. Genel olarak bu testler birim testlerden daha fazla zaman alır.

Aşağıda bazı önemli yazılım testi kurallarını gözden geçireceğiz.

  • Basit bir birim testiyle başlayın. Bu kod genellikle bir modülde veya sınıf dosyasında bulunan işlev prosedürlerinde yazılır.
  • Her birim testinin tamamen bağımsız olduğundan emin olun. Her test, çağrıldıkları sıraya bakılmaksızın hem tek başına hem de tüm test grubunun bir parçası olarak çalışabilmelidir.
  • Geliştirme süresinin uzamasını önlemek için birim testlerinizin hızlı çalışır yapmaya çalışın.
  • İşlevinizin testlerini sık sık, tercihen kodu commit etmeden önce çalıştırın.
  • Her kodlama oturumundan önce ve sonra daima test paketinin tamamını çalıştırın. Bu, kodun kalanında hiçbir şeyi bozmadığınızdan emin olmanızı sağlar.
  • Kodu paylaşılan bir havuza göndermeden önce tüm vaka testlerini içeren bir oturum gerçekleştirin.
  • Herhangi bir nedenle geliştirme oturumunuzu duraklatmanız gerekirse, daha sonra üretmeyi planladığınız şey için kırık birim testi yazmak iyi bir fikirdir. Yazılıma döndüğünüzde nerede olduğunuzu hatırlamanıza yardımcı olacaktır.
  • Uygulamanızda bir hata keşfederseniz sorunu belirlemek için yeni bir test geliştirin. Bu test, nihai program değerlendirmenizin bir parçası olacaktır.
  • İşlevlerinize, uygulamalarına göre uygun adları verin.
    Yazılım testinizi çeşitli entegrasyon testleriyle sonlandırın. Bunların yeterince planlandığından ve belgelendiğinden emin olun.

Unittest — Birim Test Çerçevesi

“Unittest” çerçevesi günümüzde Python uygulama geliştirmede en yaygın kullanılan çerçevedir. Belgelerine göre test otomasyonu, kurulum ve kapatma kodu paylaşımı, koleksiyon toplama ve raporlama çerçevesinden test bağımsızlığı sağlar.

Şimdi aşağıdaki birim test senaryolarına bakacağız:

import unittest

class AddressBook:
def __init__(self):
self.contacts = {}

def add_contact(self, name, email):
self.contacts[name] = email

def remove_contact(self, name):
if name in self.contacts:
del self.contacts[name]

def search_contact(self, name):
return self.contacts.get(name, None)

class TestAddressBook(unittest.TestCase):
def setUp(self):
self.address_book = AddressBook()
self.address_book.add_contact("Alice", "alice@example.com")
self.address_book.add_contact("Bob", "bob@example.com")

def test_add_contact(self):
self.address_book.add_contact("Charlie", "charlie@example.com")
self.assertIn("Charlie", self.address_book.contacts)
self.assertEqual(self.address_book.contacts["Charlie"], "charlie@example.com")

def test_remove_contact(self):
self.address_book.remove_contact("Alice")
self.assertNotIn("Alice", self.address_book.contacts)

def test_search_contact(self):
self.assertEqual(self.address_book.search_contact("Alice"), "alice@example.com")
self.assertEqual(self.address_book.search_contact("Bob"), "bob@example.com")
self.assertIsNone(self.address_book.search_contact("Charlie"))

if __name__ == '__main__':
unittest.main()

asserIn(), asserNotIn(), asserEqual() ve asserIsNone(), test senaryolarının başarılı olup olmadığını belirleyen en basit yöntemde tanımlanan yöntemlerdir.

Birim testinde yaygın olarak kullanılan diğer yöntemler:

Kod Dokümante Etme

https://realpython.com/python-project-documentation-with-mkdocs/

Programlama yorumu, kaynak kodundaki bir programcı tarafından okunabilen bir açıklama veya ek açıklamadır. Mühendislerin kaynak kodunu kavramasını kolaylaştırmak için tanıtıldılar. Programlama dilleri için derleyiciler ve yorumlayıcılar bu yorumları dikkate almazlar.

Yorum yazmanın temel amacı, uygulama geliştiricilerinin gelecekteki bakım ve hata ayıklama için kaynak kodunu hızlı bir şekilde kavramasını sağlamaktır. Yorumlar, diğer programcıların kodunuzu okumasına ve program gereksinimlerine bağlı olarak her şeyin nasıl çalıştığını anlamasına olanak tanır. Bir projenin başlangıcından itibaren kodunuza yorum yaparak sorunsuz bir program geçişi sağlayabilirsiniz. Belirli bir kod satırında bir hata keşfedilirse neyin yanlış gittiğini anlamak ve kodu düzeltmek için yorumu kullanabiliriz.

Dikkat: Kodu değiştirirken o kodla alakalı yorumları da değiştirmeyi unutmayın aksi halde çok sıkıntı yaşanabilir.

Python programlama dili, kod ve yorumların bileşimini yöneten bir stil kılavuzuna sahiptir. Python Geliştirme Teklifi (PEP) standartlarını takip eder. PEP, Python topluluğunu bilgilendiren, yeni bir Python özelliğini belirten veya Python’un yöntemlerini ve ortamını açıklayan bir tasarım belgesidir. PEP, kısa bir teknik spesifikasyon ve özelliğe ilişkin bir gerekçe içermelidir.

Python Kodu için PEP 8 Stil Kılavuzu belgesi, Python dağıtımındaki standart kitaplık için kodlama yönergelerini belirtir. Bu belge, en iyi uygulamalarını belirten bir “yorum” konusu içermektedir. İşte birkaç örnek:

  • Kod güncellendiğinde öncelikle yorumların güncel olduğundan emin olun.
  • Yorumlar, yalnızca bir kelime koleksiyonu değil, tam ve net cümleler olmalıdır.
  • Blok yorumlar genellikle tam cümlelerden oluşturulan bir veya daha fazla satırdan oluşur.
  • Çok cümleli yorumlarda, son cümle hariç, cümle sonu noktasından sonra iki boşluk kullanın.
  • Kodun İngilizce konuşmayan kişiler tarafından okunacağından emin olmadığınız sürece yorumlarınızı İngilizce yazın.

PEP 257, “docstrings”i bir tür açıklama olarak tanımlar. Docstring, bir modül, işlev, sınıf veya yöntem tanımında ilk ifade olarak görünen bir dize değişmezidir. Kamuya açık olmayan yöntemler “belge dizeleri” yorumlarına ihtiyaç duymaz, ancak gerçekleştirdikleri şeyin geniş bir tanımını içermelidirler. Genellikle bu yorum “def” satırından sonra gelmelidir. Üç tek tırnak ‘’’ ve üç çift tırnak ‘’’’’’ destekler.

class Person:
"""A class to represent a person.

Attributes:
name (str): The name of the person.
age (int): The age of the person.
profession (str): The profession of the person.
"""

def __init__(self, name, age, profession):
"""Initialize a Person object with name, age, and profession."""
# This is a block comment
self.name = name # This is a inline comment
self.age = age
self.profession = profession

def greet(self):
"""Return a greeting message."""
return f"Hello, my name is {self.name} and I am {self.age} years old."

def work(self):
"""Return a message describing the person's profession."""
return f"I work as a {self.profession}."

--

--

Cahit Barkin Ozer
Cahit Barkin Ozer

Written by Cahit Barkin Ozer

Üretken YZ başta olmak üzere teknoloji alanındaki yenilikleri öğrenip sizlerle paylaşıyorum. Youtube Kanalım: https://www.youtube.com/@cbarkinozer

No responses yet