前言
问:有个大你五岁,在领域内还做得很不错的男朋友的体验是什么?
答:有个老师,叫你系统学习某一样知识,终于感觉自己不是散养得了 (╬▔皿▔)凸 还有种感觉就是又回到了小学,怕老师的阶段 不好好学习就会挨骂的感觉好亲切!
在亲男友的教导下,于是有了下面的笔记:
学习来源:http://zetcode.com/lang/python/
1. 基本知识
Python 有两大分支,python 2.x 和 python 3.x 这里教程学习的是2.x
Python 有三种主要的实现方式:CPython(C)、IronPython(C#)、Jython(Java)
UNIX 下每一个脚本都用一个“场景”开始,比如 #!/usr/bin/python 前面的 #! 就是“场景”(shebang),后面的是路径。路径可直接在控制台用 $ which python 获取
Python 的执行方式有两种,A: 在控制台 $ python *.py 或者先赋予权限再执行如下 B:给权限 $ chmod 数字 *.py 执行 $ ./*.py 关于数字代表的权限、含义如下:http://blog.sina.com.cn/s/blog_502250150100zsqw.html 这一篇文章列表看起来清晰,但是排版比较舒服的可以看这篇:http://www.cnblogs.com/younes/archive/2009/11/20/1607174.html 说到前面的告诉程序执行的路径这行必不可少的代码,弱智女友建议程序第二行加上这一句:#coding=utf-8(千万不要加空格,加了会出错)避免出现因为注释或者输出是中文带来的错,错误语句一般是:Non-ASCII character '\xe5' in file 搜索这个错误也会有相应的解决方案。
2.入门——主要介绍交互式 python 解释器的用法
控制台直接输入 $ python 进入python命令行,可以执行加减乘除等,也可以直接在此环境下测试相关功能,比较简单。有时候发现.py 文件执行有问题的时候,本姑娘就会抓取可疑部分在python 命令行环境来测试。当然,还可以使用help等相关命令查询相关文档,输入 q 退出。
退出解释器可以使用 Ctrl+D 快捷键或者输入 quit() 或者 exit(0)
最后就是 python 的“哲学”,如何写好python,然而写得太诗意,并不得其精髓。在解释器环境下输入 import this 可获取文档。
3.语法结构
注释—— 使用#开头,
一个变量代表一个计算机的内存,也就是值的存储位置。在python 中一个变量可以是字符串、数字、类、函数、对象等等。变量在不同时间段中可以被赋予多种不同的值。
变量命名必须以字母开头,可以使用下划线"_"连接字母,不过不能使用数字开头,也不能使用"-"这个连接符。
区分大小写,abc和Abc以及ABC是三个不同的变量
代码缩进标准为4个空格键
4.数据类型
布尔类型, True和 False .【补:randint()函数随机返回一个范围内的整数,如random.randint(0,1) 返回0或1.】
【\ 在解释器执行时,将两行结合为一行,如
print "The average speed of" \
" a sprinter is " , speed, "km/h"
执行后的效果:
The average speed of a sprinter is 36.4741641337 km/h
】
字符串,说到字符串,不得不说转义符\
A:\r 的使用可以本末倒置
print " bbb\raaa" # prints aaabbb
B:\n 下一行
C:\b 指向光标前一个字符 如 print 'abc\bo' 打印出来就是abo, print 'abc\b\bwo' 打印出来就是 awo
D:\t 打印的字符之间加上空格
E:\' 可以用来转义‘本来的意思,比如双引号嵌用单引号 "A's a letter" 可以,但是如果此句为单引号,那么句中的单引号就会出现问题,这时需要转义 'A\'s a letter'
F:如果在字符前面加上r,那么就会生成一个新的字符串,\也会失效,如:
print r"Another world\n" # print Another world\n
元组,定义元组的圆括号不是必要的,可加可不加。 元组和相加得到新的元组。元组内可以有多种不同的数据类型,元组中的元组内部的元素用两个方括号表示,类似二元数组,如A=(1,2,(3,4,5)) 3就用A[2][0]表示。
列表和元组有许多相同的功能。此外列表还有其他功能:
A. 如排序 list=[1,3,5,2,0] 排序 list.sort() 后,打印list 输出为:[0,1,2,3,5];
B. reverse() 函数使列表中的函数倒排,如list=[1,3,5,2,0] 排序 list.reverse() 后,打印list 输出为:[0,2,5,3,1];
C. count() 计数,如需要计算list=[1,3,5,2,0,0]中0的个数 print list.count(0) 输出为 2;
D. 插入和删除元素,list.append(x),在list列表最后添加 x 元素,或者list.insert(0,’new‘) 在list列表的第0位添加 new 字符串元素,list.remove(x),从list中移除 x 元素,del list[1] 删除list中第1个元素,del list[:]删除所有元素;
E. extend() 的功能类似与列表相加,a=[1,2] b=[3,4] print a+b 的结果和 print a.extend(b) 一样,b也可以是元组、字符串等。
F.pop(n) n代表下角标,pop() 弹出某个元素并打印出这个元素,当然结果是列表将这个元素给删除了。无参数默认弹出最后一个元素。
G.index(x) x 代表某元素,list.index(x) 返回值为列表中的第一个x的位置;index(e,start,end),在某个范围中查找;
H. 可以使用tuple()函数和list()函数使列表和元组互换,如 tuple=(1,2) list=[3,4] tuple(list) 的结果是将list转变为元组 (3,4) , list(tuple)的结果是将tuple转变为列表 [1,2]
集合(Sets)与数学中的集合定义差不多:一组无序但无重复元素的元素的集合,和数学一样,集合有union(联合—'|')——输出两个集合所有元素, intersection(交—'&')——输出集合相同元素, difference(差— '-')——第一个集合减去第二个集合中包含有第一个集合中相同的元素得到的剩下的元素的集合,和sysmmetric difference(对称差集——'^')——两集合内不相同的元素组成的集合,等数学运算。set的操作:
A. set.add(x)集合中添加某元素;
B.set.remove(x)集合中删除某元素,set.clear()移除集合中所有元素;
C.issubset(),issuperset()表示某个集合是否属于某个集合或者包含某个集合。如 set1.issubset(set2)表示set1是否属于set2,如果是返回 True
D.如果需要不可修改的集合的,使用frozenset这个关键词,如 set=frozenset([1,2,3]),这个set集合是不可改变的。
词典,python的词典是一组键值,词典中的元素被键索引,键是唯一的,表示方法 K = {'name':'samita','gender':'women'}
A.k.keys()表示所有的键,打印出来为['name','gender'],k.values()打印出来为['samita','woman'],k.items() 打印出来为[('name','samita'),('gender','women')]
B.pop(n) n代表键,pop()弹出n及n对应的元素,并打印出元素,词典中也删除了这个键以及元素
C.词典也有clear()函数
5.字符串
字符串中单引号、双引号、三引号详情参考:http://blog.youkuaiyun.com/linda1000/article/details/8315892
字符串中的单引号、双引号使用:一段字符串用双引号,那字符串中的双引号需要利用\转义,但是如果字符串用单引号,那么其中的双引号就不需要转义了。
Unicode String (前面添加 U 或者 u )还没弄懂到底是什么,这里一篇文章可参考:http://blog.youkuaiyun.com/feisan/article/details/1666876
字符串的长度:有“\n”,长度+1;有空格,每个空格也算长度。
去掉字符串中的空格:
A. strip() 去掉整个字符串前后空格
B. lstrip() 去掉整个字符串前面空格
C. rstrip() 去掉整个字符串后面空格
字符串的元素访问 s[m:n] 表示需要访问的元素位置x的范围为: m<= x <n
查找字段:
A. find() 返回第一次遇到的字段的首字母位置信息,正向查找,找不到返回 -1
B. index() 返回第一次遇到的字段的首字母位置信息,正向查找,找不到会出错,需要有容错机制
C. rfind() 返回第一次遇到的字段的首字母位置信息,反向查找,找不到返回 -1
D. rindex() 返回第一次遇到的字段的首字母位置信息,反向查找,找不到会出错,需要有容错机制
字段替换:s.replace('old','new')使用new替换所有的old字段,s.replace('old','new',1)第一次出现的old用new替换。
字符的分割(split)和联合(union)
A. s.split() s.rsplit() 参数:从字符串中某个字符处分割,分割的条数;
B. 'x'.join(s),使用x将s中的字段串联起来;
C. partition() 另一种分割方法,分成三部分,从参数字段第一次出现的地方开始;与split()不同的是,partition不会删除参数字段。
大小写:
A. 全部大写 upper()
B. 全部小写 lower()
C. 大小写调换 swapcase()
D. 首字母大写,其他小写 title()
字符串中字母、数字、空格统计使用到isalpha() isdigit() 和 isspace()
字符串对齐调用ljust()、rjust()
字符串的格式:
A. 在字符串中可以使用&d 表示值会在后面输入
B. 字符串中使用%.1f%s 表示后面会输入一个一组数值如 %(1.1,'kg'),这里的.1表示打印时小数点的个数
C. 字符串中的%x 表示十进制打印出来转换为十六进制,%#x会在十六进制前加上0x
D. %o 表示转为八进制
E. %e 表示科学记数法
记得字符串中加了%,字符串后面添加具体数字前面也需要%。
更多请参考第4点中字符串的使用。
6. 列表
格式:用[]表示,元素用","隔开
初始化列表:list=[0 for i in range(10)] 与 list=[0]*10效果一样,list[0:9] =[10]*n 后面的数字多少要改变列表长度,暂不清楚具体情况。
list()函数可以创建新的空列表,也可用于元组、字符串转为列表。
列表有“+”“==”“*”运算,也可判断某一元素是否在列表中。
len() max() min() sum()分别表示计算列表长度、最大值最小值、和。
抛出错误:
A. IndexError——发生在下角标超出范围时。try …… expect IndexError ,e:
B. TypeError——下角标为非整数,则抛出。try …… expect TypeError , e:
复制列表,首先我们要导入copy模块(包涵两种复制的方法):
A. c1=w[:]
B. c2=list(w),当list()函数的参数为一个列表的时候,复制这个列表。
C. copy.copy(w) 和 copy.deepcopy(w) 浅拷贝和深拷贝【关于两种拷贝的区别:http://greybeard.iteye.com/blog/1442259 文中出现的字符串被修改原因可能为这篇文章中说到的 http://www.01happy.com/python-shallow-copy-and-deep-copy/ Python中字符串不可以修改,修改之后会创建新的对象。】
D. c3=[e for e in w] 遍历W中每一个元素,c3的元素为遍历的e
E. 类似D中的方法,先创建c4=[],使用 for e in w: 在列表中使用append(e)添加元素
F. 创建c5=[],使用extend(w),从空列表添加w中的元素。
列表分段(slice):下标格式为[start:end:step]
enumerate(list) 返回下标和元素
元素排序,sort() ; unicode字符串需要导入local模块和 cmp_to_key函数,反序reverse(),也可以使用loop用append添加,或者直接list[::-1]也可以倒序。
针对列表的元素操作,map()和filter(); map()的两个参数,一个是作用于元素的函数,一个是列表,map的作用就是对每个元素进行操作,返回一个每个元素都被操作后的新列表;filter()两个参数,一个是过滤条件的函数,一个是列表,返回一个满足条件的列表。
更多请参考第4点中列表的使用。
7. 词典
词典的创建方法:
A. 直接用词典的格式 w={'w':'e','r'":'t'}
B. w=dict(w='e',r=2),直接用“=”表示键和元素关系
C. w['w']='e',直接用键来给这个位置赋值
D. w={i:object() for i in range(4)}
词典的基本操作get() w.get('x','undefined') 两个参数,一个为键,若词典中有则返回对应的元素,若没有,则返回 undefined
词典的两个方法:
A. fromkeys() 利用一个列表创建一个新的词典;{}.fromekeys(l,0) l为列表,新建的词典取用w的键
B. setdefault() 如果参数中的键已存在,则返回原来的值,如果不存在则插入一个键并返回新赋的值,w.setdefault('love',520)
词典的“加法”:使用update(),如 w.uodate(w0) 结果是 w 中加上了w0中的所有值;
词典排序,提取键使用sort()排序,然后loop打印出来;或者直接使用sorted()函数,参数为词典的键
for key in sorted(items.iterkeys()): print "%s: %s" % (key, items[key])
for key in sorted(items.iterkeys(), reverse=True): print "%s: %s" % (key, items[key])如果按照值排序
for key, value in sorted(items.iteritems(), key=lambda (k,v): (v,k)): print "%s: %s" % (key, value)
for key, value in sorted(items.iteritems(), key=lambda (k,v): (v,k), reverse=True): print "%s: %s" % (key, value)view
8. 操作符
算数操作符、布尔操作符、关系操作符、位操作符
一个操作符可能有一个或两个操作数;有一个操作数的操作符被称为一元运算符,两个操作数的被称为二元操作符。
赋值运算:x=1,x=x+1,a=b=c=1
运算操作符:+、-、*、/、//(整除)、%、**
……
位操作符:~、^、&、|、<<、>>