Python:动态生成字符串(基于某些模板)

时间:2013-01-28 22:30:22

标签: python string python-2.7

我正在尝试根据某些代码使用我的模块请求的字符串类型,从我的模块生成特定的xml字符串。这些xml字符串中的每一个都包含一些动态生成的数据。例如,许多这些xml字符串都有一个使用其他函数生成的cookie字段。

我开始使用python字典初始化所有xml字符串,其中包含预先填充的动态字段(即cookie)(即,不完全是动态的)。然后我调用字典来获取相关的xml字符串。

这种方法的问题在于cookie每小时到期,因此一小时后模块返回的字符串具有这些过期值。理想情况下我想要的是某种形式的生成器函数(不确定在这种情况下是否可能),它根据请求的msg_type返回正确形成的字符串以及何时请求它们(如下例所示)。保存在这个dict中的每个xml字符串都是一种独特的格式,所以我不能确切地拥有某种常见的模板xml生成器。

作为一个例子,我定义的字典在这里看起来类似于get_msg字典:

    get_msg["msg_value_1"] = """<ABC cookie=""" + getCookie() + """ > 
                                     <XYZ """ + foo_name +""">
                                     </XYZ>
                              </ABC>"""

    get_msg["msg_value_2"] = """<ABC cookie=""" + getCookie() + """ > 
                                     <some text """ + bar_name + """>
                                     </XYZ>
                              </ABC>"""

能够动态生成这些xml字符串,并为每个新的msg请求调用getCookie(),这将是一个很好的方法。任何意见都将不胜感激。

1 个答案:

答案 0 :(得分:2)

在Python中,函数是第一类对象。这意味着您可以将函数作为参数传递给另一个函数。

def get_msg(function_to_call_to_get_injection_bit, tag_name_function,
            cookie_function):

    tagname = tag_name_function()
    injection = function_to_call_to_get_injection_bit()
    cookie = cookie_function()

    return '<ABC cookie="%s">' % (cookie) +
               '<%s %s></%s></ABC>' % (tagname, injection, tagname)

def get_injection():
    return foo_name

def get_tag_name_1():
    return "XYZ"

def get_tag_name_2():
    return "SomeText"

get_msg(get_injection, get_tag_name_1, getCookie)
get_msg(get_injection, get_tag_name_2, getCookie)

你每次想要一条消息时都要调用get_msg,然后将生成与cookie无关的部分消息的函数传递给它。

从您的问题来看,问题不明确。但这不是一个“生成器函数”:我不认为你想要返回一个函数( 可能),你想要返回XML字符串并只是自定义它的构建方式。

正如BenDundee上面评论的那样,使用XML库来构建XML可能更好,而不是手工构建字符串。 Python内置了几个选项,并且在外部可用(例如精彩的lxml库)。