【发布时间】:2016-08-03 05:53:50
【问题描述】:
我正在阅读 Zed Shaw 的“Learn Python the Hard way”一书,目前我正在学习字典。
在其中一个练习中,他创建了一个 hashmap.py 模块。
def new(num_buckets=256):
"""Intializes a Map with a given number of buckets"""
aMap = []
for i in range(0, num_buckets):
aMap.append([])
return aMap
这是他创建的第一个函数。我仍然不知道他在做什么我前一阵子迷路了,(他声称如果你只是继续复制并尝试理解代码,它最终会开始变得有意义)所以现在我试图通过谷歌搜索来剖析代码和看论坛。无论如何,bucket 到底是什么?它是某种程序员的胡言乱语还是有意义?这个名字几乎出现在他创建的每个函数中。
这是他用桶创建的另一个函数。
def get_bucket(aMap,key):
bucket_id = hash_key(aMap,key)
return aMap[bucket_id]
我搜索了 stack-overflow 和网络,但无法确定 bucket 是什么... 我仍然是初学者,几乎是中级程序员,所以请注意这一点。
提前致谢。 - 艾伦
【问题讨论】:
-
您可以将存储桶视为数组的元素。作为细胞,作为可以生存的空间。在 hashmap 的情况下 - 它将对象存储为键、值对,将此键、值对视为单个实体 - 该实体存在于桶中(哈希图只是一个数组,其中每个单元称为桶,因为复杂对象可以存在于. 和 key 用于计算存储元素的存储桶索引)。我不是 python 开发者,但我猜散列映射原则在任何地方都是一样的
-
hashmap 是一种有用的数据结构,它使用桶来保存数据。但是恕我直言,在介绍性代码中使用它是一个 BAD 的想法。这个例子是 SO Python 聊天室不推荐Learn Python the Hard way的原因之一。请看What tutorial should I read?;您可能还想查看链接文章 LPTHW Complaints,尽管该列表中的大部分内容只有在您的 Python 和编程技能更高级时才有意义。
-
存储桶是对象的容器(就像普通的物理存储桶一样)。另见here
-
@PM2Ring 哈哈谢谢你对 LPTHW 的警告。还好书没看太多。在 LPTHW 投诉中,我发现:#15 在 38 中教授方法之后,Ex 39 教授字典和……如何构建哈希表类?! 这是我在此线程中讨论的示例。感谢您的提醒。 - 艾伦
标签: python python-2.7 python-3.x dictionary hashmap