Python3基础知识

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:抛出异常
相关文章
相关标签/搜索