2016-05-24 9 views
2

を交換しのpython - ラムダ私は「ラムダ」の代わりに使用することができ、他にどのようなアプローチ

def calculate_fees(self): 
    return sum(map(lambda x: x.fee, self.bookings.values())) 

def calculate_donations(self): 
    return sum(map(lambda x: x.donation, self.bookings.values())) 

def __str__(self): 
    output = 'Event: {0} {1} {2}\n'.format(self.event_id, self.event_date, self.venue) + \ 
      'Miles: {0}\n'.format(self.miles) + \ 
      'Max Places: {0}\n'.format(self.max_places) + \ 
      'Basic Fee: £{0}'.format(self.basic_fee) 

    if self.bookings: 
     output += '\nRunners:\n' + \ 
        '\n'.join(map(lambda x: '{0} {1}'.format(x.runner_id, x.club_id), self.bookings.values())) 
    return output 

答えて

6

lambdaの最初の出現はgeneratorで置き換えることができます

秒のための同様の
return sum(x.fee for x in self.bookings.values()) 

第3位:

'\n'.join('{0} {1}'.format(x.runner_id, x.club_id) for x in self.bookings.values()) 

sumstring.joinはジェネレータを処理できるため、これらの関数の引数としてジェネレータ式を直接使用できます。

4

は、発電機を使用してください:

return sum(x.fee for x in self.bookings.values()) 

一般的に、発電機や内包は読みやすさを向上させ、あなたがmapfilter仕事をするためにlambdaを使用することを持っている場合は特に。また、maplambdaはパフォーマンス面でよく一緒に再生されません(Python List Comprehension Vs. Map)。

+0

あなたは 'in'を忘れました – polku

+0

@polku Thx注意!私の答えを更新しました。 – schwobaseggl

関連する問題