学习网址:http://edu.csdn.net/course/play/906/12818
论坛:http://bbs.fishc.com/forum-243-1.html
20 lambda表达式
>>> def ds(x):
return 2*x+1
>>> ds(2)
5
>>> g=lambda x: 2*x+1
>>> g(2)
5 #用lambde表达式省略了函数定义的过程,更加简单。
>>> list(filter(lambda x: x%2,range(10)))
[1, 3, 5, 7, 9] #filter()函数:将所有0和false的元素过滤掉。
>>> list(map(lambda x: x*2,range(10)))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18] #map()函数的作用是将后面的每一个元素放入前面定义的函数中计算。
21-23 递归是什么
递归:函数自己调用自己。注意一定要有一个终止的条件,否则会无限循环下去。
24-25 字典
字典:实际是一种映射类型,不属于列表。用大括号表示字典{}。
格式:>>> dict1={'a':'A', 'b':'B', 'c':'C'}
dict:工厂函数,实际上是一种类型,与int,str比较类似。调用它可以生成一个字典。
fromkeys():创建字典的函数。它有两个参数,第二个参数如果不给默认是none,如下。
>>> dict1={}
>>> dict1.fromkeys((1,2,3))
{1: None, 2: None, 3: None}
>>> dict1.fromkeys((1,2,3),'number')
{1: 'number', 2: 'number', 3: 'number'}
keys:返回字典键的引用。value:返回值的引用。items:返回每一个对象。
clear:清除字典;copy:复制,与赋值不一样。前者是复制值,地址不同,后者指向同一地址。
dir():查看对象内所有属于及方法。
update:用映射关系去更新字典。
26 集合(set)
与字典的符号相同,都是{}。没有映射关系的{}就是集合。
集合里面所有的元素都是唯一的,集合是无序的。
创建集合的两种方法,一种是使用{}将数据括起来,第二种是使用set()工厂函数。
frozenset()不可变集合。
27-29 文件
open(打开文件名,打开方式),打开文件命令。读取完要用f.close()关闭文件,防止内存泄露问题。
os模块:Python是跨平台语言,os模块解决了不同操作系统下选择相应的模块问题。
30永久存储(泡菜pickle)
把所有对象转换成二进制的形式存放。
pickle.dump(文件名,数据)将数据以二进制形式储存在文件中。
31-32异常处理
Python标准异常总结网址:http://bbs.fishc.com/forum.php?mod=viewthread&tid=45814&highlight=%D2%EC%B3%A3
用try语句来检测异常,except处理异常。一旦检测到错误,错误代码后面的内容都不会被执行,直接跳到错误处理那一句,但是finally后的语句无论如何都会被执行。
>>> try:
#检测范围
except Exception[as reason]:
#出现异常(Exception)后的处理代码
finally:
#无论如何都会被执行的代码。
33 丰富的else语句和with语句
else语句可以和if语句、while语句、for语句搭配使用。
使用with语句打开文件不需要再使用close语句。
34 图形用户界面入门:easygui
EasyGui官网:http://easygui.sourceforge.net/
小甲鱼翻译改编的教学文档:http://bbs.fishc.com/thread-46069-1-1.html
35-40 类和对象
类:属性(变量)+方法(函数),关键词class.
封装:有点类似于黑箱,不需要知到内部具体是什么样的,但是可以实现一定的功能。
类是对象,对象的集合就是类。
继承:class DerivedClassName(BaseClassName),括号内是父类的名称。
OO(面向对象)的特征:封装、继承、多态。
类名默认以大写字母开头,函数名默认以小写字母开头。
对象的方法都会有self:相当于C++的this指针。
类定义的时候要把self写进第一个参数。
-init-(self)方法:初始化已经实例化后的对象。
公有和私有:在变量名前加上双下划线就变为私有。,外部无法访问。但其实只是把双下划线的变量名改了名字,改成了—类名——变量名,Python的私有属于伪私有。
如果子类里面写了新函数覆盖了父类的方法,可以使用重新调用父类未绑定的函数方法,也可以使用super方法。
多重继承: class DerivedClassName(Based1, Based2, Based3 ...)
组合:把类的实例化放到新类中,就把类组合起来了。
如果属性的名字和方法名相同,属性会覆盖方法。
绑定:Python严格要求方法需要有实例才能被调用,这种限制就是Python的绑定概念。
41-48 魔法方法
魔法方法总是被双下划线所包围,例如—init—(初始化方法)。,总是在适当的 时候自动被调用,要特别注意是自动被调用。参考http://bbs.fishc.com/thread-48793-1-1.html。
工厂函数:实例化后的类。
property函数的具体用法:参考http://bbs.fishc.com/thread-51106-1-1.html
属性访问的几个方法:
—getattr—(self,name):定义当用户试图获取一个不存在的属性时的行为。
—getattribute—(self,name):定义当该类的属性被访问时的行为。
—setattr—(self,name,value)定义当一个属性被设置时的行为。
—delattr—(self,name):定义当一个属性被删除时的行为。
描述符:将某种特殊类型的类的实例指派给另一个类的属性。特殊类型的类就是含有—get—(self,instance,owner)、—set—(self,instance,value)、—delete—(self,instance)函数的类。把这个类的实例赋值给另一个类的属性,也就是定义为函数。
property实际上就是一个描述符类。
定制容器有两个协议:如果定制的容器是不可变的,需要定义—len—()和—getitem—()方法。如果是可变的,需要增加定义—setitem—()和—delitem—()两个方法。
49 生成器
生成器是特殊的迭代器,关键字yield。
50-52 模块
封装:容器是对数据的封装,函数是对语句的封装;类是对方法和属性的封装;而模块就是程序,我的理解就是一个程序文件。用import导入模块,或者用from。。import。。 ,调用时可以省略命名空间(不建议使用)。第三种方法,import。。 as。。用新名字替换导入的命名空间。
命名空间:调用函数的时候要把模块名称加上。
if—name— = —main—,如果成立,说明是在测试程序,在主程序中就不会调用这段。
搜索路径:可以用import sys, sys.path来查看当前的搜索路径,得到的搜索路径是一个列表,可以用append函数把不在搜索路径的文件夹加入搜索路径。
包(package)的创建方法:
(1)创建一个文件夹,用于存放相关的模块,文件夹的名字即包的名字;
(2)在文件夹中创建一个_init_.py的模块文件,内容可以为空;
(3)将相关的模块放入文件夹中。
像个极客一样去思考:
(1)遇到问题首先考虑去帮助文档查找。
(2)在shell中用_doc_函数查看用法文档。
(3)用help函数。