2012-10-03 16 views
0

我是一個新手。在我的書有這樣的例子:Django 1.4:如何使用文檔

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 =(「標題」,「時間戳」)或list_display = [ '標題','時間戳'])。

你能幫我在文檔中找到爲什麼這是可能的問題的答案嗎? 這可能會幫助我闡述一些使用文檔的技巧。

回答

2

我不認爲它會在Django文檔中提及。這是微不足道的Python:在大多數情況下,列表和元組是等價的,因爲代碼只是期待一個可迭代的,這兩者都是。

這可能是你錯過的一點 - 這是關於鴨打字,只要對象公開預期的功能(在這種情況下可迭代),你不應該關心它是什麼確切的類型。

0

在只讀取序列的地方,列表相當於一個元組。比較dir([])dir(())並發現他們有很多共同點,但是元組缺少可以改變它的所有東西。 http://ideone.com/iHd0h

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 

這就是所謂的duck typing

當我看到,走路像鴨子,游泳像鴨子,叫起來像鴨子一隻鳥,我稱之爲鳥鴨子。