我正在尝试根据某些代码使用我的模块请求的字符串类型,从我的模块生成特定的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(),这将是一个很好的方法。任何意见都将不胜感激。
答案 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
库)。