如何将 const 队列传递给函数?
How to pass a const queue to a function?
我是C位。我知道 python denounces const
关键字支持“我们是成年人,我们彼此信任”。
现在我需要通知某些python 线程某些消息和 使用队列。消息是长度最多为 1024 个字符的字符串。我觉得这些线程可以为调用线程甚至为它们自己更改这些消息是荒谬的。
如何预防?或者已经是?
TLDR:将您的数据转换为一种不可变类型,或创建冻结类型。数字和字符串等原始数据始终是不可变的。
Python 提供了几种构造不可变或准不可变值的方法。
- 像数字、字符串和类似的原语总是不可变的。
- 容器提供了一些不可变类型,例如
tuple
or frozenset
作为不可变序列或集合。
- 自定义类型可以定义为不可变的,例如使用
NamedTuple
or frozen dataclass
.
理想情况下,应该使用不可变类型直接构造要共享的数据。如果无法做到这一点,在共享之前将数据从可变类型转换为不可变类型。
>>> # strings are always immutable
>>> data = "Hello World!"
>>> data[:5] = "Howdy"
....
TypeError: 'str' object does not support item assignment
>>> # sequence are mutable or immutable
>>> data = ["Hello", "World"]
>>> idata = tuple(data) # create immutable from mutable sequence
>>> data[0] = "Howdy"
>>> idata[0] = "Howdy"
...
TypeError: 'tuple' object does not support item assignment
>>> data, idata
(['Howdy', 'World'], ('Hello', 'World'))
我是C位。我知道 python denounces const
关键字支持“我们是成年人,我们彼此信任”。
现在我需要通知某些python 线程某些消息和
如何预防?或者已经是?
TLDR:将您的数据转换为一种不可变类型,或创建冻结类型。数字和字符串等原始数据始终是不可变的。
Python 提供了几种构造不可变或准不可变值的方法。
- 像数字、字符串和类似的原语总是不可变的。
- 容器提供了一些不可变类型,例如
tuple
orfrozenset
作为不可变序列或集合。 - 自定义类型可以定义为不可变的,例如使用
NamedTuple
or frozendataclass
.
理想情况下,应该使用不可变类型直接构造要共享的数据。如果无法做到这一点,在共享之前将数据从可变类型转换为不可变类型。
>>> # strings are always immutable
>>> data = "Hello World!"
>>> data[:5] = "Howdy"
....
TypeError: 'str' object does not support item assignment
>>> # sequence are mutable or immutable
>>> data = ["Hello", "World"]
>>> idata = tuple(data) # create immutable from mutable sequence
>>> data[0] = "Howdy"
>>> idata[0] = "Howdy"
...
TypeError: 'tuple' object does not support item assignment
>>> data, idata
(['Howdy', 'World'], ('Hello', 'World'))