Python 看书笔记(1)

来源:互联网 发布:c语言字符数组长度 编辑:程序博客网 时间:2024/04/29 00:31

工作需要重新学习了一下python,之前为了毕业学过一点简单应用,最近要搞自动处理的一些工作,于是重新学习了一下

一下要点是看廖雪峰老师的网站上python教程记录下的,为了以后能够需要的时候能够有点可查;


1 引号前r表示引号中不转义,都为字符
2 布尔值 True False
3 布尔运算符 and or not
4 None表示空值
5 ord(‘A’) chr(65)  表示代码点和字符互相转换
6 u'字符'表示unicode表示的字符,在5中 ord(u’中')表示unicode的标号,否则出错
7 字符串格式化(占位符%),“Hello, %s” % ‘world’   “Hi, %s, you have $%d.” % ( ‘Michael’, 1000)
     占位符: %d 整数;%f 浮点数;%s 字符串;%x十六进制整数
     格式化整数和浮点数时还可以指定是否补0和整数与小数的位数:
     ‘%2d-%02d’ %(3,1) => ‘ 3-01’;
     用%%转义一个%
8 len()字符串的字符数,列表的长度;
9 pop()删除list末尾元素,pop(i)删除指定位置的元素;
10 列表(list)是可以修改的集合,元组(tuple)是定义后不能修改数据集合
     list.append()添加一个元素
11 使用 t = ()表示空元组,使用 t = (1,)表示1个元素的元组,t=(1)表示一个数字1,这里()表示运算符;
12 if elif else 有:没有括号
13 循环 for x in ……
14 raw_input()读取输入永远为字符串
15 int()把字符串转换为整形
16 字典(dict)其他语言中的map,键值对形式存储;
17 in 操作符判断一个key是否存在于一个dict  “Thomas” in d 返回bool值
18 如果一个字典d中不存在“Thomas”,d.get(“Thomas")返回None ;d.get(“Thomas”,-1)返回-1;
19 d.pop(key)删除一个键值对,如果不存在该key则报错
20 set无序的数据集合,使用s=set([1,2,3])初始化一个set,并赋值给s;
     重复的元素将被过滤 s=set([1,2,2,2,3]) 与set([1,2,3])是相同的;
     使用add(value)添加一个元素到set
     使用remove(value)移除元素
21 set交集并集操作符 & |
22 list 放入set集合会报错
23 列表方法sort()对列表排序
24 字符串replace方法替换一个字符,会返回一个替换后的字符串,但是原来的字符串不会被改变
25 help(函数名)查看函数帮助信息
26 abs 求绝对值
27 cmp,比较两个参数
28 函数名也可以赋值给一个变量
29 pass 语句什么都不做,用于占位;
30 isinstance 数据类型检查
     可以检查一个字符串是否是unicode类型:isinstance(‘xxx’,unicode) ---isinstance(‘xxx’,unicode) ; 
     可以使用isinstance检查一个变量是否是某个类的对象;
     可以使用isinstance判断变量是否属于多种类型的某一种:isinstance('a', (str, unicode))
31 python中没有函数重载,可以使用参数默认值实现部分重载功能
32 默认参数的大坑,默认参数也是个变量,如果改变了这个变量,下次调用该函数时,变量发生变化;
33 可变参数,函数参数前加*,表示可变参数,函数内部可当做列表or元组使用;
     元组或列表可以通过前面加*,当做可变参数的实参;
34 函数关键字参数,两个星号(**),表示传入一个dict:def person(name, age, **kw):;###关键字参数匹配默认参数
     同可变参数,一个dict可以通过前面加**当做实参;
   kw = {'city': 'Beijing', 'job': 'Engineer’};person('Jack', 24, **kw)、
35 函数的参数可以有多种,单四中参数必须按照必选参数、默认参数、可变参数、关键字参数的顺序;def func(a, b, c=0, *args, **kw):
36 对于任意函数,都可以通过类似func(*args,**kw)的形式调用;但不能超过定义的函数个数限制;
     即可以通过func(*args)的方式将args中的元素会依次先付给可变参数前面的必选参数和默认参数;
37 尾递归,在函数返回时调用函数本身,并且return语句不能包含表达式;目的是减少递归调用时的消耗;
     尾递归调用时,如果做了优化(当前python没有做优化,即便改成尾递归也会溢出),栈不会增长,无论调用多少次也不会导致溢出;
38 切片是指在一个list 或tuple 中,取其中一段连续部分的功能;L[a:b]下标a包含,下表b不包含;
     L[0:3] / L[:3] 取列表L的 0-3的元素
     L[1:2] 取列表L的1-2的元素
     L[-2:] 取L的倒数第二个-最后的元素
     L[-2:-1]只取倒数第二个元素(前包含后不包含)
     L[:] 原样复制L
39 tuple的切片是tuple ,list的切片是list
40 range(n)创建一个数组[0,1,...n]
41 L[a:b:c]形式切片,下表[a,b)的切片,每c个元素取一个
     L=range(100);L[:10:2]前10个元素,没两个取一个,得[0,2,4,6,8]
42 字符串也可以看做一种list用切片操作
43 for..in 循环运行所有可迭代的对象,通过collections模块的Iterable类型判断一个对象是否可迭代
     from collections import Iterable;isinstance('abc', Iterable);#返回True 或者 False
44 使用enumerate函数将list变成索引-元素对,在for循环中同时迭代索引和元素本身;
   for i, value in enumerate(['A', 'B', 'C']):print i,value;
     for循环中可以同时使用两个变量
45 列表生成式,[formula for x in range() if**]
     formula 列表生成的公式,需要有变量;
     x为变量;变量的范围为range();
     range可以由一个列表/str替换;
     if条件可省略,用于判断x是否可用
     列表生成式同时支持1)多个变量,2多重循环
46 生成器(generator)不是一个序列,不会实现计算出每个元素,而是是一种推算规则,根据next推算下一个应该的序列;
     使用列表生成式的方式,将[]修改为()即可表示一个generator;
     在一个函数中使用yield即可生成一个生成器;使用该方法的generator每次遇到yield返回并中断,下次再继续执行;
47 变量可以指向函数名,函数名也是变量,一个函数可以接受另一个函数作为参赛,这种函数就被成为高阶函数;
48 map()接受一个函数func和一个列表,将列表中每个元素按func计算后返回
49 reduce()接受一个函数func(x,y)和一个列表,将列表中元素一次按func(x,y)计算返回值;
     reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
50 python在函数体内部也是可以定义函数的;
     同时内部的函数也可以被当做结果返回,返回的函数中可以用到原来函数的参数或值;
     返回值为函数时,当呗显示调用时才会计算;
51 filter(),接受一个函数和一个序列,根据函数的返回值过滤这个序列
52 sorted()排序,可以接受一个序列对其排序,也可以同时接受一个函数,实现比较策略
     sorted([36, 5, 12, 9, 21])
sorted([36, 5, 12, 9, 21], reversed_cmp) #reversed_cmp接受两个参数,返回0,1,-1;
53 lambda 匿名函数 lambda **:***,**表示参数,***表示函数体,函数体只能有一个表达式,且不需要返回值;
54 函数对象的__name__属性,表示函数的名字;
55 装饰器(decorator)一个返回一个函数的高阶函数,通过@log的方式使用;
     带参数的decorator需要通过两层def实现;
     使用@functools.wraps将原始函数的属性复制给decorator
56 偏函数(Partial Function),functors中提供的功能,为改变原来的函数的默认值,并返回个新的函数;
     functools.partial(int, base =2)相当于**kw添加{base:2}
     functools.partial(max, 2)相当于*args添加[2];
57 __init__.py必须存在,表示一个文件夹是报名而非普通文件夹;__init__.py可以为空也可以有代码
58 python内部函数
     
abs()divmod()input()open()staticmethod()all()enumerate()int()ord()str()any()eval()isinstance()pow()sum()basestring()execfile()issubclass()print()super()bin()file()iter()property()tuple()bool()filter()len()range()type()bytearray()float()list()raw_input()unichr()callable()format()locals()reduce()unicode()chr()frozenset()long()reload()vars()classmethod()getattr()map()repr()xrange()cmp()globals()max()reversed()zip()compile()hasattr()memoryview()round()__import__()complex()hash()min()set()
delattr()help()next()setattr()
dict()hex()object()slice()
dir()id()oct()sorted()


59 导入别名import ... as ...
60 模块的作用域使用下划线_的数量约定;#之所以说是约定,是因为python并不禁止访问;
     没有下划线的约定为public
     前后各有两个下划线的为特殊字符
     仅在前面有一个或两个下划线的为private
61 pip install 模块名 安装第三方模块
62 默认情况下import 模块时,解释器搜索 当前目录、已安装内置模块、第三方模块来查找模块;
     所有搜索的路径放在sys模块的path变量中;
     添加模块搜索路径可以通过1)修改sys.path;2)设置环境变量的PYTHONPATH
