2015-06-21 17 views
7

çok sık gibi kod yazmakÖnemsiz fanktorlar

def attr_f(field): 
    return lambda x: getattr(x, field) 

def idx_f(field): 
    return lambda x: x[field] 

var mıdır idx_f gibi funktoru-yaratıcıları ve python'da attr_f ve lambda'dan daha kullanıldıklarında daha net mi?

from operator import attrgetter, itemgetter 

sorted(some_dict.items(), key=itemgetter(1)) 
sorted(list_of_dicts, key=itemgetter('name')) 
map(attrgetter('name'), rows) 

Bu işlevler ayrıca her görüşün değerini içeren bir demet dönersiniz bu noktada birden fazla argüman, atın:

cevap

11

operator modül sadece bunu yapmak operator.attrgetter() ve operator.itemgetter() sahiptir:

# sorting on value first, then on key 
sorted(some_dict.items(), key=itemgetter(1, 0)) 

# sort dictionaries by last name, then first name 
sorted(list_of_dicts, key=itemgetter('last_name', 'first_name')) 

attrgetter() fonksiyonu da noktalı isimler, sizi kabul niteliklerin özelliklerini ulaşabilir: Büyük

# extract contact names 
map(attrgetter('contact.name'), companies) 
+0

! Bu yolu geri almayı hatırlıyorum, ancak bunları Google’da bulamadım. – Herbert

İlgili konular