是否可以减少样板函数中的参数数量?

时间:2011-01-26 09:41:03

标签: python django django-models

我目前正在尝试创建一个自动化的django模型实例化器。这个函数将需要几个参数,实例化一些django模型,将一些外键链接在一起,保存批次并将主模型返回给我。这一切都很好,但最后,该函数需要4个普通参数和2个元组(填充了一个内容类型名称和一个参数数组用于不同的函数调用)。

这导致以下函数def:

def create_rule(profile, lifestyles, bool, title, input, output):
    rule = Rule.objects.create(
        user_profile=profile, 
        lifestyles=lifestyles,
        bool=bool,
        title=title,
    )

    models = ContentType.objects.filter(app_label="rules")
    input_cls = models.get(model=input[0]).model_class()
    input_cls.objects.create(*input[1], rule=rule)

    output_cls = models.get(model=output[0]).model_class()
    output_cls.objects.create(*output[1], rule=rule)

    return rule

平均函数调用可能看起来像这样:

create_rule(profile, '1,3,6,7', 1, "Switch off when 5:00", 
    ('eventruleinput', [5, 'start']), 
    ('propruleoutput', [35, 'Switch', 0]))

有没有一种很好的方法来减少我正在使用的参数数量(不是我猜)?是否有更好的方法来构造此函数调用?我这样做是完全错误的吗?

注意:这只是一个模型实现,我有点想知道我是否想要解决这个问题。

1 个答案:

答案 0 :(得分:2)

有时候,一个函数需要采取很多论点。这没有任何问题,本身。以下是一些使它更清洁的提示:

不要将bool命名为“bool”:

def create_rule(profile, lifestyles, is_something, title, input, output):
    rule = Rule.objects.create(
    ....
    bool=is_something,
)

为了清晰起见打开你的元组:

input_val, input_command = input
input_cls = models.get(model=input_val).model_class()
input_cls.objects.create(*input_command, rule=rule)
output_val, output_command, output_third_arg = output
....