gpt4 book ai didi

python - 在许多类似结构的函数中推广类似结构的 return 语句的方法

转载 作者:太空宇宙 更新时间:2023-11-03 11:39:36 25 4
gpt4 key购买 nike

我有一个小的数学练习应用程序,为了添加新问题,我只定义了一个新函数,它返回一些像这样的字典:

def p4():
vertices = random.randrange(1, 8)
num_trees = random.randrange(2, 4)
format_dict = {
'vertices': vertices,
'num_trees': num_trees
}

answer_dict = {
'answer': vertices*num_trees,
'wrong_1': 0,
'wrong_2': 1,
'wrong_3': 'There do not exist any'
}

return {'question': format_dict, 'answers': answer_dict}

就某些上下文而言,这是一个 Django 应用程序。每个问题的文本存储在一个模型中,当用户在网页上查看问题时,模型的文本根据 format_dict 进行格式化并生成多项选择答案根据 answer_dict

现在,上面定义的每个问题都有行return {'question': format_dict, 'answer': answer_dict}。有没有一种方法可以使用这两个字典调用这样的函数,并在省略返回的同时具有相同的功能?我感觉好像——如果每个函数都需要那条线——那么我可以做一些事情来概括它(……装饰器,也许吧?我从来没有用过,但现在可能是一个很好的借口)。


处理字典的模型方法如下所示:

def gen_QAPair(self):
# The name/location of the problem's function is stored in 'module'
module = importlib.import_module(self.QAModule)
# This calls the function (p4, for example) and gets the dictionaries
qaPair = getattr(module, self.QAFunction)()
# This takes the unformatted text and formats it according to
# the returned format dictionary
formatted_text = self.unformatted_text.format(**qaPair['question'])

return {'question': formatted_text, 'answers': qaPair['answers']}

我唯一能想到的就是将 answer_dictformat_dict 组合成一个字典字典,然后返回它——但它并不能真正节省多少代码,它只需在 return 语句之外移动定义键。

最佳答案

我看到两个选项。

首先,您想要概括所有问题函数都返回 {'question': format_dict, 'answer': answer_dict} 形式的内容。您可以将其表示为 namedtuple ,或者如果你有 Python 3.7,一个 data class .

命名元组示例:

from collections import namedtuple
ProblemData = namedtuple('ProblemData', ['question', 'answer'])

def q_n():
# ...
return ProblemData(format_dict, answer_dict)

这在一定程度上解决了泛化结构的问题,但仍然有返回。

一种更通用和更困难的方法是将每个问题存储在一个配置文件中。当然,您必须编写一些小型语言和解析器才能获得所需的动态数据,但我想如果您将问题扩展到数千个,那将是值得的。

关于python - 在许多类似结构的函数中推广类似结构的 return 语句的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52279662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com