0

我是新手。在我的教科书中有这个例子:

from django.contrib import admin
from django.db import models

class BlogPost(models.Model):
    title = models.CharField(max_length = 150)
    body = models.TextField()
    timestamp = models.DateTimeField()

class BlogPostAdmin(admin.ModelAdmin):
    list_display = ('title', 'timestamp')

admin.site.register(BlogPost, BlogPostAdmin)

当我开始使用它时,我发现我可以在这里同时使用元组和列表(list_display = ('title', 'timestamp') 或 list_display = ['title', 'timestamp'])。

你能帮我在文档中找到为什么这是可能的问题的答案吗?这可能有助于我详细说明使用文档的一些技能。

4

3 回答 3

2

我不应该认为它会在 Django 文档中提及。这是微不足道的 Python:在大多数情况下,列表和元组是等价的,因为代码只是期待一个可迭代的,这两者都是。

这可能是您遗漏的一点 - 它与鸭子类型有关,只要对象公开了预期的功能(在这种情况下是可迭代的),您就不应该关心它的确切类型。

于 2012-10-03T08:14:31.057 回答
0

在您只阅读序列的地方,列表等效于元组。比较dir([])dir(())发现它们有很多共同点,但是元组缺少可以改变它的所有内容。http://ideone.com/iHd0h

于 2012-10-03T08:16:29.200 回答
0

我认为该代码有效,因为在 Python 中,元组和列表使用的索引访问器是相同的。这不是特定于 Django 的,它适用于所有 Python 代码。

# a is a list
a = ['a1', 'a2', 'a3']
# while b is a tuple
b = ('b1', 'b2', 'b3',)
c = a
print(c[1])
c= b
print(c[1])

它将打印:

a2
b2

这称为鸭子打字

当我看到一只像鸭子一样走路、像鸭子一样游泳、像鸭子一样叫的鸟时,我称那只鸟为鸭子。

于 2012-10-03T08:20:16.593 回答