实际使用元组作为单身

时间:2015-08-10 08:58:44

标签: python tuples

data models的文档中,它提到了使用单项元组作为单例的可能性,因为它具有不变性。

  

元组

     

可以通过粘贴逗号来形成一个项目(“单身”)的元组   表达......

据我所知,在Python中,单例的功能类似于常量。它是一个固定值,用于维护相同的内存地址,以便您可以测试相等性或标识。例如,NoneTrueFalse都是内置单例。

然而,考虑到这种用法,使用以这种方式定义的元组对于笨拙的语法似乎是不切实际的:

HELLO_WORLD = ("Hello world",)
print HELLO_WORLD
> ('Hello world',)
print HELLO_WORLD[0]
> Hello world

更不用说,如果您记得将其编入索引,它只能作为单身人士使用。

HELLO_WORLD[0] = "Goodbye world"

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    HELLO_WORLD[0] = "Goodbye world"
TypeError: 'str' object does not support item assignment

这意味着您可以轻松地执行此操作:

HELLO_WORLD = "Goodbye world"
print HELLO_WORLD
> Goodbye world

鉴于这些限制,这个单例实现是否有任何意义?我看到的唯一优势是创建起来很简单。我见过的其他方法是更复杂的方法(使用类等),但还有其他一些用途,我没有考虑过吗?

1 个答案:

答案 0 :(得分:8)

我认为这对于实现单例非常有用,它不会添加任何内容:元组仍然可以被新的单元素元组覆盖。无论如何,在你的例子中,你的值是一个字符串,它本身就是不可变的。

但是我认为你引用的文档行(&#34;一个项目的元组(一个'单例')&#34;),并没有引用单例模式,而不是单词的数学用法,请参阅Wikipedia on Singleton (mathematics)

  

该术语也用于1元组(具有一个元素的序列)。