CodeBlanks Logo Icon CodeBlanks

Birleştirme

Tüm uzman konularını birleştirerek çalışan bir uygulama yazarsın.

Tüm katmanları birleştir

Son derste tüm expert konularını tek bir uygulamada birleştirirsin. abs_val fonksiyonu, libc.abs çağırır; Pool.map bu fonksiyonu [-1, -2, -3] listesine paralel uygular.

Bu, metaprogramming (Field + ModelMeta), multiprocessing (Pool) ve ctypes (CDLL + abs) katmanlarını birleştirir. Başlangıç kodu önceki dört dersin çözümünü içerir. Sen yalnızca abs_val fonksiyonunu ve Pool.map çağrısını eklersin. Sonuç: [1, 2, 3].

Uygulama Tümünü birleştir: abs_val + Pool.map

Başlangıç kodunda Tool, Field, ModelMeta, square ve libc hazır. Şimdi abs_val(x) fonksiyonu yaz; libc.abs(x) döndürsün. with Pool() as p: bloğu içinde p.map(abs_val, [-1, -2, -3])'ü result'a ata. result'u yazdır.

Başlangıç kodu

main.py
# Tool sınıfını type() ile oluştur
Tool = type("Tool", (), {
    "name": "arac",
    "run": lambda self: f"{self.name} calisti",
})

# Field descriptor ve ModelMeta ekle
class Field:
    def __set_name__(self, owner, name):
        self.name = name
        if not hasattr(owner, "fields"):
            owner.fields = []
        owner.fields.append(name)

class ModelMeta(type):
    def __new__(mcs, name, bases, ns):
        return super().__new__(mcs, name, bases, ns)

class Model(metaclass=ModelMeta):
    ad = Field()

# Paralel kare hesaplama ekle
from multiprocessing import Pool

def square(x):
    return x * x

# Yerel abs çağrısı ekle
import ctypes

libc = ctypes.CDLL(None)

# Birleştirme: abs_val ve Pool.map
# abs_val içinde libc.abs çağır
# negatif sayı listesini işle
# sonucu yazdır

Örnek çözüm

main.py
# Tool sınıfını type() ile oluştur
Tool = type("Tool", (), {
    "name": "arac",
    "run": lambda self: f"{self.name} calisti",
})

# Field descriptor ve ModelMeta ekle
class Field:
    def __set_name__(self, owner, name):
        self.name = name
        if not hasattr(owner, "fields"):
            owner.fields = []
        owner.fields.append(name)

class ModelMeta(type):
    def __new__(mcs, name, bases, ns):
        return super().__new__(mcs, name, bases, ns)

class Model(metaclass=ModelMeta):
    ad = Field()

# Paralel kare hesaplama ekle
from multiprocessing import Pool

def square(x):
    return x * x

# Yerel abs çağrısı ekle
import ctypes

libc = ctypes.CDLL(None)

def abs_val(x):
    return libc.abs(x)

with Pool() as p:
    result = p.map(abs_val, [-1, -2, -3])
print(result)

Beklenen çıktı

[1, 2, 3]

Proje tamamlandı

Tebrikler! Uzman finalını tamamladın. Beş derste bir veri işleme araç seti kurdun: type() ile dinamik sınıf, Field + ModelMeta ile metaprogramming, Pool ile paralel işleme, CDLL ile yerel kod çağrısı.

Son derste tümünü birleştirdin: abs_val fonksiyonu hem libc.abs çağırır hem de Pool.map ile paralel çalışır. Bu, gerçek Python çatılarının çekirdek tekniklerini bir araya getirir. Uzman seviyesindeki tüm konular artık elinin altında.

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Tüm uzman kavramlarını eşleştir

Kavram Anlamı
type() Dinamik sınıf
Field Descriptor
Pool Paralel havuz
CDLL C kütüphanesi

2 abs_val tanımını tamamla

Soru
def abs_val(x):
    return libc.____(x)
Cevap
def abs_val(x):
    return libc.abs(x)

Açıklama: abs_val, libc.abs fonksiyonunu çağırır.

3 Birleştirme ne yapıyor?

  • Yalnızca CDLL kullanır
  • Yalnızca Pool kullanır
  • Yalnızca type() kullanır
  • Pool.map ile abs_val'i paralel çağırır Doğru cevap

Açıklama: Birleştirme, Pool.map ile abs_val'i paralel çağırır; tüm katmanları birleştirir.

Uzman bölümündeki tüm dersler