先贴一段自己测试的代码,是用Python的dictionary实现的一个Hashmap。(Hash的实现方式以后再研究)
class HashC(): def new(self, num_buckets=256): """Initializes a Map with the given number of buckets.""" aMap = [] for i in range(0, num_buckets): aMap.append([]) return aMap def hash_key(self, aMap, key): """Given a key this will create a number and then convert it to an index for the aMap's buckets.""" print hash(key) print len(aMap) print hash(key) % len(aMap) return hash(key) % len(aMap) def get_bucket(aMap, key): """Given a key, find the bucket where it would go.""" bucket_id = hash_key(aMap, key) return aMap[bucket_id] def get_slot(aMap, key, default=None): """ Returns the index, key, and value of a slot found in a bucket. Returns -1, key, and default (None if not set) when not found. """ bucket = get_bucket(aMap, key) for i, kv in enumerate(bucket): k, v = kv if key == k: return i, k, v return -1, key, default def get(aMap, key, default=None): """Gets the value in a bucket for the given key, or the default.""" i, k, v = get_slot(aMap, key, default=default) return v def set(aMap, key, value): """Sets the key to the value, replacing any existing value.""" bucket = get_bucket(aMap, key) i, k, v = get_slot(aMap, key) if i >= 0: # the key exists, replace it bucket[i] = (key, value) else: # the key does not, append to create it bucket.append((key, value)) def delete(aMap, key): """Deletes the given key from the Map.""" bucket = get_bucket(aMap, key) for i in xrange(len(bucket)): k, v = bucket[i] if key == k: del bucket[i] break def list(aMap): """Prints out what's in the Map.""" for bucket in aMap: if bucket: for k, v in bucket: print k, v test = HashC() mymap = test.new() test.hash_key(mymap, "a")
Python要self的理由
Python的类的方法和普通的函数有一个很明显的区别,在类的方法必须有个额外的第一个参数 (self ),但在调用这个方法的时候不必为这个参数赋值 (显胜于隐 的引发)。Python的类的方法的这个特别的参数指代的是对象本身,而按照Python的惯例,它用self来表示。(当然我们也可以用其他任何名称来代替,只是规范和标准在那建议我们一致使用self)
例子说明:创建了一个类HachC,实例化HachC得到了test这个对象,然后调用这个对象的方法test.new(), test.hash_key(mymap, "a") ,这个过程中,Python会自动转为HachC.hash_key(test,arg1,arg2)
这就是Python的self的原理了。即使你的类的方法不需要任何参数,但还是得给这个方法定义一个self参数,虽然我们在实例化调用的时候不用理会这个参数不用给它赋值。
self在Python里不是关键字。self代表当前对象的地址。self能避免非限定调用造成的全局变量。
代码出处: http://learnpythonthehardway.org/book/ex39.html
解释引用: http://sjolzy.cn/Why-should-self-Python.html
相关推荐
在这个项目中,我们关注的是一个利用Python编写的虾米音乐下载器。虾米音乐是一个知名的在线音乐平台,提供丰富的音乐资源。然而,由于版权问题和平台政策,直接下载其音乐文件通常是不允许的。但通过编写特定的脚本...
我们在使用 Python 中的 方法 method 时,经常会看到 参数中带有 self,但是我们也没对这个参数进行赋值,那么这个参数到底是啥意思呢? 2、知识点 2.1 成员函数(m) 和 普通方法(f) Python 中的 “类方法” 必须有一...
Python 面试题及答案 Python 是一种解释型语言,主要功能是动态语言、面向对象编程、函数式编程、胶水代码等。Python 中的列表和元组有什么区别?列表是可变的,可以添加、删除元素,而元组是不可变的。 Python ...
《Python Basics A Self-Teaching Introduction》是一本旨在引导初学者深入理解Python编程基础的教材。这本书涵盖了Python语言的核心概念,旨在帮助读者通过自学掌握Python编程。"teaching python"这个标签表明本书...
6. **Python中的self是什么?** `self`是一个指向对象本身的引用,常用于类的方法中,以便访问和修改对象的属性。例如: ```python class MyClass: def __init__(self, name): self.name = name def print_...
这是基于串口通信的python源程序,亲自调试没有问题。将自己PC通过串口连接其他PC或者兼容串口通信的设备或者传感器,可以读取到对方发送的数据。注意第一次发送的cmd地址指令集中的数据要符合自己的报文通信格式。
在Java世界中,使用bouncycastle进行SM2操作相对简单,但当需要在Python中实现相同功能时,情况可能会复杂一些,因为Python的标准库没有内置对SM2的支持。 首先,我们需要一个Python库来处理SM2算法。目前,有如`...
在Python编程语言中,`self` 是一个非常关键的概念,特别是在类(class)的定义和对象(instance)的创建中。`self` 关键字在Python中用来引用类的实例,它是一个指向对象本身的引用,使得我们可以从类的方法中访问...
python,函数嵌套,到底是个什么东东? 很少有人用,但是,有时确实会用: def multiplier(factor): def multiplyByFactor(number): return number*factor return multiplyByFactor python程序,一个函数在另外...
**Python连连看小游戏源代码详解** 在编程领域,制作小游戏是一种常见的学习和实践方式,而“连连看”作为一款广受欢迎的休闲游戏,其Python实现更是吸引了许多初级和中级开发者。这个项目是基于Python语言构建的,...
资源分类:Python库 所属语言:Python 资源全名:python_purify-1.0.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
Python是一种广泛使用的高级编程语言,以其易读性、简洁的语法和强大的功能而闻名。作为初学者,了解Python的基础知识是十分重要的。本教程“Python入门基础教程PPT全套资料”旨在帮助新手快速掌握Python的核心概念...
Python是一种广泛使用的高级编程语言,以其易读性、简洁的语法和强大的功能而闻名。"python例句10000条"这个资源是学习Python语法和实践操作的理想材料,涵盖了Python的基础到进阶概念。这里我们将深入探讨其中的...
PythonTurtle 是什么?PythonTurtle 主要目的是为使用 Python 语言进行软件开发提供低门槛的学习方式。初学者可以在内置的 Python ...PythonTurtle 完全是自包含(self-contained)的。 标签:PythonTurtle
在本文中,我们将探讨如何使用Python的`pyserial`模块通过串口控制云台,具体是基于PELCO-D协议的通信。PELCO-D协议是一种广泛用于安防监控系统中的云台控制协议,它允许设备(如摄像头)接收并执行控制指令。 首先...
今天看到一个教程,是关于Python安装pygame模块的。觉得很好,拿来分享一下。 安装Python 额,这个小题貌似在这里很是多余啊。但是为了照顾到刚刚学习Python的童鞋,我还是多啰嗦两句吧。 具体如下: 我们要到...
标题中的"Python库 | self_messages-8.0-py3-none-any.whl"指的是一个针对Python编程语言的库,名为`self_messages`,版本为8.0。这个库以`.whl`格式提供,这是一种预编译的Python软件包分发格式,用于简化安装过程...