2015-05-04 48 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,当你真正想要使异质性明确时,有一些命名的元素。 –

相关问题