在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_ternary的kwargs
为空。
关于如何通过这些的任何想法? m.sub(function, string)
不接受论证。
最后一个字符串是:some text val_if_true some text
(因为字典有一个名为'pseudo_test'的键)。
随意将我重定向到字符串中的三元运算符的不同实现。我知道Python conditional string formatting。我需要三元组在字符串中,而不是在字符串的格式化元组/字典中。
答案 0 :(得分:1)
如果我理解正确,你可以使用像http://docs.python.org/library/functools.html#functools.partial
这样的东西return m.sub(partial(process_pseudo_ternary, custom_1=True, custom_2=True), ts)
编辑:改变一点,以更好地匹配您的代码。