3

このための組み込みバージョンはありますか

def unpack(f, a):
    return f(**a) #or ``return f(*a)''

unpackがオペレーターと見なされず、operator.* に配置されないのはなぜですか?

私はこれに似たようなことをしようとしています(もちろん、同じタイプの問題に対する一般的な解決策が必要です):

from functools import partial, reduce
from operator import add
data = [{'tag':'p','inner':'Word'},{'tag':'img','inner':'lower'}]
renderer = partial(unpack, "<{tag}>{inner}</{tag}>".format)
print(reduce(add, map(renderer, data)))

ラムダや内包表記を使用しない場合と同様です。

4

2 に答える 2

4

それはこれについて行く方法ではありません。どうですか

print(''.join('<{tag}>{inner}</{tag}>'.format(**d) for d in data))

より Pythonic スタイルの同じ動作。

編集:Pythonの優れた機能を使用することに反対しているように見えるので、これはどうですか:

def tag_format(x):
    return '<{tag}>{inner}</{tag}>'.format(tag=x['tag'], inner=x['inner'])
results = []
for d in data:
    results.append(tag_format(d))
print(''.join(results))
于 2013-02-13T17:13:34.377 に答える
0

私はあなたが望むことをする演算子を知りませんが、ラムダや理解を避けるために本当に必要ではありません:

from functools import reduce
from operator import add
data = [{'tag':'p','inner':'Word'},{'tag':'img','inner':'lower'}]
print(reduce(add, map("<{0[tag]}>{0[inner]}</{0[tag]}>".format, data)))

必要に応じて、このようなものを一般化することもできるようです。

于 2013-02-13T19:30:38.947 に答える