63 __future__使用未来版本的一些新特性
     unicode_literals,在2.7中使用3.x的unicode
     division,引入3.x的除法特性
64 定义一个类,使用class Student(object):的样式,class声明定义一个类,Student表示类名,(object)表示从哪个类继承;
65 类中总有个self参数,所有类变量都可以放到self中;
66 在python中,实例变量名如果以两个下划线__开头,表示private,只有内部可访问,外部不能访问;
     以两个下划线开头,且以两个下划线结尾的变量不是private变量,而是特殊变量
     可以通过访问_类名__变量名的方式访问private变量
67 type判断一个对象的类型
     types模块存放各每种type的类型
     所有类型本身的type都是TypeType;
     type(12) ==><type 'int’>   ;    type(int) ==> <type ’type'>
     type(Hello)hello类,返回值为type,type(Hello()),返回值为Hello
     type函数动态创建一个类,一次传入参数1)class名称,2) 父类,3)方法名与函数绑定
68 使用dir()获取一个对象的所有属性和方法;
69 使用getattr(), setattr(), hasattr()对一个对象的属性进行操作;
70 可以使用MethodType动态的给一个对象 或者一个类绑定一个方法
71 __slots__限定类中能够使用的参数
72 @property装饰器将一个方法变成属性调用;
     同时生成一个类似于@func.setter的装饰器,对该func进行赋值
     类似于C#的get和set
