2015-05-04 50 views
3

我使用Django的debug_toolbar,我需要插入它之前其他默認中間件中間件類的名稱元組MIDDLEWARE_CLASSESsettings.py,因爲它是爲了影響debug_toolbar的行爲。有沒有什麼優雅的方式把對象推到python元組前面?


所以,我想是這樣

MIDDLEWARE_CLASSES.push_front('debug_toolbar.middleware.DebugToolbarMiddleware')

,而不是做

MIDDLEWARE_CLASSES = ('debug_toolbar.middleware.DebugToolbarMiddleware',) + MIDDLEWARE_CLASSES

其中MIDDLEWARE_CLASSES元組

有沒有更好的方法避免兩次寫入原始元組?

+0

什麼是debug_toolbar? – 2015-05-04 12:23:44

+0

@Tichodroma我更新了我的問題,並鏈接到它 – June

回答

4

元組是不可變的,所以你不能做任何事情,比如mytuple.append(value)。您將始終需要創建一個新的(或者將其類型更改爲列表,然後插入該值並將其更改回來),以便更改變量中的值。如果您的代碼不需要使用元組,則使用列表更容易。

+0

接受了你指出python元組是不可變的答案 – June

2

如果沒有絕對需要一個元組,但都OK與列表,你可以使用

MIDDLEWARE_CLASSES = [... whatever] 
MIDDLEWARE_CLASSES.insert(0, 'debug_toolbar.middleware.DebugToolbarMiddleware') 

語義名單是喜歡的事情,那麼,名單,我。即枚舉具有相同(或類似)性質的事物。元組用於組合事物,列表元素通常會發生。

MIDDLEWARE_CLASSES聽起來像是如果你想列出一些在中間件中使用的類,所以即使在語義上,列表也會更好。

+0

「枚舉的事物是相同(或類似)性質」真的嗎?我從來沒有聽說過!你知道Python中是否有優化來支持它嗎? –

+1

@TotempaaltJ:不,沒有「優化」或其他任何東西,它只是語義。 –

+2

@TotempaaltJ:這只是一個語義上的事情,使用列表的同構集合,並使用元組異構集合,所以一個元素_may_中的項目的位置具有重要意義,但項目在列表中的位置可能不應該是(所以你可以排序清單,如果你喜歡而不破壞信息)。但(恕我直言)可變/不可變的區別更重要。 OTOH,當你真正想要使異質性明確時,有一些命名的元素。 –

相關問題