探索 Python 库:不可变变量
介绍
在操作数据时,防止数据突变非常重要,因为数据突变可能会导致数据和数据流经的系统变得比必要的更复杂。在本指南中,您将了解 Python Immutables 库,以及如何使用此库提供的数据结构,通过大量单独和批量操作高效且不可变地操作数据。这个库将帮助您简单地推理数据。让我们开始吧!
开始使用不可变变量
Python Immutables 库在 Hash Array Mapped Trie 数据结构之上提供了不可变的 API。Hash Array Mapped Trie(简称 HAMT)本质上是一个关联数组,它同时使用哈希表和 trie 数据结构的元素。
那么为什么要使用 HAMT?使用这种数据结构的主要原因是,与处理大量数据时类似的数据结构相比,它的内存效率极高。HAMT 通过牺牲其键的查找时间来实现这一点。在最坏的情况下,HAMT 的访问时间为 O(log n )(将其与哈希表的 O(1) 访问时间进行比较)。但这还不是全部!这个库不仅实现了 HAMT,而且还在其基础上提供了一个不可变且内存高效的 API。
在以下部分中,您将发现该库在其 HAMT 实现之上公开的 API。
安装
Immutables 库需要 Python 3.5 或更高版本,可以使用pip或conda下载。
使用pip安装:
pip install immutables
使用conda安装:
conda install -c anaconda immutables
下载库后,您可以导入它并开始使用提供的Map类型,如下所示:
import immutables
my_map = immutables.Map(key1='a', key2='b', key3='c')
my_second_map = immutables.Map({'a': 10, 'b': 20}, c=30)
个别操作
Immutables 库提供的Map类型提供了许多单独的操作。这些操作包括: - get() - set() - delete()
get操作允许你通过唯一键从Map中获取单个值。示例如下:
my_map.get('key1')
# Will fetch the value 'a' from my_map
get方法还允许您指定回退,以防您提供的键在Map中不存在。如下所示:
my_map.get('bogus_key', 5)
# Will fetch the value 5 from my_map
Map类型提供的下一个单独操作是set方法。set方法接受一个键和一个值,并向Map添加一个条目。此方法的用法如下:
my_map.set('my_key', 1)
最后,delete方法接收一个键并删除Map中相应的条目。此方法的用法如下:
keys_to_remove = list('key1', 'key2')
for key in keys_to_remove:
my_map.delete(key)
关于设置和删除操作的一个关键部分是它们的不变性。这些方法中的每一个都返回一个新的Map,而前一个 Map 保持不变。以下是一个例子:
my_map = immutables.Map(key1='a', key2='b', key3='c')
my_new_map = my_map.delete('key1')
print(my_map.get('key1'))
# prints 'a'
print(my_new_map.get('key1', 'fallback'))
# prints 'fallback'
批量操作
单个操作很棒,也很有用。但是,如果你想要按顺序应用多个变更,而不必在每次操作后创建一个全新的Map ,该怎么办?输入mutate和finish。mutate和finish方法允许你对Map应用批量更新或更改。此 API 的工作原理如下:
my_map = immutables.Map(key1='a', key2='b', key3='c')
map_mutation_context = my_map.mutate()
map_mutation_context['new_key'] = 1
map_mutation_context.set('key1', 'b')
map_mutation_context.delete('key2')
my_new_altered_map = map_mutation_context.finish()
# The above code can also be written as:
with my_map.mutate() as map_mutation_context:
map_mutation_context['new_key'] = 1
map_mutation_context.set('key1', 'b')
map_mutation_context.delete('key2')
my_new_altered_map = map_mutation_context.finish()
结论
在本指南中,您深入了解了 Python Immutables 库。现在您应该已经掌握了如何使用此库提供的高效哈希数组映射 Trie 数据结构。您可以实例化提供的Map类型以及此不可变类型提供的单个和批量操作。
此库将帮助您以惯用且安全的方式推理 Python 程序中的数据。如需更多信息,您可以随时查看库文档。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~