在data models的文档中,它提到了使用单项元组作为单例的可能性,因为它具有不变性。
元组
可以通过粘贴逗号来形成一个项目(“单身”)的元组 表达......
据我所知,在Python中,单例的功能类似于常量。它是一个固定值,用于维护相同的内存地址,以便您可以测试相等性或标识。例如,None
,True
和False
都是内置单例。
然而,考虑到这种用法,使用以这种方式定义的元组对于笨拙的语法似乎是不切实际的:
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
鉴于这些限制,这个单例实现是否有任何意义?我看到的唯一优势是创建起来很简单。我见过的其他方法是更复杂的方法(使用类等),但还有其他一些用途,我没有考虑过吗?
答案 0 :(得分:8)
我认为这对于实现单例非常有用,它不会添加任何内容:元组仍然可以被新的单元素元组覆盖。无论如何,在你的例子中,你的值是一个字符串,它本身就是不可变的。
但是我认为你引用的文档行(&#34;一个项目的元组(一个'单例')&#34;),并没有引用单例模式,而不是单词的数学用法,请参阅Wikipedia on Singleton (mathematics)
该术语也用于1元组(具有一个元素的序列)。