随笔分类 - python
摘要:类和继承:“是一个”关系 我们已经深入探索了继承的机制,这里举个例子来说明它是如何用于模拟真实世界的关系的。从程序员的角度来看,继承是由属性点号运算启动的,由此触发实例、类以及任何超类中的变最名搜索。从设计师的角度来看,继承是一种定义集合成员关系的方式:类定义了一组内容属性,可由更具体的集合(子类)
阅读全文
摘要:class一个更实际的例子 到目前为止,我们所看的大多数例子都是人为创造而且是独立完备的,其目的是为了帮助你把注意力集中在基础知识上。然而,本章的结尾是一个较大的例子,把我们所学的大多数概念都聚合在这里。这个例子几乎是需要自行研究的练习题:试着看这个例子的程序代码,来了解方法调用是如何解析的。 简而
阅读全文
摘要:命名空间字典 我们学到了模块的命名空间实际上是以字典的形式实现的,并且可以由内置属性__dict__显示这一点。类和实例对象也是如此:属性点号运算其实内部就是字典的索引运算,而属性继承其实就是搜索连结的字典而已。实际上,实例和类对象就是Python中带有链接的字典而已。Python揭露这些字典,还有
阅读全文
摘要:__call__拦截调用 当实例调用时,使用__call__方法。不,这不是循环定义:如果定义了,Python就会为实例应用函数调用表达式运行__call__方法。这样可以让类实例的外观和用法类似于函数。 运行结果: 在这个例子中,__call__似乎没什么特别的意义。下面这个简单的方法也能提供类似
阅读全文
摘要:__radd__处理右侧加法 从严格意义上来讲,前边例子中出现的__add__方法并不支持+运算符右侧使用实例对象。要实现这类表达式,而支持可互换的运算符,可以一并编写__radd__方法。+右侧的对象是类实例,而左边对象不是类实例时,Python才会调用__radd__。所有情况下,则由左侧对象调
阅读全文
摘要:__repr_和__str__会返回字符串表达形式 下一个例子是已经见过的init构造方法和add重载方法,本例也会定义返回实例的字符串表达形式的__repr__方法。字符串格式把self.data对象转换为字符串。如果定义了的话,当类的实例打印或转换成字符申时,__repr__(或其近亲__str
阅读全文
摘要:__getattr__和__setattr__捕捉属性的一个引用 __getattr__方法是拦截属性点号运算。更确切地说,当通过对未定义(不存在)属性名称和实例进行点号运算时,就会用属性名称为字符串调用这个方祛。如果Python可通过其继承树搜索流程找到这个属性,该方法就不会被调用.因为有这种情况
阅读全文
摘要:1、迭代器基于下面两个个方法: (1)__next__ 返回容器的下一个项目(2)__iter__ 返回迭代器本身 2、当序列遍历完时,将抛出StopIteration异常,所以通过捕获这个异常来停止循环 下面是自定义迭代器的示例代码: 运行结果: 用户定义的迭代器 如今,Python中所有的迭代坏
阅读全文
摘要:getitem一拦截索引运算 __getitem__方法拦截实例的索引运算。当实例x出现在x[i]这样的索引运算中时,Python会调用这个实例继承的__getitem__方法(如果有的话),把x作为第一个参数传递,并且方括号内的索引值传给第二个参数。例如,下面的类将返回索引值的平方。 运行结果:
阅读全文
摘要:类接口技术 扩展只是一种同超类接口的方式。下面所展示的sPecial'ze.Py文件定义了多个类,示范了一些常用技巧。Super 定义一个method函数以及一个delegate函数.Inheritor没有提供任何新的变量名,因此会获得Super中定义的一切内容。Replacer 用自己的版本授盖S
阅读全文
摘要:类可以截获Python运算符 现在,让我们来看类和模块的第三个主要差别: 运算符重载。简而言之,运算符重载就是让用类写成的对象,可截获并响应用在内置类型上的运算:加法、切片、打印和点号运算等。这只是自动分发机制:表达式和其他内置运算流程要经过类的实现来控制。这里也和模块没有什么相似之处:’模块可以实
阅读全文
摘要:除了#注释外,Python也支持可自动附加在对象上的文档,而且在运行时还可保存查看。从语法上来说,这类注释是写成字符串,放在模块文档、函数以及类语句的顶端。就在任何可执行程序代码前(#注释在其前也没问题)。Python会自动封装这个字符串,也就是成为所谓的文档字符串,使其成为相应对象的__doc__
阅读全文
摘要:之前,我们讨论过通过range来产生字符串中元素的偏移值。而不是那些偏移值处的元素。不过,在有些程序中。我们两者都需要,要用的元素以及值个元素的偏移值。从传统意义来讲,这是简单的for循环,他同时也持有一个记录当前偏移值的计数器。 以上代码执行结果: 用内置函数完成以上的代码 emumerate函数
阅读全文
摘要:shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式 反序列化 结果:
阅读全文
摘要:常用模块 模块,用一砣代码实现了某个功能的代码集合。 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。 如
阅读全文
摘要:时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就
阅读全文
摘要:正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。re 模块使 Python 语言拥有全部的正则表达式功能。compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对
阅读全文
摘要:python--冒泡排序 冒泡排序的思想: 每次比较两个相邻的元素, 如果他们的顺序错误就把他们交换位置。缺点: 冒泡排序解决了桶排序浪费空间的问题, 但是冒泡排序的效率特别低。 比如有五个数: 12, 35, 99, 18, 76, 从大到小排序, 对相邻的两位进行比较 第一趟:第一次比较: 35
阅读全文
摘要:python3--正则表达式 举例: 语法: 上面的第2 和第3行也可以合并成一行来写: 效果是一样的,区别在于,第一种方式是提前对要匹配的格式进行了编译(对匹配公式进行解析),这样再去匹配的时候就不用在编译匹配的格式,第2种简写是每次匹配的时候 都 要进行一次匹配公式的编译,所以,如果你需要从一
阅读全文
摘要:python3--算法基础:二维数组转90度 [0, 1, 2, 3][0, 1, 2, 3][0, 1, 2, 3][0, 1, 2, 3] 二维数组转90度 [0, 0, 0, 0][1, 1, 1, 1][2, 2, 2, 2][3, 3, 3, 3] 以上代码运行结果:
阅读全文
浙公网安备 33010602011771号