<深入理解Python中文版>读书笔记
- 函数声明以def开始,接着为函数名,再往后为参数,参数放在小括号里。多个参数之间以逗号分隔。
- 函数没有定义的返回类型。Python不需要指定返回值的数据类型;甚至不需要指定是否有返回值。实际上,每个Python函数都返回一个值;如果函数执行过return语句,它将返回指定的值,否则将返回None(Python的空值)
- 在Python中参数不需要指定数据类型,Python会判断一个变量是什么类型,并在内部将其记录下来。
- 在Java和其他静态类型语言中,必须要指定函数返回值和每个函数参数的数据类型。在Python中,永远也不需要明确指定任何类型的数据类型。Python会根据赋给它的值在内部将其数据类型记录下来。
- 三重引号表示一个多行字符串。
- 在Python中,函数同其它东西一样也是对象。
- 模块是指一个可以交互使用,或者从另一Python程序访问的代码段。只要导入了一个模块,就可以引用它的任何公共的函数、类或属性。
- Import一个Python模块后,就可以使用module.function来访问它的函数。
- 当导入一个模块时,它会对定义在sys.path中的目录逐个进行搜索。Sys.path是一个指定当前搜索路径的目录列表。
- 在Python中一切都是对象,并且几乎一切都有属性和方法。所有的函数都有一个内置的__doc__属性,它会返回在函数源代码中定义的doc string。
- 模块是对象,并且所有的模块都有一个内置属性__name__。一个模块的__name__的值取决于你如何应用模块。如果import,模块,那么__name__的值通常为模块的文件名。不带路径或者文件扩展名。但是也可以像一个标准的程序一样直接运行模块,在这种情况下__name__的值将是一个特别的缺省值__main__。
- Dictionary定义了键和值之间一对一的关系。在一个dictionary中不能有重复的key。给一个存在的key赋值会覆盖原有的值。在任何时候都可以加入新的key-value对。
- Dictionary是无序的。Dictionary的key是大小写敏感的。
- Dictionary的值可以是任意数据类型,包括字符串、整数、对象,甚至是其它的dictionary。
- Clear从一个dictionary中清除所有元素。
- 负数索引从list的尾部开始向前计数来存取元素。任何一个非空的list最后一个元素总是li[-1]。Li[-n] == li[len(li) - n]
- Li[:n]返回前n个元素,而li[n:]返回剩下的元素,不管list有多长。
- Li[:]是生成一个list完全拷贝的简写。
- Append是向list的末尾追加单个元素。Insert将单个元素插入到list中。List中的元素不必唯一。Extend用来连接list。
- Extend接受一个参数,这个参数总是一个list,并且把这个list中的每个元素都添加到原list中。Append接受一个参数,这个参数可以是任何数据类型,并且简单地追加到list的尾部。
- 0为false,其他所有数值皆为true。
- 空串(“”)为false,其他所有字符串皆为true。
- 空串([])为false,其它所有list皆为true。
- 空tuple(())为false,其它所有tuple皆为true。
- 空dictionary({})为false,其它所有dictionary皆为true。
- Remove从list中删除一个值的首次出现。Pop会做两件事:删除list的最后一个元素,然后返回删除元素的值。这与li[-1]不同,后者返回一个值但不改变list本身。也不同于li.remove(value),后者改变list但不返回值。
- List = list + otherlist相当于list.extend(otherlist)。但+运算符把一个新连接后的list作为值返回而extend只修改存在的list。对于大型的list来说,extend的执行速度要快一点。
- Tuple是不可变的list。一旦创建了一个tuple,就不能以任何方式改变它。
- Tuple没有方法。可以使用in来查看一个元素是否存在于tuple中。
- Tuples可以在dictionary中被用作key,但是list不行。
- Tuple可以转换成list,反之亦然。内置的tuple函数接收一个list,并返回一个有着相同元素的tuple。而list函数接收一个tupel返回一个list。
- 内置的range函数返回一个元素为整数的list。
- Dictionary的keys方法返回一个包含所有键的list。Values方法返回一个包含所有值的list。Items方法返回一个由形如(key, value)组成的tuple的list。
- Join方法将list中的元素连接成单个字符串,每个元素用一个分号隔开。Join只能用于元素是字符串的list。它不进行任何的强制类型转换,连接一个存在一个或多个非字符串元素的list将引发一个异常。
- 自省是指代码可以查看内存中以对象形式存在的其他模块和函数,获取它们的信息,并对它们进行操作。
- Type函数返回任意对象的数据类型。
- Str将数据强制转换为字符串,每种数据类型都可以强制转换为字符串。
- Dir函数返回任意对象的属性和方法列表。
- 使用getattr函数,可以得到一个直到运行时才知道名称的函数的引用。
- 使用getattr,能够获得同一函数的同一引用。通常,getattr(object, “attribute”)等价于object.attribute.如果object是一个模块的话,那么attribute可能是定义在模块中的任何东西:函数、类或者全局变量。
- 使用and时,在布尔环境中从左到右演算表达式的值。如果在布尔环境中所有值都为真,那么and返回最后一个值。如果布尔环境中的某个值为假,则and返回第一个假值。如果所有值都为真。则and返回最后一个真值。
- 使用or时,在布尔环境中从左到右演算值,如果有一个值为真,or立刻返回该值。如果所有的值都为假,or返回最后一个假值。
- 不是每个函数都有doc string,如果没有,则这个__doc__的属性为None。
- Str函数可以接受值为null的参数,然后返回它的字符串表示:”None”
- 使用from module import导入模块,该模块被直接导入到局部名字空间去了,所以可以直接使用,而不需要加上模块名的限定。
- 每个类方法的第一个参数,包括__init__,都是指向类的当前实例的引用。按照习惯这个参数总是被称为self。在__init__方法中,self指向新创建的对象;在其他的类方法中,它指向方法被调用的类实例。
- __init__可以接受任意数目的参数,就像函数一样,参数可以用缺省值定义。
- 当定义自己的类方法时,必须明确将self作为每个方法的第一个参数列出,包括__init__。当从你的类中调用一个父类的一个方法时,必须包括self参数。但当从类的外部调用你的类方法时,不必对self参数指定任何值。
- __init__方法是可选的,但是一旦定义了,就必须记得显示调用父类的__init__方法(如果它定义了的话):无论何时子类想扩展父类的行为,后代方法必须在适当的时机,使用适当的参数,显示调用父类方法。
- 对类进行实例化,只要调用类(就好像它是一个函数),传入定义在__init__方法中的参数。返回值将是新创建的对象。
- 每一个类的实例都有一个内置属性:__class__,它是对象的类。一个类的所有实例共享相同的doc string
- Python支持数据属性,它是由某个特定的类实例所拥有的数据。每个UserDict实例将拥有一个data数据属性。要从类外的代码引用这个属性,需要用实例的名字限定它,instance.data。要从类的内部引用一个数据属性,我们使用self作为限定符。
- 在Java中,通过使用str1==str2可以确定两个字符串变量是否指向同一块物理内存位置,这叫做对象同一性。在Python中写为str1 is str2。在Java中要比例两个字符串值,你要使用str1.equals(str2),在Python中,你要使用str1==str2。
- 类属性既可以通过直接对类的引用,也可以通过对类的任意实例的引用来使用。
- __class__是每个类实例的一个内置属性(也是每个类的)。它是一个类的引用,而self是一个类的实例。
- 一个try…except块可以有一天else子句,就像if语句。如果在try块中没有异常引发,然后else子句被执行。
- Sys.modules是一个字典,它包含了从Python开始运行起,被导入的所有模块。键字就是模块名,键值就是模块对象。
- 每个Python类都拥有一个内置的类属性__module__,它定义了这个类的模块的名字。
- Listdir函数接收一个路径名,并返回那个目录的内容的list。Listdir同时返回文件和文件夹,并不指出哪个是文件,哪个是文件夹。
- 字符串$表示字符串的末尾,尖号^表示字符串的开始。
- Re模块的search函数。该函数有两个参数,一个是正则表达式,一个是字符串。函数试图匹配正则表达式。如果发现一个匹配,search函数返回一个拥有多种方法可以描述这个匹配的对象,如果没有发现匹配,search函数返回一个拥有多种方法可以描述这个匹配的对象。如果没有发现匹配,search函数返回一个None。
- \d{3},其中{3}是精确匹配三个数字,\d的含义是任何一个数字(0到9)
- \b匹配一个单词的边界,\D匹配任意非数字字符。
- Urllib模块最简单的使用是提取用urlopen函数取回的网页的整个文本。Urlopen的返回值是像文件一样的对象,它具有一个文件对象一样的方法。
- Python使用叫做名字空间的东西来记录变量的轨迹。名字空间只是一个dictionary,它的键字就是变量名,它的值就是那些变量的值。
- 在一个Python程序中的任何一个地方,都存在几个可用的名字空间。每个函数都有着自己的名字空间,叫做局部名字空间,它记录了函数的变量,包括函数的参数和局部定义的变量。每个模块拥有它自己的名字空间,叫做全局名字变量,它记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。还有就是内置名字空间,任何模块均可访问它,它存放着内置的函数和异常。
- 使用import module,模块自身被导入,但是它保持着自己的名字空间;使用from module import,实际上是从另一个模块中将指定的函数和属性导入到您自己的名字空间中。
- Locals是只读的,globals不是
- Python处理list比字符串快:list是可变的,但字符串是不可变的。
- SAX的工作方式是,一次读出一点XML内容,然后对发现的每一个元素调用一个方法。
- DOM的工作方式是,一次性读入整个XML文档,然后使用Python类创建一个内部表示形式(以树结构进行连接)。
- 包不只是目录,它们是包含一个特殊文件__init__.py的目录。这个文件定义了包的属性和方法。其实它可以什么都不定义,可以只是一个空文件,但是必须要存在。如果__init__.py不存在,这个目录就仅仅是一个目录,而不是一个包。
- 从minidom.parse返回的对象是一个Document对象,它是Node类的一个子对象。
- 每个Node都有一个childNodes属性,它是一个Node对象的列表。一个Document只有一个子节点,即XML文档的根元素。
- Node类有一个firstChild属性,它和childNodes[0]具有相同的语义。还有一个lastChild属性,它和childNodes[-1]具有相同的语义。
- 为了创建一个unicode字符串而不是通常的ASCII字符串,要在字符串前面加上字母”u”
- StringIO模块只包含了一个类,也叫StringIO,它允许你将一个字符串转换为一个类文件对象。StringIO类在创建实例时接收字符串作为参数。
- 每个节点都有一个nodeType属性,它可以是ELEMENT_NODE,TEXT_NODE,COMMENT_NODE,或者其他值。
- 每个传递给程序的命令行参数都在sys.argv中,而它仅仅是一个列表。
- Urllib模块有一个便利的urlopen函数,它接受你所要获取的页面地址,然后返回一个类文件对象,仅仅使用read()便可获得页面的全部内容。
- 用户代理(User-Agent)是一种客户端告知服务器谁在什么时候通过HTTP请求了一个web页、feed汇聚或其他类型的web服务的简单途径。
- Map接受一个函数和一个列表作为参数,并对列表中的每个元素依次调用函数返回一个新的列表
作者:Shane
出处:http://bluescorpio.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://bluescorpio.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。