我们应该使用元组还是列表作为index_together

时间:2018-08-24 16:44:32

标签: python django

对于index_together,我想知道应该使用tuple还是list,因为两者似乎都可行。

元组

class ApiMonthlyUsage(models.Model):
    month = models.IntegerField(blank=False, null=False)
    count = models.IntegerField()
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    class Meta:
        index_together = (
            ('month', 'user'),
        )

列表

class ApiMonthlyUsage(models.Model):
    month = models.IntegerField(blank=False, null=False)
    count = models.IntegerField()
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    class Meta:
        index_together = [
            ['month', 'user'],
        ]

1 个答案:

答案 0 :(得分:3)

这里唯一客观的答案是用各种方式为您提供常见参数的列表:

  • list :Django文档和示例使用列表。与框架保持一致(特别是具有相对较强的习惯用法,通常与Python世界其他地方有所不同的框架)是值得的。
  • 元组:序列是不可变的。可变性是列表和元组之间唯一的行为差异,因此(至少根据许多Python开发人员,包括许多core / stdlib开发人员而言),这通常是在列表和元组之间进行选择的最明智的方法。
  • list :元组的范式使用固定数量的值,其中每个位置都有特定的类型/语义,因此(至少根据许多Python开发人员,包括Guido和其他一些开发人员而言)核心/ stdlib开发人员),当您想要任意长度的同质序列时,使用列表会更清楚。
  • tuple :元组使用的内存稍少,并且偶尔会更快,尽管两者在这里可能根本不相关。

但是,您要决定自己对每种方式的认同程度以及给予它们的分量。

但是,实际上,只要您选择一个或另一个并在项目中始终使用它,您的代码就可以被任何其他Python开发人员完全可读,因此我不会太强调。如果您真的不确定,请掷硬币并继续使用。