元类 用来创建类的东西,就是类的类。详见:blog.jobbole.com/21351/
__init__:构造方法 __del__:析造方法,在对象就要被垃圾回收之前调用,但是发生调用的具体时间不可知。
super()函数返回的是super对象,负责进行方法解析,当对其特性进行访问时,它会查找所有的超类(以及超类的超类),直到找到所有的特性为止或者引发一个AttributeError异常。
序列和映射是对象的集合。
__len__(self):序列的话,这就是元素的个数;对于映射来说,就是键-值对的数量;如果__len__返回0,对象就会被当作一个bool变量的假值。
__getitem__(self, key): 这个方法返回与所给键值对相应的值。对于一个序列,键是0~n-1的证书;对于映射来说,可以使用任何种类的键。
__setitem__(self, key, value): 按一定的方式存储和key相关的value,该值随后可使用__getitem来获取。只能为可以修改的对象定义这个方法。
__delitem__(self, key): 对一部分对象使用del语句时被调用,同时必须删除和元素对应的键。这个方法是为可修改对象定义的。
def checkIndex(key): if not isinstance(key, int): raise TypeError if key < 0: raise ValueError class ArithmeticSequence: def __init__(self, start = 0, step = 1): qie self.start = start self.step = step self.changed = {} def __getitem__(self, key): try: return self.changed[key] except KeyError: return self.start + key * self.step def __setitem__(self, key, value): checkIndex(key) self.changed[key] = value1.如果key没有修改,changed[key]引发异常,被except KeyError捕捉到 ,所以 无法return结束。
2.__init__(self, start=1, step = 1)
没有给出终点,所以该序列是无限序列
property() 详见:python.jobbole.com/81967/
将自己写的模块放到C:\python目录下,1)import sys 2)sys.path.append('C:/python') //告诉解释器,除了从默认的目录寻找之外,还需要从目录c:\python中寻找模块,完成这个就能导入自己放在c:\python下的模块了。
导入模块只发生一次,第二次什么也不会发生。为了防止类似于相互引用产生无限递归。如果要重新载入模块,用reload()函数,用法是:module_name = reload(module_name) python3.0已经取消。使用exec替代。
if __name__ == '__main__': 告知模块本身是作为程序运行还是导入到其他程序,在主程序中,__name__的值是'__main__',而在导入模块中,这个值被设定为模块的名字。由于模块中加入了测试语句,引入模块时,并不希望显示出测试语句的运行结果,所以添加该语句判断是主程序还是作为模块被引入程序。模块和主程序中都要加入这一判断语句。
将自己编写的模块放入sys.path的任意路径下,就能使用import引入
from module import * 只能导入模块下,__all__属性列表中的方法,其他方法显示导入
学习python最好的方法之一,学习源码。module.__file__,可以知道模块放的位置
re 正则表达式
通配符
. 匹配一个的字符,除了换行符。 \\ 转义处理 []创建字符集[a~zA~Z0~9],匹配一个a~z的一个字符 [^a~z]反转字符,^如果脱字符出现在字符集的开头,那么你需要对其进行转义,除非你希望它作为否定运算符(换句话说,不要把它放在开头)。]、-应该放在字符集的开头或者反斜线转义。
选择符和子模式:'python|perl' | 为选择符号, p(ython|erl) ()为子模式,子模式中加上?,它就变成了可选项。
(pattern)*可以出现0次或者多次,(pattern)+可以出现1次或者多次 ,(pattern){m, n}循序模式出现m~n次 ^字符串开始,$字符串结尾。