实际使用元组作为单例

Sup*_*Man 5 python tuples

在关于数据模型的文档中,它提到了使用单项元组作为单例的可能性,因为它具有不变性.

元组

可以通过在表达式上添加逗号来形成一个项目("单身")的元组...

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

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

HELLO_WORLD = ("Hello world",)
print HELLO_WORLD
> ('Hello world',)
print HELLO_WORLD[0]
> Hello world
Run Code Online (Sandbox Code Playgroud)

更不用说,如果你记得索引,它只能作为一个单身人士.

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
Run Code Online (Sandbox Code Playgroud)

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

HELLO_WORLD = "Goodbye world"
print HELLO_WORLD
> Goodbye world
Run Code Online (Sandbox Code Playgroud)

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

Rem*_*ich 8

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

但我认为你所引用的文档行("一个项目的元组(一个'单身')")并不是指单身模式,而是指单词的数学用法,请参阅维基百科单身人士(数学)

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