廖雪峰Python_知识点
---恢复内容开始---
1、Python解释器:使用最广泛的还是CPython(这个解释器是用C语言开发的)。如果要和Java或.Net平台交互,最好的办法是通过网络调用来交互,确保各程序之间的独立性。
2、C:\>是在Windows提供的命令行模式,看到>>>是在Python交互式环境下。
3、raw_input() 将所有输入作为字符串看待,返回字符串类型。而 input() 在对待纯数字输入时具有自己的特性,它返回所输入的数字的类型( int, float );input() 可接受合法的 python 表达式。
python3只有input().
4、python基础:缩进;数据类型
5、在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。
浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器:
6、只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:
>>> t = (1,)
Python的函数返回多值其实就是返回一个tuple.
7、字典:先在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字,无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加而变慢。
8、dict有以下几个特点:dict是用空间来换取时间的一种方法。
1、查找和插入的速度极快,不会随着key的增加而增加;
2、需要占用大量的内存,内存浪费多。
3、key必须是不可变对象。
9、函数:函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。
如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。
return None可以简写为return。
10、列表生成器:
>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
11、生成器(Generator):
如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器(Generator)。
12、访问数据库需要创建数据库连接、游标对象,然后执行SQL语句,最后处理异常,清理资源。
13、当遍历序列或数组时, 只能用for,while用来遍历会出现死循环。
14、函数本身也可以赋值给变量,即:变量可以指向函数。Eg:f=abs,变量f现在已经指向了abs函数本身。f = abs;f(-10)>>>10
15、返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。
16、类和实例:class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的,继承的概念我们后面再讲,通常,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。
注意到__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。
有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去。
和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,并且,调用时,不用传递该参数。
17、数据封装
18、__str__方法和__init__方法类似,都是一些特殊方法,所以前后都有双下划线,它用来返回对象的字符串表达式。
__init__的用法1:初始化对象
__init__的用法2:
__str__的用法1: #一般用户获取对象的描述信息
19、访问限制:
如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__。在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问。
如果又要允许外部代码修改score怎么办?可以给Student类增加set_score方法。
双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。不能直接访问__name是因为Python解释器对外把__name变量改成了_Student__name,所以,仍然可以通过_Student__name来访问__name变量。
---恢复内容结束---