python基础培训
培训内容
• python概述
• python基础
• python对象
• 条件和循环
• 函数
• 模块
• 面向对象编程
• 文件相关
• 异常
• 实验
什么是Python
• Python
• 优雅而健壮的编程语言
• 注重如何解决问题
Python的特点
• 高级
• 面向对象
• 可移植性
• 可扩展性
• 可嵌入性
• 健壮性
• 解释性
• 易学易读易用
为什么是python
• 简单易学,功能丰富
• 与c、c++、java相比
• 与其他的脚本语言相比
– perl:对符号语法的过度使用
– javascript:通常嵌入到html网页,依赖浏览
器
下载和安装
Hello World
• 第一个Python程序
– print “Hello World!”
• 命令行
• 编辑器
Python的语法特色
• 注释 (#)
• 继续 (\)
• 多个语句构成的代码组 (:)
• 缩进分隔
• 模块
• help
培训内容
• python概述
• python基础
• python对象
• 条件和循环
• 函数
• 模块
• 面向对象编程
• 文件相关
• 异常
• 实验
Python的基础—变量
• 变量的赋值
– astring = “hello”
–增量赋值:x += 1 (开始)、
–多重赋值:x = y = z = 1
–多元赋值:x, y, z = 1, 2, “hello”
( x, y, z) = (1, 2, “hello”) 提高可读性
Python的基础—标识符
• 第一个字符必须是字母或下划线_
• 其他字符可以是字母、数字或下划线
• 大小写敏感
• 关键字:
Python的基础—无处不在的引用
• 变量的定义:在第一次赋值时自动声明
• Python是一种动态类型的语言
• 无处不在的引用:
– Python中的每个值(而不是变量)都有一个唯一的
标识
– 任何变量名之间的赋值都是引用的赋值
• x = 3
• y = x
• z = y
培训内容
• python概述
• python基础
• python对象
• 条件和循环
• 函数
• 模块
• 面向对象编程
• 文件相关
• 异常
• 实验
Python的对象
• 任何类型的值都是一个对象
• Python对象的三个特性
– 身份:用id()查看
– 类型:用type()查看
– 值
Python数据类型—概述
• 标准类型
– 数字
• Integer 整型 Boolean 布尔型 Long integer 长整型
• Floating point real number 浮点型
• Complex number 复数型
– String 字符串
– List 列表
– Tuple 元组
– Dictionary 字典
Python数据类型—概述(续)
• 其他的内建类型
– Type 类型
– Null对象
–文件
– Set 集合
–函数
–模块
–类
Python数据类型—标准类型操作符
• 对象值的比较
• 对象身份比较
– >>>x=y=
– >>>x=;y=
– >>>x=;y=2+
– >>>x is y
• 布尔类型操作符
Python数据类型—标准类型内建函数
• type()
• cmp()
– obj1<obj2 返回负数
– Obj1>obj2 返回正数
– Obj1=obj2 返回0
• str()和repr()以及’ ’操作符
– 以字符串的方式获得对象的类型、内容、数值等属性
• eval()
Python数据类型—可变对象和不可变对象
• 不可变对象:对象创建之后,其值不能更新
• 可变对象:对象创建之后,其值可以更新
培训内容
• python概述
• python基础
• python对象
• 条件和循环
• 函数
• 模块
• 面向对象编程
• 文件相关
• 异常
• 实验
数字类型
序列类型
字符串
列表
元组
映射类型
字典
Python数据类型—数字
• 整型:32位机器上,标准整型的取值范围是
-231——231-1
• 布尔型:只有两个值的整型(0和1),开
始支持布尔型
• 长整型:标准整型的超级,能表达的数值仅与机
器支持的内存大小有关系。23434333L
• 双精度浮点型:占8个字节(64位),其中53位表示
底,11位表示指数,一位表示符号。
-77.,,-23,float(12)
• 复数:a=+8j; 表示实部,表示
虚部
数字类型的操作符
• 支持不同的数字
类型相加—强制
类型转换
数字类型的操作符(续)
算数操作符 功能
expr1**expr2 幂运算
+expr 结果符号不变
-expr 对结果符号去负
expr1 * expr2 表达式1乘以表达式2
expr1 / expr2 表达式1除以表达式2(传统除或真正除)
expr1 // expr2 表达式1地板除以表达式2(加入)
expr1 % expr2 表达式1对表达式2取余(模除)
expr1 + expr2 加
expr1 - expr2 减
数字类型的操作符(续)
• 位操作符(只适用于整型)
位操作符 功能
~num 单目运算,对数的每一位取反
num1 << num2 num1右移num2位
num1 >> num2 num1左移num2位
num1 & num2 num1与num2按位与
num1 ^ num2 num1异或num2
num1 | num2 num1与num2按位或
数字类型的内建函数
• 转换函数:将其他类型的数字转换为相应类型
– int()、long()、float()、complex()
– bool() 开始
• 功能函数:
– abs(num) 绝对值
– coerce(num1,num2) 将num1和num2转换为同一类
型,然后以一个元组的形式返回
– divmod(num1,num2) 获得商和余数的元组
– pow(num1,num2,mod=1) 指数运算
– round(flt,ndig=1) 对浮点型进行四舍五入运算
数字类型的相关模块
模块 介绍
decimal 十进制浮点运算类(Decimal)
math/cmath
标准C库数学运算函数。常规数学运算在
math模块,复数运算在cmath模块
random 多种位随机数生成器
序列类型—字符串、列表、元组
• 序列:成员有序排列,可以通过下标访问其成员
• 字符串:‘hello’ “hello” ’’’hello’’’
• 列表:[2,4,’python’]
[, , ‘python’, [1, 3, “hello world”]]
• 元组:(, 6, “computer”)
(4, (“hello”, 9), [, , 8])
• 序列有相同的访问方式:
培训内容
• python概述
• python基础
• python对象
• 条件和循环
• 函数
• 模块
• 面向对象编程
• 文件相关
• 异常
• 实验
数字类型
序列类型
字符串
列表
元组
映射类型
字典
序列类型的操作符
• 成员关系操作符:in, not in
• 连接操作符:+
• 重复操作符:*
• 切片操作:[ ] [:] [::]
0<index<len(sequence)-1
序列类型的内建函数
• 类型转换函数
函数 含义
list(iter) 把可迭代对象转换为列表
str(obj) 把obj对象转换为字符串
unicode(obj) 把对象转换为unicode字符串
tuple(iter) 把一个可迭代对象转换成元组
序列类型的内建函数(续)
函数名 功能
enumerate(iter)
接受一个可迭代对象为参数,返回一个enumerae
对象,该对象生成由每个元素的index值和
item值组成的元组
len(seq) 返回seq的长度
max(iter, key=nune) 返回最大值
min(iter, key=none) 返回最小值
reversed(seq)
接受一个序列作为参数,返回一个以逆序访问的
迭代器
zip()
接受n个序列类型对象参数,返回一个列表,该
列表的每个元素都是一个元组,第一个元组是
每个参数的第一个元素所组成的,以此类推
培训内容
• python概述
• python基础
• python对象
• 条件和循环
• 函数
• 模块
• 面向对象编程
• 文件相关
• 异常
• 实验
数字类型
序列类型
字符串
列表
元组
映射类型
字典
字符串类型
• 字符串的创建和赋值
• 访问字符串
• 改变字符串(字符串是不可变的)
• 删除字符或字符串
字符串类型的操作符
• 序列类型通用的操作符 in, not in, +,等
• 只适用于字符串的操作符
– 格式化操作符 %
格式化字符 转换方式
%r 优先用repr()函数进行字符串转换
%s 优先用str()函数进行字符串转换
%d / %i 转换成有符号十进制数
%u 转换成无符号十进制数
%o 转换成无符号八进制数
%x / %X 转换成无符号十六进制数(x/X代表转换后的大小写)
%e / %E 转换成科学计数法
%f / %F 转换成浮点数
%% 输出%
字符串类型的内建函数
• 标准内建函数 cmp()
• 序列类型函数 len()、max()、min()、enumerate()、zip
()、sorted()
• 字符串类型函数
– raw_input() 提示用户输入并将这个输入返回
– str() 返回字符串
– unicode() 返回unicode字符串
– char() 用0-255内的整型为参数,返回对应的字符
– unichr() 同char() ,但返回的是unicode字符
– ord() 以一个字符为参数,返回对应的ASCII数值或unicode数值
字符串类型的相关模块
• string模块:字符串模块相关函数和工具
• re:正则表达式
• struct:字符串和二进制之间的转换
• crypt:单方面加密
• ……
培训内容
• python概述
• python基础
• python对象
• 条件和循环
• 函数
• 模块
• 面向对象编程
• 文件相关
• 异常
• 实验
数字类型
序列类型
字符串
列表
元组
映射类型
字典
列表类型
• 创建列表并赋值
• 访问列表的元素及更新
• 删除列表中的元素或列表本身
列表类型操作符
• 标准类型操作符
• 序列类型操作符
• 内建函数
– cmp()、len()、max()、min()、reversed()
– sorted()、enumerate()、zip()
– sum()
– list()、tuple()
列表类型内建函数
• (obj) 向列表中添加一个对象obj
• (obj) 返回一个对象obj在列表中出现的次数
• (obj) 把序列obj中的内容添加到列表中
• (obj,i=0,j=len(list)) 返回list[k]
• (index,obj) 在index位置插入对象obj
• (index=-1) 删除并返回指定位置的对象,默认是
最后一个对象
• (obj) 从列表中删除对象obj
• ()
• ()
列表类型的特性
• 列表有容器和可变特性
• 堆栈—后进先出
– () 向队列尾部添加
– () 从队列尾部删除
• 队列—先进先出
– () 向队列尾部添加
– (0) 从队列头部删除
培训内容
• python概述
• python基础
• python对象
• 条件和循环
• 函数
• 模块
• 面向对象编程
• 文件相关
• 异常
• 实验
数字类型
序列类型
字符串
列表
元组
映射类型
字典
元组类型
• 与列表很相似,但元组是不可变的
• 创建一个元组并赋值
• 访问元组中的值
• 更新元组:对现有元组构造一个新的元组
• 移除元组:del
• 元组的操作符和内建函数
元组的特性
• 不可变性对元组的影响
• 元组中的可变对象依然可变
• 所有的多对象的、逗号分隔的、没有明确用符号
定义的,都默认为元组
• 单元素元组
• list()和tuple() 元组和列表的相互转换
Python对象的深拷贝和浅拷贝
• 例如:
– >>>person = ['name', ['savings', ]]
– >>>hubby = person[:] # slice copy
– >>>wifey = list(person) # fac func copy
– >>>[id(x) for x in person, hubby, wifey]
• 浅拷贝
• 深拷贝
– Import copy
– >>>hubby = person[:] # slice copy
– >>>wifey = (person)
• copy模块:copy()浅拷贝,deepcopy()深拷贝
序列类型小结
• 操作符
– in, not in, +, *, [], [:], [::]
• 内建函数
– list, str, unicode, tuple, enumerate, len, max, min,
reversed, zip, sorted
– raw_input, char, ord
– sum
• 模块
– string, copy, re
培训内容
• python概述
• python基础
• python对象
• 条件和循环
• 函数
• 模块
• 面向对象编程
• 文件相关
• 异常
• 实验
数字类型
序列类型
字符串
列表
元组
映射类型
字典
映射类型—字典
• {key1:value1, key2:value2, key3:value3, …}
• 创建字典和赋值
– dict1={} 创建一个空字典
– dict2={’name’:’joe’,’age’:30}
– dict()方法
• 访问字典中的值
– 通过键访问相应的值 dict2[’name’]
– 访问字典的键 (),返回一个列表
– 访问字典的值 (), 返回一个列表
– 遍历一个字典
– 执行中字典的键不能被改变
• 删除字典元素和字典 del dict2[name] del dict2
字典类型的操作符
• 标准类型操作符
• 映射类型操作符
– 字典键查找操作符[ ]
– (键)成员关系操作符 in, not in
字典类型的内建函数
• type() str()
• 比较函数 cmp()
字典类型的内建函数
• dict([container]):创建字典的工厂函数。如果提
供了容器类,就用其中的条目填充字典,否则创
建一个空字典
• len(): 返回键值对的数目
• hash(): 判断某个对象是否可以作为字典的键
• 不可变类型是可哈希的
字典类型的内建函数(续)
方法名字 操作
() 删除字典中的所有元素
() 返回一个字典的副本(浅拷贝)
(seq, val=None) 创建并返回一个新的字典,以seq中的元素为键,val为值
(key, d=none) 返回键key对应的值,若该键不存在,返回d
() 返回一个包含字典中键、值对元组的列表
() 返回一个包含字典中键、值对元组的列表的迭代子
() 返回键列表的迭代子
() 返回值列表的迭代子
() 返回字典中键的列表
() 返回字典中值的列表
(key,default) 与get相似,但是将键值对弹出
() 与[]类型,若键不存在,则使用默认值
(dict2) 将dict2的键值对添加到字典dict
培训内容
• python概述
• python基础
• python对象
• 条件和循环
• 函数
• 模块
• 面向对象编程
• 文件相关
• 异常
• 实验
条件表达式
• if语句
– If expression:
expr_true_suit
• else语句
– if expression:
expr_true_suit
– else:
expr_false_suit
• elif语句(即else-if)
– if expression:
expr_true_suit
– elif:
expr_true_suit
– else:
none_of_the_above_suit
• 三元操作符 x if x<y else y
循环表达式
• while语句
– while expression:
suit_to_repeat
• for语句
– For iter_var in iterable:
suit_to _repeat
– 通过序列项迭代
– 通过序列索引迭代(range())
– 使用项和索引迭代 (enumerate())
– 与序列相关的内建函数:sorted、reversed、
enumerate、zip
循环表达式
• break语句
• continue语句
• pass语句
• while-else语句或for-else语句
迭代器和iter()函数
• 迭代器:有一个next()方法的对象
– StopIteration异常
– reversed() 返回一个反向迭代器
– enumerate()
• 使用迭代器
– iter()
– next()
– for循环
培训内容
• python概述
• python基础
• python对象
• 条件和循环
• 函数
• 模块
• 面向对象编程
• 文件相关
• 异常
• 实验
函数
• 创建函数 def function_name():
• 函数的参数
• 函数的返回值
• 调用函数
• 局部变量
• global语句
• 文档字符串
培训内容
• python概述
• python基础
• python对象
• 条件和循环
• 函数
• 模块
• 面向对象编程
• 文件相关
• 异常
• 实验
模块
• 什么是模块—实现代码重用
• 导入模块
– import
– from … import … 导入指定模块的属性
• sys模块介绍
– 包含了与python解释器和它的环境有关的函数
– exit、argv、path
• time模块介绍
– () 获取当前时间(整数形式)
– () 当前时间的struct_time形式
– () 当前时间的字符串形式
– () 由struct_time得到当前的秒数
模块(续)
• os模块介绍 包含普遍的操作系统功能
– 指示正在使用的平台
– () 获得当前python脚本的工作目录
– () 读取环境变量
– () 返回指定目录下的所有文件和目录名
– () 删除一个文件
– () 用来运行shell命令
– 根据当前操作系统,给出目录分隔符
– () 检验给出的路径是不是文件
– () 检验给出的路径是不是目录
模块(续)
• 模块的名字 __name__
– if __name__ == '__main__':
• 创建自己的模块
• dir() 列出模块定义的标识符
培训内容
• python概述
• python基础
• python对象
• 条件和循环
• 函数
• 模块
• 面向对象编程
• 文件相关
• 异常
• 实验
面向对象编程
• 类:一种数据结构,封装了属性和方法
• 类的定义
– class ClassName(object):
'class documentation string' #文档字符串
class_suite #类体
• __init__函数:类的构造器
• 实例化
– 第一步:创建实例对象
– 第二步:检查是否实现了__init__方法
面向对象编程
• self:相当于this指针
• 绑定
–方法仅仅是类内部定义的函数
–方法只有在其所属类拥有实例时,才能被调用
• 类的属性与实例的属性
–类的属性:仅与被定义的类绑定(包括数据属性
和方法属性)
–实例属性:独立于其他的类或实例,仅拥有数
据属性
面向对象编程
• 成员的访问类型
– 公有,私有?
– _XXX 不允许from myModule import *导入
– __XXX 类的私有成员
– __XXX__ 系统定义的名字
• 继承
– 实现代码的重用
– __init__方法中调用基类的该方法,并传递self参数
– 子类会覆盖父类同名的函数
• 多重继承
典型的python文件结构
培训内容
• python概述
• python基础
• python对象
• 条件和循环
• 函数
• 模块
• 面向对象编程
• 文件相关
• 异常
• 实验
文件相关
• 打开文件
– open(name,mode)、file(name,mode)
– 打开文件失败时会产生一个IOError异常
文件模式 操作
r 以读方式打开
w 以写方式打开(必要时清空)
a 以追加模式打开(从EOF开始,必要时创建新文件)
r+ 以读写模式打开
w+ 以读写模式打开(参见w)
a+ 以读写模式打开(参见a)
rb 以二进制读模式打开
wb 以二进制写模式打开(参见w)
ab 以二进制追加模式打开(参见a)
rb+ 以二进制读写模式打开(参见r+)
wb+ 以二进制读写模式打开(参见w+)
ab+ 以二进制读写模式打开(参见a+)
文件相关
• 写文件
– write(str) 向文件写入字符串
– writelines(seq) 列表或元组为参数,将其写入文件
• 读文件
– read() 读取内容到字符串
– readline() 读取打开文件的一行
– readlines() 读取所有行,并作为列表返回
• 文件内移动
– seek(off,whence=0) 在文件中移动文件指针,从whence偏移off
指针(whence=0文件开始,1代表当前位置,2代表文件末尾)
– tell() 返回在文件中的位置
• os模块
培训内容
• python概述
• python基础
• python对象
• 条件和循环
• 函数
• 模块
• 面向对象编程
• 文件相关
• 异常
• 实验
异常
• 异常:程序出现了错误而在正常控制流意外采取
的行为
• python中常见的异常
– NameError: 尝试访问一个未申明的变量
– ZeroDivisionError: 除数为0
– SyntaxError: python解释器语法错误
– IndexError: 请求的索引超出序列范围
– KeyError: 请求一个不存在的字典关键字
– IOError: 输入/输出错误
– AttributeError: 尝试访问未知的对象属
检测和处理异常
• try-except语句
• 带有多个except的try语句:
检测和处理异常
• 处理多个异常的except语句
• 捕获所有异常
检测和处理异常
• else子句:在try的范围内没有检测到异常时,执
行else字句
• finally字句:无论异常是否发生,是否捕捉到异
常,都会执行的代码
• try-finally子句:目的不是捕获异常,而是用来维
持一致的行为
培训内容
• python概述
• python基础
• python对象
• 条件和循环
• 函数
• 模块
• 面向对象编程
• 文件相关
• 异常
• 实验