1. 多个变量赋值:
- a = b = c =1;
- a, b, c = 1, 2, 'test'
2. 6个标准数据类型:
- 不可变数据3个:Number(数字),String(字符串),Tuple(元组);
- 可变数据3个:List(列表),Dictionary(字典),Set(集合)。
- 备注:string、list 和 tuple 都属于 sequence(序列)。
2.1 Number(数字):
- python3支持int,float,bool(True,False),complex(复数);没有python2中的long。另外python2中没有bool,用的0和1。
- 数值的除法有2个运算符:/ 返回一个浮点数;// 返回整数部分(结果取整数部分,不四舍五入)。python2中 / 是取整,同3中的 // 。
- 注意:// 获得的并不必定是整数类型的数,它与分母分子的数据类型有关系。如:7 // 2.0 # 结果:3.0
2.2 String(字符串):
- 字符串用单引号 ' 或者双引号 " 括起来;
- \ 可用来转义;也可用来做续行符;
- 字符串前面添加一个 r,表示原始字符串,不转义;
- 字符串有2种索引方式:从左到右以0开始;从右到左以-1开始;
- 与C不一样,python中的字符串不能改变;
- 运算符[]:经过索引获取字符串中的字符;
- 运算符[:]:截取字符串中的一部分,左闭右开;str[0,2] 是不包含第 3 个字符的。
2.3 Tuple(元组):
- 虽然元组的元素不可改变,可是它也能够包含可变的对象,如list列表;
- 构造0或1个元素的元组比较特殊,语法以下:tup1 = () # 空元组;tup2 = (12,) # 一个元素,须要在元素后添加逗号;
- 元组中的元素值不容许删除,只能经过del语句来删除整个元组。
2.4 Set(集合):
- 基本功能是:进行成员关系测试,和 删除重复元素;如:print(set('abacc')) # 结果是{'a', 'b', 'c'};
- 建立方式:能够用 { } 或 set()函数建立;注意:建立空集合须要用set() 而不能用{},由于 {} 是用来建立空字典的;
- 集合是无序的不重复元素序列。
2.5 Dictionary(字典):
- 列表是有序的对象集合,字典是无序的对象集合;
- 键值对表示;key必须使用不可变类型;
- del dict['Name'] # 删除键 'Name';
- dict.clear() # 清空字典;
- del dict # 删除字典。
2.6 List(列表):
- 嵌套列表:
>>>a = ['a', 'b', 'c']java
>>> n = [1, 2, 3]python
>>> x = [a, n]shell
>>> xexpress
[['a', 'b', 'c'], [1, 2, 3]]服务器
>>> x[0]数据结构
['a', 'b', 'c']闭包
>>> x[0][1]app
'b'dom
3.运算符
3.1 is 和==的区别
- is 用于判断两个变量引用对象是否为同一个;== 用于判断引用变量的值是否相等;
- 对比java来看,能够粗略地看做:python中==比较值,相似于Java中的equals;python中is比较引用,相似于Java中的==。
3.2 随机数函数
- choice(seq):从序列的元素中随机选一个元素。如random.choice(range(10)):从0-9中随机挑选一个整数;
- randrange([start,] stop [,step]):返回指定递增基数集合中的一个随机数,基数缺省值为1;包含start,不包含stop;
- random():随机生成一个实数,[0, 1)范围内;
- uniform(x, y):生成一个指定范围内的随机符点数,在[x, y] 范围内;两个参数其中一个是上限,一个是下限,x能够小于y,也能够大于y;
- randint(a, b):用于生成一个指定范围内的整数,参数a是下限,参数b是上限,a必须<=b,生成的随机数n: a <= n <= b;
- shuffle(lst):将列表中元素随机排序;
4.条件控制
4.1 if语句
- python中用 elif 代替 else if;格式为 if-elif-else;
- 每一个条件后面要用冒号 :
- python中没有switch-case语句。
5.循环语句
- python中的循环语句有:for,while;没有do..while。
5.1 while循环
- while语句的形式以下:
while 判断条件: 语句
- 无限循环:能够经过设置条件表达式永远不为false来实现无限循环;
- 能够用CTRL+C退出无限循环;
- 无限循环在服务器上客户端的实时请求很是有用。
- while循环能够使用while....else语句:在while条件语句为false时执行else模块。
5.2 for循环
- Python for循环能够遍历任何序列的项目,如一个列表或者一个字符串。
- for循环通常格式以下:
for <variable> in <sequence>: <statements> else: <statements>
5.3 range()函数
- 须要遍历数字序列,能够使用内置range()函数。它会生成数列。
- 实例1:
for x in range(5): print(x)
结果是 0 1 2 3 4函数
- 实例2,用range指定区间的值(结果左闭右开):
for x in range(5,9): print(x)
结果是 5 6 7 8
- 能够使range以指定数字开始并指定不一样的增量(甚至能够是负数,即'步长');
- 能够使用range()函数来建立一个列表:list(range(5)) # [0, 1, 2, 3, 4]
5.4 break,continue及循环中的else子句
- break:能够跳出for和while的当前循环体;若是循环被break终止,则对应的else块也不会再执行;
- continue:被用来告诉Python跳过当前循环块中的剩余语句,而后继续进行下一轮循环。
5.5 pass语句
- Python pass是空语句,是为了保持程序结构的完整性。
- pass 不作任何事情,通常用作占位语句。
6.迭代器与生成器
6.1 迭代器
- 迭代:是访问集合元素的一种方式;
- 迭代器:是一个能够记住遍历的位置的对象;
- 迭代器对象:从集合的第一个元素开始访问,直到全部元素被访问完结束。迭代器只能往前不能后退;
- 迭代器:有2个基本方法,iter() 和 next();
- 字符串,列表,元组对象:均可以建立迭代器;
- 迭代器对象:能够用 for 循环进行遍历。
6.2 建立一个迭代器
- 把一个类做为迭代器使用,须要在类中实现2个方法:__iter__(),__next__();
- __iter__()返回一个特殊的迭代器对象,该对象实现了__next__()方法并经过StopIteration异常标识迭代的完成:raise StopIteration;
- __next__()返回下一个迭代器对象(python2中为next());
6.3 生成器
- 生成器(generator):即python中,使用了yield的函数;
- 与普通函数不一样,生成器是一个返回迭代器的函数,只能用于迭代操做;
- 调用生成器运行过程当中,每次遇到yield时函数会暂停并保存当前的全部运行信息,返回yield的值,并在下一次执行next()方法时从当前位置继续运行;
- 调用一个生成器函数,返回的是一个迭代器对象。
7. 函数
7.1 参数传递
- python中,类型属于对象,变量是没有类型的,变量只是一个对象的引用;
- 传不可变对象:相似C++的值传递,如整数,字符串,元组。如a = 5;fun(a):传递的只是a的值,没有影响a对象自己。好比在fun(a)内部修改a的值,只是修改另外一个复制的对象,并不会影响a自己;
- 传可变对象:相似C++的引用传递,如列表,字典。如la=[1,2],fun(la):是将la真正传过去,修改后fun外部的la也会受到影响。
7.2 参数
- 必需参数:须要以正确顺序传入参数;调用时的数量须要和声明时一致;
- 关键字参数:容许函数调用时参数顺序与声明时不一致,由于能用参数名匹配参数值;
- 默认参数:调用函数时,若是没有传参,则会使用默认参数;
- 不定长参数:函数声明时,加了 * 的参数会以元组的形式导入,存放全部未命名的变量参数;还有一种是带2个星号 ** 的参数,是以字典形式导入;
- 声明函数时,参数中的 * 能够单独出现,如:def f(a,b,*,c);若是单独出现星号,则 * 后的参数必须用关键字传入,如:f(1,2,c=3);
7.3 匿名函数
- 匿名函数:python用lambda 来建立匿名函数;不使用def 语句来定义;
- lambda只是一个表达式,而非代码块;
- lambda函数拥有本身的命名空间,不能访问本身参数列表以外或全局命名空间的参数;
- 语法:lambda [arg1 [,arg2,.....argn]]:expression;如:sum = lambda arg1, arg2: arg1 + arg2。
7.4 变量做用域
7.4.1 python中的4种做用域
- L (Local):局部做用域;
- E (Enclosing):闭包函数外的函数中;
- G(Global):全局做用域;
- B(Bulit-in):内置做用域,即内置函数所在模块的范围;
- 按照L-E-G-B的顺序查找;
- B 内置做用域:经过名为bulitin的标准模块来实现,须要导入builtins文件才能使用:import builtins。
7.4.2 global和nonlocal关键字
- 内部做用域要修改外部做用域的变量,则内部做用域内中要用global声明该变量;
- 内部做用域要修改嵌套做用域(enclosing,外层非全局做用域)中的变量,则内部做用域内中要用nonlocal声明该变量。
8. 数据结构
8.1 列表
- 列表的方法中,相似insert,remove,sort等修改列表的方法没有返回值;可是 pop([i]) 比较特殊,会返回移除的元素值;
- list.pop([i]) :从列表指定位置移除元素,并返回元素值;不指定索引,则返回最后一个元素。(方法中 i 两边的方括号表示这个参数是可选的,而不是须要输入一对方括号)。
8.2 列表当堆栈用
- 堆栈特色:先进后出,后进先出;
- 用append() 方法能够把一个元素添加到堆栈顶;
- 用不指定索引的pop() 方法能够把一个元素从堆栈顶释放出来。
8.3 列表当队列用
- 队列特色:先进先出,后进后出;
- 用列表当队列用,效率并不高。在列表最后添加或弹出元素速度快,可是在列表里插入或从头部弹出元素速度并不快(由于全部其余元素须要一个一个移动)。
- 实例:
>>> from collections import deque >>> queue = deque(['aaa','bbb','ccc']) >>> queue.append('ddd') >>> queue.append('eee') >>> print(queue) deque(['aaa', 'bbb', 'ccc', 'ddd', 'eee']) >>> queue.popleft() 'aaa' >>> queue.popleft() 'bbb' >>> print(queue) deque(['ccc', 'ddd', 'eee']) >>>
8.4 列表推导式
- 列表推导式:提供了从序列建立列表的简单途径;
- 列表推导式结构:由一对方括号所包含的如下内容:一个表达式,后面跟一个
for
子句,而后是零个或多个for
或if
子句; - 列表推导式结果:其结果将是一个新列表,由对表达式依据后面的
for
和if
子句的内容进行求值计算而得出; - 若是但愿表达式推导出一个元组,就必须使用括号()。
- 实例:
>>> [x * 2 for x in [2,3]] [4, 6] >>> [(x,x**2) for x in [2,3,4] ] [(2, 4), (3, 9), (4, 16)] >>> [x for x in [2,3,4] if x >2] [3, 4] >>> [x+y for x in [1,2] for y in [35,6]] [36, 7, 37, 8] >>>
8.5 嵌套列表解析
- 实例:3X4的矩阵列表转换成4X3列表:。。。。
8.6 del语句
- del语句:从列表中依索引而不是值来删除一个元素,不返回值;pop([i])会返回值;
- del语句:能够从列表删除一个切割,或者清空整个列表,还能够删除实体变量;
- 实例:
>>> a=[4,5,6,7,8,9] >>> del a[1] >>> a [4, 6, 7, 8, 9] >>> del a[1:3] >>> a [4, 8, 9] >>> del a[:] >>> a [] >>> del a >>> a Traceback (most recent call last): File "<pyshell#18>", line 1, in <module> a NameError: name 'a' is not defined >>>
8.7 元组和序列
- 元组:由若干逗号分隔的值组成;
- 元组:输出时总有括号() 的;可是输入时能够有() 也能够没有();可是输入时,元组是更大表达式的一部分,则一般要加()。
8.8 集合
- 集合也支持推导式:
>>> {x for x in 'abcddcba' if x not in 'ab'} {'d', 'c'} >>>
8.9 字典
- 字典推导能够建立任意键值的表达式字典:
>>> {x:x**2 for x in [1,2,3]} {1: 1, 2: 4, 3: 9} >>> {x:x**2 for x in (1,2,3)} {1: 1, 2: 4, 3: 9}
- 若是关键字只是简单的字符串,使用关键字参数指定键值对有时候更方便:
>>> dict(aa=1,bb=2) {'aa': 1, 'bb': 2} >>>
8.10 遍历技巧
- 在字典中遍历时,关键字和值能够用items() 方法同时取出来;
- 在序列中遍历时,索引位置和值能够用enumerate() 函数同时获得;
- 同时遍历2个或更多序列,能够用zip() 组合;
- 反向遍历一个序列,能够先指定序列,再用reversed() 函数;
- 按顺序遍历一个序列,用sorted() 函数返回一个已排序的序列,并不修改原值。
9. 文件I/O
9.1 输入
- raw_input([prompt]):从标准输入读取一个行,并返回一个字符串(去掉结尾的换行符);
- input([prompt]):能够接收一个python表达式做为输入,并将运算结果返回。
10. 错误和异常
10.1 异常处理
- try/except:1个try语句可能包含多个except子句,分别处理不一样特定的异常;最多只有1个分支被执行。
- try/except..else:else可选,else子句在try子句没有发生任何异常时执行。
- try/finally:不管是否异常,都会执行最后的代码
10.2 抛出异常
- raise:抛出异常