0Pricing
Python Academy · Ders

functools: partial ve reduce

partial ile özelleştirilmiş işlevler oluşturun ve reduce ile dizileri katlayın.

functools: partial ve reduce, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.

functools Genel Bakış

functools, diğer işlevler üzerinde çalışan veya başka işlevler döndüren üst düzey işlevlerden oluşan bir standart kitaplık modülüdür.

import functools

# partial, reduce, lru_cache, wraps, cached_property ...
print(dir(functools))

partial()

functools.partial(func, *args, **kw), bazı bağımsız değişkenleri önceden doldurulmuş yeni bir çağrılabilir oluşturur.

import functools

def power(base, exp):
    return base ** exp

square = functools.partial(power, exp=2)
cube   = functools.partial(power, exp=3)

print(square(4))  # 16
print(cube(3))    # 27

Yöntemlerle partial

Sabit parametrelere sahip yöntemleri geri çağrılar veya olay işleyicileri olarak kullanıma uyarlamak için partial kullanın.

import functools, logging

logger = logging.getLogger("app")
log_error = functools.partial(logger.log, logging.ERROR)

log_error("Something went wrong")

partial ve lambda Karşılaştırması

Bağımsız değişkenleri önceden doldurmak için partial, lambda'ya tercih edilir; çünkü serileştirilebilir, iyi bir gösterime sahiptir ve belgeleme dizesini korur.

import functools

mul = lambda x, y: x * y

double_lambda = lambda x: mul(x, 2)            # lambda approach
double_partial = functools.partial(mul, y=2)   # partial approach

print(double_partial(5))   # 10

reduce()

functools.reduce(func, iterable, initial), ikili bir işlev kullanarak yinelemeli nesneyi soldan sağa katlar.

import functools, operator

total = functools.reduce(operator.add, [1,2,3,4,5])
print(total)   # 15

product = functools.reduce(operator.mul, [1,2,3,4,5], 1)
print(product) # 120

reduce ile max() Oluşturma

max() işlevini yeniden uygulayarak reduce kullanımını gösterin:

import functools

def my_max(seq):
    return functools.reduce(lambda a, b: a if a > b else b, seq)

print(my_max([3, 1, 4, 1, 5, 9]))  # 9

İç İçe Listeleri Düzleştirme

Tek bir iç içelik düzeyini düzleştirmek için reduce ile operator.iconcat kullanın.

import functools, operator

nested = [[1,2],[3,4],[5]]
flat = functools.reduce(operator.iconcat, nested, [])
print(flat)  # [1, 2, 3, 4, 5]

URL Oluşturmak için partial

Pratik bir partial kalıbı: temel bir web adresini sabitleyin ve özelleştirilmiş istek yardımcıları oluşturun.

import functools, urllib.request

def fetch(base, path):
    url = base.rstrip("/") + "/" + path.lstrip("/")
    with urllib.request.urlopen(url) as r:
        return r.read()

github = functools.partial(fetch, "https://api.github.com")
# github("/users/octocat")

wraps(): Üst Verileri Koruma

Dekoratör yazarken, sarmalayıcının özgün işlevin adını ve belgeleme dizesini koruması için @functools.wraps(wrapped) kullanın.

import functools

def decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kw):
        return func(*args, **kw)
    return wrapper

@decorator
def greet(name):
    """Say hello."""
    return f"Hello, {name}"

print(greet.__name__)  # greet
print(greet.__doc__)   # Say hello.

total_ordering

@functools.total_ordering, __eq__ ile __lt__/__le__/__gt__/__ge__ yöntemlerinden birini tanımladığınızda eksik karşılaştırma yöntemlerini tamamlar.

import functools

@functools.total_ordering
class Version:
    def __init__(self, major, minor):
        self.v = (major, minor)
    def __eq__(self, o): return self.v == o.v
    def __lt__(self, o): return self.v < o.v

print(Version(1,2) >= Version(1,1))  # True

singledispatch

@functools.singledispatch, ilk bağımsız değişkenin türüne göre farklı uygulamalara yönlendirme yapan bir işlev oluşturur.

import functools

@functools.singledispatch
def process(arg):
    raise NotImplementedError(type(arg))

@process.register(int)
def _(n): return n * 2

@process.register(str)
def _(s): return s.upper()

print(process(5))     # 10
print(process("hi"))  # HI

Hızlı Kontrol

functools.partial(pow, 2) ne oluşturur?

Özet

partial işlev bağımsız değişkenlerini önceden doldurur; reduce bir diziyi ikili bir işlevle katlar; wraps dekoratör üst verilerini korur; total_ordering karşılaştırma yöntemlerini tamamlar; singledispatch türe göre yönlendirme yapar.

Sıkça Sorulan Sorular

“functools: partial ve reduce” dersi ücretsiz mi?

Evet — “functools: partial ve reduce” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.

“functools: partial ve reduce” dersinde ne öğreneceğim?

partial ile özelleştirilmiş işlevler oluşturun ve reduce ile dizileri katlayın. Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Python Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“functools: partial ve reduce” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. itertools: Sonsuz ve Sonlu Yineleyiciler
  2. itertools: Kombinatorik
  3. functools: partial ve reduce
  4. functools: lru_cache ve cached_property
← Python Academy Sayfasına Dön