Ben çağrılabilir nesneleri kullanmak iyi bir yer bulmak, tanımlamak olanlar __call__()gibi, Python fonksiyonel programlama yeteneklerini kullanırken, olduğu map(), filter(), reduce().
Çağrılabilir bir nesneyi düz bir işlev veya lambda işlevi üzerinde kullanmak için en iyi zaman, mantığın karmaşık olması ve bazı durumları koruması veya __call__()işleve iletilmeyen diğer bilgileri kullanmasıdır .
Dosya adlarını, çağrılabilir bir nesne ve kullanarak dosya adı uzantılarına göre filtreleyen bazı kodlar filter().
çağrılabilir:
import os
class FileAcceptor(object):
def __init__(self, accepted_extensions):
self.accepted_extensions = accepted_extensions
def __call__(self, filename):
base, ext = os.path.splitext(filename)
return ext in self.accepted_extensions
class ImageFileAcceptor(FileAcceptor):
def __init__(self):
image_extensions = ('.jpg', '.jpeg', '.gif', '.bmp')
super(ImageFileAcceptor, self).__init__(image_extensions)
Kullanımı:
filenames = [
'me.jpg',
'me.txt',
'friend1.jpg',
'friend2.bmp',
'you.jpeg',
'you.xml']
acceptor = ImageFileAcceptor()
image_filenames = filter(acceptor, filenames)
print image_filenames
Çıktı:
['me.jpg', 'friend1.jpg', 'friend2.bmp', 'you.jpeg']