73 一个类可以继承多个类(多重继承),多重继承通常被称为Mixin
74 __str__() java中的tostring
     __str__用于返回字符串,__repr__用于返回程序开发者看到的字符串
     使用__repr__ = __str__将两个方法设置为相同的实现;
75 __iter__()将一个类对象用于for  。。。  in
     return  StopIteration 退出循环
76 __getitem__将一个类用于类似于list的取值;
     slice,切片对象,如果传入的是一个切片对象可以通过isinstance判断实现
77 __getattr__在对象没有被设置某属性时,会去查找__getattr__();设置了该属性则不会再去查找__getattr__;
78 __call__将一个对象实例当做方法来调用
     __call__可以有参数
     callable(student())判断一个对象能否被调用
79 metaclass可以创建类和修改类,可以将类看做metaclass创建出来的实例{之后再研究}
80 try…except 同java中try…catch;没有except时可以执行else
     所有异常的父类BaseException
     logging捕获异常并输出
     raise抛出一个异常
81 使用assert断言,-0关闭断言输出
     logging.info()输出异常信息,可以指定异常级别
     pdb动态调试
82 python的单元测试与文档测试,{感觉用不着,以后有用再仔细研究}
83 with语句打开一个文件with open(‘/path/to/file’,’r’) as f:
     出错会with会自动关闭文件
     read()读取全部,read(size)读取size大小的文件
     readline()读取一行,readlines()一次读取所有并返回一个list
84 r模式,rb模式读取二进制
     f = open(“”,’rb’);f.read().decode(‘gbk');
     with codecs.open(‘’,’r’,’gbk’) as f:// 自动编码
     w写文本文件,wb写二进制文件
85 os.name 获取操作系统的名字 ‘posix’表示Linux,Unix,Mac os X系统,’nt’ 表示Windows系统
     os.environ获取一个dict,所有的环境变量
     os.getenv();获取某个环境变量的值
86 路径操作os.path
     os.path.abspath(‘.’)#当前目录的绝对路径
     os.path.join(‘part1’,’part2’)#join根据操作系统的不同返回不同连接符;
     os.path.split() #将最后的文件名 or 目录名拆分出来
     os.path.splitext() #获取文件扩展名
     os.path.isdir()     #判断是否dir
87 文件/文件夹操作os
     os.mkdir(‘path’);#创建一个dir
     os.rmdir(‘path’)#删除一个dir
     os.rename(’test.txt’,’test.py’) # 对文件名重命名
     os.remove(’test.py’) #删除文件
     os.listdir(‘.’) #列出当前目录下的所有文件
     shutil模块中提供copyfile()功能
88 cPickle 、pickle 序列化
     pickle.dumps(d),将对象dump成一个str
     pickle.dump(d,f),将对象dump成一个file-like对象,并保持到文件f中
     pickle.load(f),将f文件中内容加载出来,返回值为一个对象
     pickle.loads(s),将一个字符串加载为一个对象
89 json.dumps(d)将一个字符串加载为一个json字符串
     json.loads(json_str)# 将一个jison字符串加载为一个python对象
     json进阶
   print(json.dumps(s, default=student2dict))
   json_str = '{"age": 20, "score": 88, "name": "Bob"}'
90 unix/linux/mac 可以通过fork创建一个新进程
     跨平台的多进程模块multiprocessing
     multiprocessing的managers模块支持分布式
91 多线程thread,threading
     ThreadLocal ==> threading.local();     
     Threadlocal为一个全局dict变量
92 正则表达式
     \d匹配一个数字
     \w匹配一个数字或字母
     . 匹配任意字符
     * 表示任意个字符(包括0)
     + 表示至少一个字符
     ?表示0个或1个字符
     {n}表示n个字符,{n,m}表示n-m个字符
     []表示范围,-在[]表示起始和结束
     A|B 表示匹配 A或者B
     ^表示行开头;     ^\d表示以数字开头
     $表示行的结尾;     \d$表示必须以数字结束
     ()表示分组
     \d+?中?表示非贪婪匹配
93 re模块
     re.match(’a’,’b’)#a为正则表达式,b为要匹配的字符串
     re.match()如果匹配成功,返回一个Match对象,否则None
     re.split(‘a’,’b’) #a为正则表达式,b为要切分的字符串
     ()表示要提取的分组,在match对象中使用group(index)提取,用groups()获取出所有分组
     正则表达式可以通过compile预编译处理









     







0 0