• 1. Python 入门指南
  • 2. 目录第一章 Python语言介绍及开发环境 第二章 Python语言数据类型、运算符和表达式 第三章 常用数据结构 第四章 控制流 第五章 函数 第六章 输入和输出 第七章 模块 第八章 错误和异常 第九章 类 第十章 标准库概览
  • 3. 第一章 Python语言介绍及开发环境什么是Python Python的特色 Python可以做什么 Python安装与配置 Python开发环境 如何运行Python程序
  • 4. Python 是一门简单易学且功能强大的编程语言。 它拥有高效的高级数据结构,并且能够用简单而又高效的方式进行面向对象编程。 Python 优雅的语法和动态类型,再结合它的解释性,使其在大多数平台的许多领域成为编写脚本或开发应用程序的理想语言。特别适用于快速的应用程序开发 什么是Python
  • 5. 简单 易学: Python极其容易上手 Python有极其简单的语法 免费、开源 : Python是FLOSS(自由/开放源码软件)之一。简单地说,可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。 FLOSS是基于一个团体分享知识的概念。这是为什么Python如此优秀的原因之一——它是由一群希望看到一个更加优秀的Python的人创造并经常改进着的。 高层语言 当你用Python语言编写程序的时候,你无需考虑诸如如何管理程序使用的内存一类的底层细节 面向对象: Python即支持面向过程的编程也支持面向对象的编程。 Python的特色
  • 6. 可移植性: 由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就可以在下述任何平台上面运行。 这些平台包括:Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、 BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至还有PocketPC 解释性 : Python语言写的程序不需要编译成二进制代码。你可以直接从源代码 运行 程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。 可扩展性: 如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。 可嵌入性: 你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。
  • 7. 丰富的库: Python标准库确实很庞大。它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、 FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。 只要安装了 Python,所有这些功能都是可用的。这被称作Python的“功能齐全”理念。 除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。
  • 8. 系统编程 Python对操作系统服务的内置接口,使其成为编写可移植的维护操作系统的管理工具和部件的理想工具。Python程序可以搜索文件和目录树,可以运行其他程序,用进程或线程进行并行处理等。 Python的标准库绑定了POSIX以及其他常规操作系统工具:环境变量、文件、套接字、管道、进程、多线程、正则表达式、命令行参数、标准流接口、Shell命令启动器、文件名扩展等。 用户图形接口 Internet通信 组件集成 数据库编程 快速原型 数值计算和科学计算 游戏、图像、人工智能、机器人等 ……Python可以做什么
  • 9. Windows下,下载 python_3.3.2150.msi直接安装 设置环境变量: 默认情况下,在windows下安装python之后,系统并不会自动 添加相应的环境变量。此时不能在命令行直接使用python命令,为了在命令行模式下运行Python命令,需要将python.exe所在的目录附加到PATH这个环境变量中  如何使Python解释器能直接import默认安装路径以外的第三方模块? 为了能import默认安装路径以外的第三方的模块(如自己写的模块), 需要新建PYTHONPATH环境变量,值为这个模块所在的目录。 Python 安装
  • 10. Python 开发环境
  • 11. 交互模式下, 想输入多少Python命令,就输入多少,每个命令在输入回车后都立即运行。 只要不重新开启新的解释器,我们都在同一个会话中运行,因此,前面定义的变量,后面的语句都可以使用。一旦关闭解释器,会话中的所有变量和敲入的语句将不复存在 源文件模式, 为了能够永久保存程序,并且能够被重复执行,我们必须要将代码保存在文件中(一般以.py作为后缀名),因此,就需要用编辑器来进行代码的编写,和其他编程语言一样,不同的Python的源代码可以直接执行而不需要像编译型语言一样编译成二进制代码。 通过系统命令行 :python spam.py [val1] [val2] 在我们使用的开发工具下,可直接按F5运行.py文件 当程序比较大的时候,可以将程序划分成多个模块编写,每个模块用一个文件保存 如何运行Python程序
  • 12. 模块之间可以通过导入互相调用(import) 模块也可以导入库中的其他模块 Python是以模块进行重用的,模块中可以包括类、函数、变量等 * 注:无论如何运行,每次运行时,都会从头到尾执行模块文件中每一条代码。
  • 13. 第二章 Python语言数据类型、运算符和表达式Python数据类型 Python中的常量和变量 Python标识符命名规范 Python逻辑行与物理行 Python代码缩进 Python运算符与表达式
  • 14. 在Python中有4种类型的数——整数、长整数、浮点数和复数。 2是一个整数的例子。 长整数不过是大一些的整数。 3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表 示52.3 * 10-4。 (-5+4j)和(2.3-4.6j)是复数的例子 boolean类型,True /False 字符串是 字符的序列 ,有下面几种表示形式: 使用单引号(‘):可以用单引号指示字符串,就如同’Hello World‘这样。所有的空白,即空格和制表符都照原样保留。 使用双引号(“):在双引号中的字符串与单引号中的字符串的使用完全相同,例如”What‘s your name?“。 数据类型
  • 15. 使用三引号(‘’‘或“”“):利用三引号,可以指示一个多行的字符串,可以在三引号中自由的使用单引号和双引号,例如:
  • 16. 常量: 一个字面意义上的常量的例子是如同5、1.23、9.25e-3这样的 数,或者如同‘This is a string’、“It‘s a string!”这样的字符串。 变量: 变量的值可以变化,即可以使用变量存储任何东西。变量只是计算机中存储信息的一部分内存。与字面意义上的常量不同,需要一些能够访问这些变量的方法,因此要给变量命名。 如: s = ‘Hello World’ #给变量s赋值为:Hello World字符串类型 print(s) s = 45 #给变量赋值为45 Python中的变量是不需要声明变量的类型的 Python中变量值的改变,只是改变了变量的指向,并不会改变变量指向内存的数据 变量在第一次赋值时创建 变量在表达式中使用将被替换为他们的值 变量在表达式中使用以前必须已经赋值 Python中的常量和变量
  • 17. 标识符 是用来标识 某样东西 的名字。在命名标识符的时候,要遵循这些规则: 标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘ _ ’)。 标识符名称的其他部分可以由字母(大写或小写)、下划线(‘ _ ’)或数字(0-9)组成。 标识符名称是对大小写敏感的。例如,myname和myName不是一个标识符。注意前者中的小写n和后者中的大写N。 有效 标识符名称的例子有: i、__my_name、name_23和a1b2_c3。 无效 标识符名称的例子有: 2things、this is spaced out和my-name。 类保留的标识符: _*:from module import *将不被导出。交互环境最后表达式的值。 __*__:系统定义的名字 __*:类的私有变量或方法 标识符的命名
  • 18. 标识符的命名不能使用python中的关键字,关键字如下:
  • 19. 物理行是在编写程序时所 看见 的。逻辑行是Python 看见 的单个语句。Python假定每个 物 理行 对应一个 逻辑行 如果想要在一个物理行中使用多于一个逻辑行,那么需要使用分号;来特别地标明这种用法。分号表示一个逻辑行/语句的结束。如: i=2;j=4;print(i);print(j) 这是一个物理行,它对应四个逻辑行 仅仅当逻辑行太长的时候,在多于一个物理行写一个逻辑行。这些都是为了尽可能避免使用分号,从而让代码更加易读。它被称为明确的行连接 如: s = 'This is a string. \ This continues the string.‘ print(s) 输出 :This is a string. This continues the string. 有一种暗示的假设,可以不需要使用反斜杠。这种情况出现在逻辑行中使用了圆括号、方括号或波形括号的时候。这被称为暗示的行连接。 *注:强烈建议坚持在每个物理行只写一句逻辑行。 逻辑行与物理行a = [100, 200] print a
  • 20. 同一层次的语句必须有相同的缩进。每一组这样的语句称为一个块。错误的缩进会引发错误 ,强烈建议 在每个缩进层次使用 单个制表符 或 两个或四个空格 。 Python中的缩进if (x) if (y) statements; else statements;if x: if y: statements else: statements
  • 21. 程序由模块构成 模块包含语句 语句包含表达式 表达式建立并处理对象 Python语法实质上是有语句和表达式组成的。表达式处理对象并嵌套在语句中。语句编程实现程序操作中更大的逻辑关系。此外,语句还是对象生成的地方,有些语句会生成新的对象类型(函数、类等)。语句总是存在于模块中,而模块本身则又是由语句来管理的。 Python程序结构
  • 22. 编写的大多数语句(逻辑行)都包含表达式。一个简单的表达式例子如2 + 3。一 个表达式可以分解为运算符和操作数。 运算符 的功能是完成某件事,它们由如+这样的符号或者其他特定的关键字表示。运算符需要数据来进行运算,这样的数据被称为 操作数 。在这个例子中,2和3是操作数。 在Python中,表达式可以作为语句,但表达式结果不会存储。运算符与表达式
  • 23. 标准算数运算符及用法
  • 24. 位运算符及其用法
  • 25. 比较运算符及用法
  • 26. 逻辑运算符及用法
  • 27. 运算符优先级
  • 28. 第三章 常用数据结构数字 字符串 列表 元组 字典
  • 29. Python提供了常用的数字类型:整数、浮点数以及与之相关的语法和操作 允许使用八进制、十六进制常量 提供了复数类型 提供了无穷精度的长度类型(只要内存空间允许,可以增长成为任意位数的整数) 数字
  • 30. Python工具可以当做计算器来使用 简单运算: 例如: 将一个整数变为其八进制、十六进制的数字字符串 例如: 将一个数字的字符串变换成一个整数,第二个参数用于指示变换后的数字的进制 >>> oct(64) '0100' >>> hex(64) '0x40'
  • 31. 数学内置模块 math模块-普通数学函数 cmath模块-处理复数的模块 random模块,用于产生随机数,例如: >>> import random >>> random.random() 0.33452758558893336 >>> random.randint(1, 10) 5 >>> random.choice(['a', 'b', 'c']) 'c'
  • 32. 字符串是不可变的 这意味着一旦创造了一个字符串,就不能再改变它了。虽然这看起来像是一件坏事,但实际上它不是。我们将会在后面的程序中看到为什么说它不是一个缺点。 级连字符串 如果把两个字符串按字面意义相邻放着,他们会被Python自动级连。例如,'What\'s' ‘ your name?'会 被自动转为"What's your name?“ 转义字符串 例1:‘What\’s your name?‘ 即为 ‘What’s your name?’ 字符串
  • 33. 格式化字符串 str1 = "my name is %s,age is %d,record is %f"%(‘Tom',22,99.0), 输出 my name is Tom,age is 22,record is 99.000000 注:若限定浮点型的精度,占位符可以写成这样 %.nf,例如保留两位小数:%.2f
  • 34. Raw字符串 例如:open(r‘c:\temp\tem.txt’,‘a+’) ,告诉python不把 \t 当做转义字符 Unicode字符串 例如:s = u"hello",代表unicode编码的字符串 字符串转化 常用类型转换,字符串可以强转换为int和float类型等
  • 35. 字符串的基本操作: + 连接:只能是字符串之间相加,如果其它类型要与字符串连接,必须先转换成字符串类型,例如: print(“Hello” + “ ” + “World” + str(100)) ,输出 Hello World100 * 重复,如: str1 = 'abc' * 8, 结果为 abcabcabcabcabcabcabcabc s[i] 索引,下标从0开始,如: str1 = 'abc' str1[1] ,结果为'b‘ s[s:e:step] 切片,s:开始位置;e:结束位置,step:步长,也可以只写起点和终点或许都不写,也可以倒着数(负数),如: str1 = ‘hello world’ str1[3:9] = ‘lo wor’ str1[1:],从序列1开始往后取; str1[:8],序列0开始到8的位置; str1[:],从起点截取到终点; str1[-4:],最后一个从-1开始,从倒数第4个截取到最后 str1[-4:-1],从倒数第4个截取到倒数第2个 str1[8,3,-1],从8开始往前切到3的位置(-1在这里控制方向)
  • 36. 字符串方法
  • 37. 列表的主要性质: 任意对象的有序集合 通过偏移读取(同字符串,可通过索引获得对应的值) 可变长度、异构以及任意嵌套 可变序列(列表支持在原处的修改, list[i] = val) 常用列表常量和操作列表(list)
  • 38. 删除列表元素,可以删除某个索引的元素或切片元素,如下: 例1: li = [1,2,3,4,5,6,7,8] del li[2] #删除列表中下标为2的元素 print(li) #[1, 2, 4, 5, 6, 7, 8] 例2: del li[2:4]#删除现有列表中索引为2到3的元素 print(li) #[1, 2, 6, 7, 8] 例3: del li[:] #删除列表中的所有元素 print(li) #[] 例4: del li #删除整个列表(删除后这个列表已不存在。因此打印这个列表的时候会报错) 更新列表元素,如: li = [1,2,3,4,5,6,7,8] li[2] = 9 #更新下标为2的元素的值为9 print(li) #[1, 2,9, 4, 5, 6, 7, 8]
  • 39. 列表方法 append(x),把一个元素添加到列表的结尾,相当于a[len(a):] = [x],例如: list.append(obj),往列表中添加元素,例如: li = [2,3,4,5] li.append(8) print(li) #结果为: [2, 3, 4, 5, 8] extend(L),通过添加指定列表的所有元素来扩充列表,相当于a[len(a):]=L insert(i,x),在指定位置i处,插入一个元素x remove(x),删除链表中值为x的第一个元素。如果没有这样的元素,就会返回一个错误。 pop([index]),从链表的指定位置index处,删除元素,并将元素返回如果没有index值,默认移除最后一个值 index(x),返回链表中第一个值为x的元素的索引。如果没有匹配的元素就会返回一个错误 count(x),返回x在链表中出现的次数。 sort(),对链表中的元素进行适当的排序 reverse(),倒排链表中的元素。
  • 40. 列表知识扩充 把列表当做堆栈来使用,如: stack = [1,2,3] stack.append(4) #这时stack的内容为[1,2,3,4] print(stack) print(stack.pop()) #移除列表中最后一个元素 print(stack) #这时stack的值为[1,2,3] 把列表当做队列来使用,如: from collections import deque li = [1,2,3] que = deque(li) print(type(que)) # que.append(4) que.append(5) print(que) #deque([1, 2, 3, 4, 5]) print(que.popleft()) #移除第一个元素1 print(que.popleft()) #移除第二个元素2 print(que) 列表推导式,如(将0到10的平方放入列表中): seq1 = [x**2 for x in range(10)] print(seq1) #打印 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
  • 41. 元组特点 一个元组由数个逗号分隔的值组成 元组有很多用途。例如(x, y)坐标点 元组就像字符串,不可改变:不能给元组的一个独立的元素赋值 可以通过包含可变对象来创建元组,例如链表。 元组的创建 创建一个元组 t = 234,345,'Hello' print(t) # (234, 345, 'Hello') 创建空元组 , t = () 创建只包含一个元素的元组, t = 345,元组>>> lst = [1, 2, 3] >>> t = tuple(lst) >>> t (1, 2, 3)
  • 42. 元组封装和解封 语句t = 12345, 54321, ’hello!’ 是元组封装(sequence packing)的一个例子:值12345,54321 和’hello!’ 被封装进元组。其逆操作可能是这样>>> t = (1, 2, 3) >>> x, y, z = t >>> print x, y, z 1 2 3
  • 43. 字典特点 字典以键值对的形式存在,以关键字为索引 字典中的关键字可以是任意不可变类型,通常用字符串或数值,不能用列表做关键字,因为链表可以用它们的append()和extend()方法,或者用切片、或者通过检索变量来即时改变 字典的主要操作是依据关键字来存储和析取值。也可以用del key 来删除 如果使用一个已经存在的关键字存储新的值或对象,以前为该关键字分配的值就会被遗忘。 试图析取从一个不存在的关键字中读取值会导致错误。 字典的基本操作 d = {‘ID’:1,‘name’:‘zhangsan’,‘age’:18,‘score’:90} #创建字典 print('name' in d) #判断字典d中是否存在name这个键,是返回True print(d['name']) #根据键找到对应的值 del d['ID'] #删除字典d中,key为ID的键值对 print(d) # {'name': 'zhangsan', 'age': 18, 'score': 90} li = list(d.keys()) #获取字典d中的key,并将它们转换成list dsort = sorted(d.keys()) #给字典中的key排序 print(dsort)字典
  • 44. 字典的update(anothordict)方法类似于合并,它把一个字典的关键字和值合并到另一个,盲目的覆盖相同键的值 字典的遍历 d = {'ID':1,'name':'zhangsan','age':18,'score':90} for k,v in d.items(): print(k,v)
  • 45. Python 还包含了一个数据类型—— set (集合) 。集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。集合对象还支持 union(联合),intersection(交),difference(差)和 sysmmetric difference(对称差集)等数学运算。 创建集合: sets = {345,567,234,'Hello','Hello'} #如果集合中包含重复元素会自动过滤掉 print(sets) 创建空集合: s = set(); 注意不能写成 s = {} ,这是一个空的字典 * 注:集合和列表一样,也有集合推导式语法集合
  • 46. 第四章 控制流If语句 For循环 While循环
  • 47. If单分支 if condition: 相应操作…… if双分支 if condition: 相应操作…… else: 相应操作…… If多分支 if condition1: 相应操作…… elif condition2: 相应操作…… elif condition3: 相应操作…… else: 相应操作…… If分支
  • 48. if例题 count = int(input('请输入成绩:')) if count < 60: print('不及格') elif count >= 60 and count <=70: print('及格') elif count >70 and count <=80: print('良好') else: print('优秀')
  • 49. while语法 while condition: 相应操作…… else: 相应操作…… while例题: c = 0 while(c <= 100): print('Hello',c) c = c + 1 else: print('entry else') print('end') 循环语句中的关键字 break 语句和 C 中的类似,用于跳出最近的一级 for 或 while 循环。 continue 语句是从 C 中借鉴来的,它表示循环继续执行下一次迭代 pass 语句什么也不做。它用于那些语法上必须要有什么语句,但程序什么也不做的场合 While循环
  • 50. For循环完整格式 For循环原理: for 语句在容器对象中调用 iter() 。 该函数返回一个定义了 next() 方法的迭代器对象,它在容器中逐一访问元素。没有后续的元素时, next() 抛出一个 StopIteration 异常通知 for 语句循环结束 For循环for in :#Assign object items to target #Repeated loop body:use target if : break #Exit loop now, skip else if : continue #Go to top of loop now else: #If we didn't hit a 'break'
  • 51. For循环例题,0~10之间的质数和合数判断 def isPrime(a): for i in range(int(a)): for x in range(2,i): if i % x == 0: print(str(i) + ' is even') break else: print(str(i) + ' is prime')
  • 52. 第五章 函数 系统库提供的内部函数 第三方提供的函数 自定义函数 匿名函数(lambda表达式)
  • 53. 系统提供的函数库主要分为以下函数库: 字符函数库 例如:str = 'abcdef' str.replace('ab','AB'),结果为'ABcdef'; 将原先字符串中的'ab'换成'AB‘ 数学函数库 (math、cmath、random等) 例如:math.pow(3,4) #求3的4次方 操作系统库 (sys、os等) currentPath = os.getcwd() 获取当前工作路径 dirs = os.listdir(currentPath) 获取currentPath路径下的所有文件和文件夹 网络函数库(socket等) baiduip = socket.gethostbyname('www.baidu.com'),根据百度的域名获的百度的Ip地址 结果为119.75.218.77 系统库提供的内部函数
  • 54. Windows下,第三方函数库的使用步骤 1、下载模块 2、解压下载的压缩包到某目录下 3、配置PYTHONPATH环境变量 4、正常使用 第三方提供的函数
  • 55. 函数的定义 函数定义格式 def ( return *函数通过def 关键字标示,在def后面个以空格是函数的名称,跟着是一对圆括号,里面放置函数的形参,最后用:作为函数体开始的标志 简单函数定义实例: def hello(): print(‘HelloWorld’) hello() #函数调用 自定义函数
  • 56. 函数的参数详解 关键字参数(key=value形式) 预定义参数值 如何给拥有默认参数的函数赋值,如下: def fun(a,b=3,c=4): return a+b+c #调用方式 print(fun(2)) print(fun(a=2)) print(fun(2,b=5)) #第一个参数必须有,其他的可以指定参数名赋值 print(fun(2,c=8)) print(fun(b=5,a=2)) #若没有给定默认值的参数不在第一个参数的位置赋值,则必须制定参数名 print(fun(2,9)) #若没有指定参数名,则默认给第二个参数赋值 #以下几种赋值方式是有误的 print(fun()) print(fun(a=3,3)) print(fun(b=3)) print(fun(2,a=4)) * 注:参数列表必须先书写位置参数(没有默认值的参数)然后才是关键字参数(有默认值的参数)
  • 57. 元组参数和字典参数 # kind 接收一个字符串(它在最前,因此接收一个个传入的字符串) # *arguments 接收一个元组(去掉第一个字符串,如果其后有连着的字符串, 都会被放入这个元组中) # **keywords 接收一个字典会将形如key=value形式的数据装进一个字典中 #注: *name 必须在 **name 之前出现 def cheeseshop(kind, *arguments, **keywords): print('kind: '+kind) print(arguments) print(keywords) #函数调用: cheeseshop("Limburger", "It's very runny, sir.", "It's really very, VERY runny, sir.", shopkeeper="Michael Palin", client="John Cleese", sketch="Cheese Shop Sketch")
  • 58. 可变参数列表 #args可接收多个参数,这些参数被装入一个元组, #任何出现在 *args 后的参数是关键字参数,这意味着,他们只能被用作关键字,而不是位置参数 def concat(*args, sep="/"): #这里以/作为分隔符 将字符串组合在一起 return sep.join(args) print(concat('Hello','World','Pachira'))
  • 59. 通过Lambda关键字,可以创建短小的匿名函数。形式可以用于任何需要的函数对象。出于语法限制,它们只能有一个单独的表达式。语义上讲,它们只是普通函数定义中的一个语法技巧。类似于嵌套函数定义,lambda 形式可以从外部作用域引用变量 例1: l = lambda x : x**2 print(l(3)) #结果为9 例2: def add(n): print("n : " + str(n)) return lambda x:x+n f = add(42) #将已复制n=42的函数add(42)赋值给变量f print(f) #结果为: . at 0x02D24FA8> print(f(1)) #为x赋值,结果为: 1 + 42 = 43 print(f(2)) # 结果为 2 + 42 = 44匿名函数(Lambda表达式)
  • 60. 第六章 输入和输出格式化输出 文件读写
  • 61. 常见格式化字符串函数 s = 'Hello World!' a = str(s) print(a) #输出 Hello World! b = repr(s) print(b) #输出 'Hello World!' c = '12'.zfill(5) #使c占5位,它用于向数值的字符串表达左侧填充 0 print(c) #00012 Format的用法 方法 str.format() 的基本用法如下: print('My name is {}, Hello {}'.format('Katrina','World')) #使用{}占位格式化输出
  • 62. 使用{0}、{1}占位符: print('My name is {0}, Hello {1}'.format('Katrina','World')) #使用{0}占位 print('My name is {1}, Hello {0}'.format('World','Katrina')) 使用关键字参数,可以通过参数名来引用值: print('My name is {name}, Hello {say}'.format(name='Katrina',say='World'))#指定名占位 定位和关键字参数可以组合使用: print('My name is {0}, Hello {say}'.format('Katrina',say='World'))#混合占位 也可以用 ‘**’ 标志将这个字典以关键字参数的方式传入: table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678} print('Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}'.format(**table))
  • 63. 获得文件对象: open(filePath, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) ,此函数返回一个file对象 参数解析:filePath,文件路径;mode:打开模式,默认为读模式,当然还有其他 模式,如: 'r' open for reading (default) 'w' open for writing, truncating the file first 'x' create a new file and open it for writing 'a' open for writing, appending to the end of the file if it exists 'b' binary mode 't' text mode (default) '+' open a disk file for updating (reading and writing文件读写
  • 64. 读写文件相关的函数 tell(),返回一个整数,代表文件对象在文件中的指针位置 read([size]), 如果没有指定 size 或者指定为负数,就会读取并返回整个文件。当文件大小为当前机器内存两倍时,就会产生问题。反之,会尽可能按比较大的 size 读取和返回数据。如果到了文件末尾,f.read() 会返回一个空字符串。 readline(),读取文件中的一行数据,字符串结尾会自动加上一个换行符 readlines(),一行一行读取文件的内容,返回类型为list,元素为一行数据 write(val),将字符数据写入文件,并返回写入字符的长度。 writelines(val),参数类型可以为字符串,序列,字典;为了输入数据的格式工整,可以在每行数据的最后加上换行符(ASCII '\n' 不可见的) close() ,关闭文件 用关键字 with 处理文件对象是个好习惯。它的先进之处在于文件用完后会自动关闭,就算发生异常也没关系。它是 try-finally 块的简写,例如: with open('/tmp/workfile', 'r') as f: read_data = f.read()
  • 65. 文件操作例题详解 读文件并在控制台打印 file = open('data.txt','r') for n in file: #遍历文件 n = n.rstrip('\n') #去除一行文字后的换行,即去掉\n print(n) else: file.close() #关闭文件 复制文件 readfile = open('data.txt','r') #被读文件 data = readfile.readlines() #被读文件数据 writefile = open('temp.txt','a+'); #被写文件,模式为a+时,当文件不存在时可以创建文件,并且可在文档数据的末尾追加字符串 writefile.write(data) #写数据 readfile.close() writefile.close()
  • 66. 第七章 模块模块介绍 为什么使用模块 如何组织一个程序 创建模块 模块的引入 模块的搜索路径 包
  • 67. 模块是最高级别的程序组织单元,它将程序代码和数据封装起来以便重用。 从实际角度看,Python的模块一般对应于程序文件(py文件),每个文件都是一个模块,而且模块导入其他模块之后就可以使用导入模块定义的变量名。 import 使客户端(导入者)以一个整体获取一个模块 from 允许客户端从一个模块文件中获取特定的变量名 reload 在不终止Python程序情况下,提供一种重新载入模块文件代码的方法 模块简介
  • 68. 代码重用 模块可以在文件中永久保存代码,可以按照需要任意次重新载入和重新运行模块。除此之外,模块还是定义变量名的空间,被认作是模块的属性,可以被多个外部客户端引用 系统命名空间的划分 模块在Python中是最高级别的程序组织单元,从根本上讲,他们不过是变量名的软件包。模块将变量名封装进自包含的软件包,这样就可以避免变量名的冲突。如果不精确导入文件的话,我们不可能看到另一个文件中的变量名。 事实上,所有的一切都“存在于”模块文件中,执行的代码以及创建的对象都毫无疑问的封装在模块之中。正是由于这一点,模块是组织系统组件的天然工具。 为什么使用模块
  • 69. import 语句的一个变体直接从被导入的模块中导入命名到本模块 例: 有一脚本 test.py,内容如下: def sum(a,b): return a+b def reduce(a,b): return a-b 在另一python文件中引用这个模块(脚本),或在交互模式下引用这个模块 import test a = test.sum(3,4) 或 from test import sum,reduce a = sum(3,4) 或 from test import * #导入模块中的所有定义,这样可以导入所有除了以下划线 ( _ )开头的命名模块的引入
  • 70. 导入一个叫 spam 的模块时,解释器先在当前目录中搜索名为 spam.py 的文件。如果没有找到的话,接着会到 sys.path 变量中给出的目录列表中查找。 sys.path 变量的初始值来自如下: •输入脚本的目录(当前目录)。 •环境变量 PYTHONPATH 表示的目录列表中搜索 (这和 shell 变量 PATH 具有 一样的语法,即一系列目录名的列表)。 •Python 默认安装路径中搜索。 dir()函数 内置函数 dir([object]) ,用于按模块名搜索模块定义,它返回一个字符串类型的存储列表,无参调用时,dir()返回当前定义的命名,如下: >>> a = 1 >>> import sys >>> dir() ['__builtins__', '__doc__', '__loader__', '__name__', '__package__', 'a', 'sys']模块的搜索路径
  • 71. 为了让 Python 将目录当做内容包,目录中必须包含 __init__.py 文件。 这是为了避免一个含有烂俗名字的目录无意中隐藏了稍后在模块搜索路径中出现的有效模块,比如 string 。 最简单的情况下,只需要一个空的 __init__.py 文件即可。 用户可以每次只导入包里的特定模块,例如: import sound.effects.echo 这样就导入了 sound.effects.echo 子模块。它必需通过完整的名称来引用,如: sound.effects.echo.echofilter(input, output, delay=0.7, atten=4) 导入包时有一个可以选择的方式: from sound.effects import echo 这样就加载了 echo 子模块,并且使得它在没有包前缀的情况下也可以使用,如: echo.echofilter(input, output, delay=0.7, atten=4) 还有另一种变体用于直接导入函数或变量 from sound.effects.echo import echofilter 这样就又一次加载了 echo 子模块,可以直接调用它的 echofilter() 函数: echofilter(input, output, delay=0.7, atten=4) 包
  • 72. 包内引用模块: 如果包中使用了子包结构,可以按绝对位置从相邻的包中引入子模块 如果是同级模块(位于同一文件夹下) 用 . 如果和它所在的目录同级,则用 .. 例: 现有test.py , from . import echo #导入与它同级的echo.py 模块 from .. import formats #导入于与test.py所在目录同级的包 formats from ..filters import equalizer #导入于与test.py所在目录同级的包中的equalizer
  • 73. 第八章 错误和异常常见异常种类 异常处理 抛出异常 用户自定义异常 定义清理行为
  • 74. AttributeError 调用不存在的方法引发的异常 EOFError 遇到文件末尾引发的异常 ImportError 导入模块出错引发的异常 IndexError 列表越界引发的异常 IOError I/O操作引发的异常,如打开文件出错等 KeyError 使用字典中不存在的关键字引发的异常 NameError 使用不存在的变量名引发的异常 TabError 语句块缩进不正确引发的异常 ValueError 搜索列表中不存在值引发的异常 ZeroDivisionError 除数为零引发的异常 常见异常种类
  • 75. 简单异常处理 示例如下: while True: try: x = int(input('Please enter a number:')) break except ValueError: print('Invaild Number!') 当用户输入的为整数时,跳出循环;如果不是则捕捉异常,打印错误信息 一个 try 语句可能包含多个 except 子句,分别指定处理不同的异常。至多只会有一个分支被执行。异常处理程序只会处理对应的 try 子句中发生的异常 except (RuntimeError, TypeError, NameError): ……异常处理
  • 76. 最后一个 except 子句可以省略异常名称,以作为通配符使用,例如: import sys try: f = open('myfile.txt') s = f.readline() i = int(s.strip()) except IOError as err: print("I/O error: {0}".format(err)) except ValueError: print("Could not convert data to an integer.") except: print("Unexpected error:", sys.exc_info()[0]) raise #可以使用这种方法打印一条错误信息,然后重新抛出异常(允许调用者处理这个异常): try ... except 语句可以带有一个 else子句 ,该子句只能出现在所有 except 子句之后。当 try 语句没有抛出异常时,需要执行一些代码,可以使用这个子句。例如:有一python1.py脚本,内容如下:
  • 77. import sys for arg in sys.argv[1:]: try: f = open(arg, 'r') except IOError: #如果发生异常,给提示 print('cannot open', arg) else: print(arg, 'has', len(f.readlines()), 'lines') #如果没有发生异常,做相应操作 f.close() * 注:使用 else 子句比在 try 子句中附加代码要好,因为这样可以避免 try ... except 意外的截获本来不属于它们保护的那些代码抛出的异常
  • 78. raise 异常类('错误信息提示') ,例如 raise NameError('name Error') 如果你需要明确一个异常是否抛出,但不想处理它, raise 语句可以让你很简单的重新抛出该异常.例如: try: raise NameError('HiThere') except NameError: print('An exception flew by!') raise #打印异常信息后再重新抛出 异常的参数接收: 可以给Exception父类传入多个参数值,这些参数值会被args变量接收 try: raise Exception('Hello',2,'World') except Exception as inst: print(type(inst)) print(inst.args) 抛出异常
  • 79. 在程序中可以通过创建新的异常类型来命名自己的异常。异常类通常应该直接或间接的从 Exception类派生,例如: * 在这个例子中,Exception 默认的 __init__() 被覆盖。新的方式简单的创建 value 属性。这就替换了原来创建 args 属性的方式。用户自定义异常
  • 80. try 语句还有另一个可选的子句,目的在于定义在任何情况下都一定要执行的功能。不管有没有发生异常, finally子句 在程序离开 try 后都一定会被执行。当 try 语句中发生了未被 except 捕获的异常(或者它发生在 except 或 else 子句中),在 finally 子句执行完后它会被重新抛出。 try 语句经由 break continue 或 return 语句退 出也一样会执行 finally 子句。例如: def divide(x,y): try: result = x / y except ZeroDivisionError: print('Entry exception!') else: print('result is :',result) finally: print('Entry finally') divide(3,4) divide(2,0) divide('hello') 定义清理行为
  • 81. 第九章 类类定义 类继承 外部类的引入
  • 82. 类定义语法 类的私有属性 __private_attrs  两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问 在类内部的方法中使用时 self.__private_attrs 类的私有方法 __private_method 两个下划线开头,声明该方法为私有方法,不能在类地外部调用 在类的内部调用slef.__private_methods 类的公开方法 在类地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数 类的定义
  • 83. 类的静态方法,方法前加注释 @staticmethod,可以直接用类名访问,多个示例共享一个静态方法 类方法,方法前加注释 @classmethod,可以直接用类名或类的实例调用 类的专有方法 定义类后,类中会有有多个内置的方法,如: __init__  构造函数,在生成对象时调用 __del__   析构函数,释放对象时使用 __repr__ 打印,转换 __setitem__按照索引赋值 __getitem__按照索引获取值 __len__获得长度 __cmp__比较运算 __call__函数调用 ……
  • 84. 类定义例题详解
  • 85. 单继承类继承
  • 86. 多继承
  • 87. 引入外部类 import 模块名 [as 简称] obj = 模块名.类名() #实例化一个类对象 例如: import classjicheng as c s = c.student('Katrina',21,34.5,'5','English') s.speak() #利用示例对象调用speak()方法如何引用外部类
  • 88. 第十章 Python 标准库概览常用模块介绍
  • 89. os 模块提供了很多与操作系统交互的函数 os.getcwd() ,获得当前工作目录 os.system(cmd) ,相当于在控制台运行命令 shutil 模块 针对日常的文件和目录管理任务块提供了一个易于使用的高级接口 shutil.copyfile('F:/test.txt','E:/test.txt') #拷贝文件,将F盘test.txt拷贝到E盘 shutil.move('F:/result','E:/taikang') #将F盘下的result文件夹移动到E盘的taikang目录下 glob 模块提供了一个函数用于从目录通配符搜索中生成文件列表 glob.glob('F:/test/*.wav') #返回F:/test目录下所有后缀名为wav的文件 sys 模块,常用于传参 在命令行执行 python demo.py 1 2 3 那么print(sys.argv) 的结果为 [demo.py,1,2,3] re 模块为高级字符串处理提供了正则表达式工具,对于复杂的匹配和处理,正则表达式提供了简洁、优化的解决方案常用模块介绍
  • 90. re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest') #查找字符串中所有符合规则的字符串 math 模块为浮点运算提供了对底层C函数库的访问 math.cos(math.pi / 4.0) math.log(1024,2) random 提供了生成随机数的工具 random.choice(['a','b','c']) #随机获取某列表中的一个数 random.randrange(6) #获取 0到5之间的一个整数值 random.sample(range(100), 10) #获取0到100之间的10个整数 有几个模块用于访问互联网以及处理网络通信协议,如: (1)urllib.request, 处理从 urls 接收的数据的 from urllib.request import urlopen obj = urlopen('网址') (2)smtplib,收发电子邮件 server = smtplib.SMTP('服务器地址') server.sendmail('','') datetime 模块为日期和时间处理同时提供了简单和复杂的方法,如下:
  • 91. from datetime import date now = date.today() birth = date(1992,3,4) age = now - birth print(age.days) #打印自己的天数 以下模块直接支持通用的数据打包和压缩格式: zlib, gzip, bz2, zipfile 以及 tarfile,如下: import zlib s=b'jadhfsdkjghfdjghjdsfkghdjfkfghdjfhsdgsfdjkkkkkkkkkkkkk kkkkkkkkkkgbfhsfd' z = zlib.compress(s) len(s) #71 len(z) #49 a = zlib.decompress(z)#解压 len(a) #71
  • 92. 到此结束!