2012-08-06 22 views
8

functools.partial için dokümantasyon o "kabaca eşdeğer" olduğunu söylüyor Sanki belirtilen çizgiyi değiştirmek zorundayım. Sadece bu kodu kopyalayarak içinde endişe gereken başka özellikler/FRİKİKLERİNDENuygulayan functools.partial

var mı?

cevap

6

_functoolsmodule.c kaynak koduna baktığımda, endişelenecek çok şey olduğunu düşünmüyorum.

partial ait modül uygulaması dekapaj ve repr kolları, ancak belgelerde gibi çalışır gibi her şey çok muhtemelen o C uygulanan nedeni sadece verimlilik içindir görünüyor. Ayrıca, bir işlev kapanması olmaktan ziyade bir tür olduğu gerçeği de vardır. Bununla birlikte, dokümantasyon örneğinde, func, args ve keywords'un tamamen kozmetik olduğuna dikkat edin; gerçek functools.partial örnekleriyle olduğu gibi geçersiz kılmıyorlar. Bir alternatif functools.partial alt sınıfı olacaktır:

class rpartial(partial): 
    def __call__(self, *args, **kwargs): 
     kw = self.keywords.copy() 
     kw.update(kwargs) 
     return self.func(*(args + self.args), **kwargs) 
+0

Yerleşik alt sınıfları düşünmemiştim. sınıf rpartial (kısmi): – Dave

+0

Bu harika ama ben okumak gerektiğini düşünüyorum def __call __ (self, * args ** kwargs): kw = self.keywords.copy() kw.update (kwargs) self.func (* (prmtr + self.args), ** kw) – ishmael

+0

@ishmael sayesinde, sabit geri döner. – ecatmur

0

Bir sıkan Kısmi atama, aşağıdaki örnekte olduğu gibi keyfi argümanları ele şekli şöyledir:

def f(a,b, *args): 
    pass 

Şimdi kısmen argümanlar 1 ve 2'ye f geçerlidir:

g = partial(f, 1, 2) 

nedir gb parametresinin değeri nedir? 1 mi, yoksa hala bir değer mi bekliyor? Bu konuda a'un değeri nedir? Başka bir deyişle, sağlanan argümanların kaçının varsa, ek argümanlar olarak ele alınması gerekir.

+0

Bu iyi bir açıklama, ama) ('g anlamına synatax ilan olur == f (1,2); g (x) == f (x, 1,2); g (x, y) == f (x, y, 1,2) 'vb. Bu garip olabilir, ancak sistematiktir. – Dave

İlgili konular