1

Pythonでは、テンプレート文字列内に疑似三項演算子を実装しようとしています。kwargs特定のキーがある場合、値が文字列に挿入されます。

reモジュールには、私が必要としていることを正確に実行する方法がありre.sub()ます。一致時に呼び出される関数を渡すことができます。私ができないことはそれに渡す**kwargsことです。コードは次のとおりです

import re

template_string = "some text (pseudo_test?val_if_true:val_if_false) some text"

def process_pseudo_ternary(match, **kwargs):
    if match.groups()[0] in kwargs:
        return match.groups()[1]
    else:
        return match.groups()[2]

def process_template(ts, **kwargs):
    m = re.compile('\((.*)\?(.*):(.*)\)')
    return m.sub(process_pseudo_ternary, ts)

print process_template(template_string, **{'pseudo_test':'yes-whatever', 'other_value':42})

if match.groups()[0] in kwargs:もちろん、process_pseudo_ternarykwargsは空なので、 lineが問題になります。

これらを渡す方法についてのアイデアはありますか?m.sub(function, string)引数を取りません。

最終的な文字列は次のようになりますsome text val_if_true some text(辞書には「pseudo_test」という名前のキーがあるため)。

文字列内の三項演算子の別の実装に自由にリダイレクトしてください。Pythonの条件付き文字列フォーマットを知っています。文字列のフォーマットタプル/辞書ではなく、文字列にターナリを含める必要があります。

4

1 に答える 1

1

私がそれを正しく理解していれば、http://docs.python.org/library/functools.html#functools.partialのようなものを使用できます

return m.sub(partial(process_pseudo_ternary, custom_1=True, custom_2=True), ts)

編集:コードに一致するように少し変更しました。

于 2012-10-07T18:50:03.070 に答える