2016-10-27 6 views
-1

私はナビゲーションリンクの生成に取り組んでいます。私は現在、ループにこのリストをmap()を使用していますジェネレータを使用してリストをマップし、オブジェクトに変換する

nav_objects = [ 
    { 
    'href': "http://somedomain.com", 
    'title': "Some Domain" 
    }, 
    { 
    'href': "http://somedomain2.com", 
    'title': "Some Domain 2" 
    }, 
    { 
    'href': "http://somedomain3.com", 
    'title': "Some Domain 3" 
    } 
    { 
    'href': "http://somedomain4.com", 
    'title': "Some Domain 4" 
    } 
] 

およびナビゲーション・リンク

def gen_nav_item(nav_item): 
    return '<a href="{}">{}</a>'.format(nav_item['href'], nav_item['title']) 

nav_items = map(gen_nav_item, nav_objects) 

を生成し、それはそのI文字列のリストを生成し、これは動作します:

は現在、私は、辞書のリストを持っています私のテンプレートで後で印刷することができます。しかし、代わりにジェネレータ関数を使用できるかどうか、これが良い方法であるかどうかは不思議です。例えば、 。

def nav_item_generator(nav_objects): 
    for nav_item in nav_items: 
    yield '<a href="{}">{}</a>'.format(nav_item['href'], nav_item['title']) 

nav_items = nav_item_generator(nav_objects) 
+2

できます。あなたの問題はどこですか? – L3viathan

答えて

1

あなたは完全に特殊な機能をスキップして、単にリストの内包やジェネレータ式を使用することもできます。それは怠惰なgenexprの代わりに、熱心listcomp作るために括弧し

nav_items = ['<a href="{}">{}</a>'.format(x['href'], x['title']) for x in nav_objects] 

変更最も外側のブラケット。

mapを使用する独自の関数を記述する必要がある場合は、mapを使用しないでください。それはlistcompまたはgenexprを使うよりも遅く、Pythonicも少なくなります。 mapは、直接使用できる既存のPythonビルトインがある場合にのみ便利です。

関連する問題