Python 入门
林立宇
地点:复旦大学张江校区
时间: 2019/10/8
目录
• Python 环境配置
• 基本数据类型
• 语句
• 函数
•类
• 模块
• 参考文献
Python 环境配置
• 编译环境
• 从源文件安装:
• [Link]
• Ubuntu: 默认已安装 python3 环境,若有需要,可通过 sudo apt-get install python3.x
安装特定版本
• Anaconda
• [Link] 下载 anaconda (默认为 python3.7 )
• 在终端输入 conda create –n xxx python=3.x 可以获得特定 python 版本的子环境
• 激活子环境: conda activate xxx
• 退出子环境: conda deactivate
• 包的安装工具: pip install xxx
• Ubuntu : sudo apt-get install python-pip
• Anaconda :自带
• 查看版本和途径: pip --ver sion
Python 环境配置
• 常见编辑器
• Vs code: [Link]
• Pycharm: [Link]
• Atom: [Link]
• Jupyter ( Anaconda 已经集成) :
• 安装: conda install –c conda-forge jupyterlab 或者 pip install jupyterlab
• 使用: jupyter notebook
• 本次课程: Anaconda + vscode/jupyter
• 请注意 vscode 中 terminal 类型和 setting 中的路径应当保持一致
• 课程代码: [Link]
Python 基础知识
• 文件扩展名: [Link]
• 指定编码格式: #coding=utf-8
• 运行指令: python3.7 [Link]
• 注释: #
• vscode 中快捷键为: “ ctr+/”
• 换行:
• 以换行代表语句的结束
• 可以使用括号, \ ,””” xxx“””(‘’’xxx‘’’) 进行跨行编程
• 缩进:
• 缩进代表一个功能模块的结构,一般 2/4 字符缩进较为美观,而 4 字符缩进更为常见;
注意整个文件的缩进应保持一致 ; vscode 中快捷键为: “ ctr+]”( 向左 ), “ctr+
[”( 向右 )
Python 基础知识
• 键盘输入
• s = input(“ 提示语句” )
• 输出
• print(v1, v2)
• 存在多个输出时,用逗号隔开
• 每一个输出的值应当保持类型一致
• 默认以换行符结束,可以通过关键字
end 修改
• 默认以空格分隔对象,可以通过 sep
修改
如:
print(1, 2, 3, 4, sep=“,”,
end=“.”)
基本数据类型: Number
• 定义: =
• 删除: del()
• 类型转化:
• int(x), float(x), complex(x, y)
• 运算符:
• *( 乘 ) , /( 除 ) , //( 整数除 ), %( 取余 ) , +
(加) ,
-( 减 ) , **( 乘方 ) , +=…
• 函数:
• pow(x, y), abs(), sum(), round() …
• math 模块:
• [Link](), [Link](), [Link](),
[Link] t(), [Link]()…
• cmath 模块:
• [Link] t(), [Link]()…
基本数据类型: list( 列表 )
• 定义:
• 利用 [, ] 定义的数据结构
• 序列操作:
• 索引:通过下标访问
• 切 片 : a[n:m:k] , 表 示 列 表 a 中 从 n
到 m 中以 k 为步长获得的子集
• 相加:序列拼 接
• 相乘: 重 复序列 n 次,一般用 于 序列 初
始化
• 常用函数:
• 成员资格检查 : in
• 列表长度: len()
• 最大值: max()
• 最小值: min()
基本数据类型: list( 列表 )
• 列表方法: dir(list)
• append() :列表拼接
• extend() :合并列表
• sor t/sor ted([key[, rever se]]) :排序
• clear() :清空列表
• copy() :复制列表
• count() :计算指定元素出现次数
• index() :返回指定值第一次出现的索引
• inser t() :插入元素到指定位置
• pop() :根据下标删除 并返回元素
• remove() :删除指定 元素
• rever se() :列表反转
基本数据类型: tuple( 元组 )
• 定义:
• 由 (, ) 定义的,不可改变元素值的数据
结构
• 定义方式:
• 直接由逗号隔开: a = 1, 2, 3
• 圆括号 + 逗号: a = (1, 2, 3)
• 利用关键字定义: a = tuple([1,
2, 3])
• 元素访问方式:
• 下标访问
• 加法:合并集合称为新的集合
• 乘法:返回重复大小的集合
基本数据类型: str( 字符串 )
• 定义:
• 由单(双)引号定义的字符 串:
‘ abcde”fg”hg’, “abc’de’fg”
• 由 r 定义的强字符串: r‘abs\tde\n’
• 可以通过索引访问,但不能用切片进行赋值
等操作
s1 = “hello world!”
s2 = s1[3:-1] (正确)
s1[2] = “a” (错误)
• 可以通过” +” 合并字符串
• [Link]() : str 中 以 {} 为 占 位 符 , 并 在
format() 中 查 找 对 应 的 目 标 进 行 替 换 , 如 无
指定键,默认 按照出现的顺序排序
• 检 查 子 串 是 否 存 在 : in , 存 在 返 回 True ,
否则返回 false
基本数据类型: str( 字符串 )
• 方法: dir(str)
• encode(): 指定编码方式
• split([sep[, max]]): 分割字符串
• strip([char s]): 去除字符串两端字符
join(list): 合并列表为字符 串
• find(sub[, s[, e]]): 在指定区间查 找子
串并返回第 一个索引, 不存在则返回 -1
• index(sub[, s[, e]]): 在指定区间查 找子
串并返回第 一个索引, 不存在则返回 -1
• count(sub[, s[, e]]): 返回字符串中子串
的个数
• replace(old, new[, max]): 替换子串
• center(width[, fillchar]): 扩展字符串
为自定大小,居中并以指定字符 填充空间
• lower(), upper(), swapcase(): 改变大
小写
• …
基本数据类型: dict( 字典 )
• 定义:由键和值组成的一种无序的动态数
据结构
• 定义方式:
• 以 {key: value } 的格式定义
• 使用键值对 创建
• 使用函数 dict 从其他映射创建
• 常见方法:
• 返回字典长度: len()
• 访问键对应的 元素: d[k]
• 添加键值对: d[k] = v
• 删除键对应的 元素: del d[k]
• 成员变量检测 : k in d
基本数据类型: dict( 字典 )
• 字典方法: dir(dict)
• clear() :清除字典
• copy() :复制字典
• fromkeys(seq[, val]) : 返 回 键 为 seq 的 字
典
• get(key[, default]) : 返 回 指 定 键 对 应 的
值
• items() :以 (key, value) 的形式返回字典
• keys() :返回所有键
• pop(key[, d]) :删除并返回键对应的值
• popitem() : 随 机 删 除 项 , 并 以 (key,
value) 返回
• setdefault(key[, default]) : 检 查 键 是 否
存在,不存在则添加新键
• update(other) :利用其他字典更新字典
• values() :返回值
基本数据类型: set( 集合 )
• 定义:一种无序不重复的数据结构
• 由 set 定义(可用 于创建空集合)
• 由花括号 {} 定义(注意 与列表定义的区
别)
• 方法与运算
• add() :增加对象
• pop() :随机移除对象
• remove() :移除指定对象
• union() :合并集合,并返回新的集合
• update() :根据给定集合更新当前集
合
• clear() :清空集合
• copy() :复制集合
• …
课堂作业
• 将一个字符串反向输出,注意空格和可能存在的转义字符。
input: hello world!\n
output: n\!dlrow olleh
• 输入一个元素为二维元组的列表,按照列表的第二个元素从大到小进行排序。
input: [(7, 3), (4, 2), (1, 9), (3, 2), (5, 6)]
output:[(4, 2), (3, 2), (7, 3), (5, 6), (1, 9)]
• 去除列表中重复的元素,并按照从小到大排序。
input: [2, 5, 3, 9, 5, 2, 2, 6, 7]
output: [2, 3, 5, 6, 7, 9]
语句
• 条件语句: if
组成:关键词 + 条件语句
关键词: if, elif, else
条件语句:使用 not, and, or 等词连接,
优先级 not > and > or
条件语句之后用” :” 表示语句的开 始
语句嵌套时以缩进作为语句块的区分
is 与 == 之间的区别: is 判断地址是否相
同,
== 判断值是否相同
• 断言: asser t
判断条件是否满足,不满足则抛 出异常
语句
• for 循环
• 形式: for 条件语句
• 条件语句:
• item in [list]
• i in range([star t, ] stop [, step])
• i, item in enumerate([list])
• 用于列表定义:
• l = [(a, b) for a in l1 for b in l2 if a+b >c]
• l = [a+b for a, b in zip(l1, l2) if a+b >c]
• 中止循环: continue
• 结束循环: break
语句
• while
语句组成:关键字 + 循环体
可用于循环次数可变的情况
可引入 break 、 continue 等关键
词控制
• tr y
关键词: tr y except finally
tr y: 执行的语句块
except [type] :根据执行抛出的异
常类型执行对应的语句,可以指定 异
常类型
finally: 无论是否抛 出异常,均执行
作用:利用 抛出的异常分析程序存在
的原因,同时增加程序的稳定性等
函数
• 定义:完成特定功能的程序块
• 形式: def func(v1, v2, … ):
• 文档:紧跟声明之后 的字符串,进行解释说明
• 调用:
• 参数显式赋值: func(v1=x1, v2=x2,…)
• 参数隐式赋值: func(x1, x2, …)
• 参数可带默认 赋值,声明时放在无默认赋值的变
量之后,调用时可以省略赋值操作
• 定义: def func2(x, y=1)
• 调用: y = func2(x)
函数
• 定义:完成特定功能的程序块
• 参数收集:以元组 / 字典的形式进行参数传递,
有利于代码简洁
• def func(p1, *parms, p2) 以元组的形式收
集参数
调用: y = func(x, v1, v2, v3, p2=x2)
函数内: p1 = x, parms = (v1, v2, v3),
p2 = x2
• def func(p1, *parms1, **parms2) 以 字 典
的形式收集参数,格式为 { 参数名:参数值 }
调 用 : y = func(x, v1, v2, k1=x1,
k2=x2)
函数内: p1 = x1, parms1 = (v1, v2) ,
parms2 = {“k1”:x1,
“k2”:x2 }
函数
• 参数
• 区分传递的参数是否属于可变类型
(字典,列表)
• 对于可变类型参数,函数内部改变数
值,将影响调用原对象中的函数值,
这种影响不受重命 名的影响
• 返回值
• 返回值和调用值个数保持相同,对于
不必要的参数,可以用 _ 表示
def func(…): … return x1, x2, x3
_, x, _ = func(…)
• 作用域
• 变量的作用域一般处于所属的函数块
• 可 以 用 global 关 键 字 声 明 引 用 全 局
变量
类
• 定义:描述具有相同属性和方法的
集合
• 形式: class A:
• 组成:变量、方法
• 对象:由定义创建的数据结构 实例
• 继承:新定义的类对已存在的类的
属性以及方法的一种复用
• 基类(父类):被继承的对象
• 派生类(子类): 继承基类的类
• 单继承: class A(object)
• 多继承: class B(base1, base2)
• 调用父类函数: super()
类
• 变量:
• 类变量:在函数体外定义的变量,
为所有实例化的对象公用;通
过”类名 .” 进行引用; 实例化
后可通过” .” 进行引用
• 成员变量:每个对象 独立拥有的
变量,利用 self 进行修饰;在
类声明内部通过” self.” 引用,
在实例化的对象中通过” .” 进
行引用
• 私有变量:利用” __” 修饰的
变量,默认不能直接访问,但可
以通过特殊的方式获取;为保持
良好的封装性,一般建议为其定
义读写的函数。
类
• 方法
• 方法:对类变量进行运算的功能
块,利用 self 进行修饰
• 隐藏方法:利用” __” 进行修饰
的方法,理论上不可直接访问,
但与隐藏变量 一致,可以通过特
殊的方式进行访问
• 方法重写:继承中,对与父类相
同名字的方法进行重新定义,调
用时,利用 super() ,或者直接
引用父类调用进行区分
类
• 例化
• a = A(p1, p2, …)
• 例化的过程中自动调用方法” __init__” 传递参数,对变量进行赋值
• 引用成员变量和方法可通过” .” 操作实现,对于方法,可按照函数的调
用方式进行操作
• 对于隐藏结构,可以通过” ._ 类名 __ 结构名”调用(一般不推荐)
模块
• 模块操作:
• 导入整个模块: impor t module _name
• 导入模块中特定的方 法:
from module _name impor t func
• 查看模块的方 法: dir(module _name)
• 查看模块函数功能: help(func)
• 随机数: impor t random
• [Link] :生成 [0, 1) 区间内均
匀分布的随机数
• [Link] :生成 [a, b] 区间内的
随机整数
• [Link] :打乱数列
• …
模块
• 时间: impor t time( 默认以秒为单位 )
• [Link]() :引入休眠时间
• [Link]() :返回系统时间
• [Link] f _counter() :精度最高,
分辨率为时钟周期,计算 sleep 耗时
• [Link] _time() :不计算
sleep 消耗的时间
• …
模块
• 正则表达式: impor t re
• 作用:对字符 串进行匹配,并做进一步的
Method
操作 compile(pattern[, flags])
创建模式
• 组成: [Link](pattern, object) search(pattern, string[, flags])
查找模式
• Pattern: match(pattern, string[, flags])
在字符串开头的匹配模式
• 通配符: .
split(pattern, string[, maxsplit=0])
• 转义字符: \ 根据模式分割字符串
findall(pattern, string)
• 字符集: [^-] 匹配所有字符串,并以列表的格式返回
sub(pat, repl, string[, count=0])
• 二选一和子模式: | () 字符串替换
escape(string)
• 可选模式和重复模式: ? * + {m, n} 对特殊字符进行转义
• 字符串开头和结尾: ^ $
模块
• group:
• group([group1, …])
获取与给定子模式匹配的子串
• star t([group])
返回选定子串的起始位置
• end([group])
返回选择子串的终止位置
• span([group])
返回选定子串的区间
• 替换函数中的子串:
• 利用转义序列 实现子串的选取:
[Link](pat, r ” <em>\
1<em>”, str)
文件操作
• 文件的读写
• 打开文件: f = open(filename,
mode)
• Mode: r( 只读 ), w( 只写 ), x( 创
建文件写 ), a( 追加 ), b( 二进制 ),
t( 文本模式 ), +( 更新 )
• 读取文件: [Link]([si ze])
• 按行读取: [Link]([si ze])
• 写入文件: [Link](str)
• 按行写入: [Link](list[str])
• 关闭文件: [Link]()
• 通过迭代器读写:
with open(fname, mode) as f
文件操作
• pickle: impor t pickle ,扩展名为” .
pkl” , 一 般 用 于 存 储 任 意 类 型 , 可
用 于 python 语 言 内 部 不 同 程 序 间 文
件的操作
• 存: [Link](obj, file)
• 取: [Link](file)
文件操作
• csv: impor t csv ,扩展名
为” .csv” ,以表格的形式保存列表或字
典
• 列表: [Link](f )
• 字典: csv. Dict Writer(f, header)
• 读: [Link](f )
文件操作
• yaml: impor t yaml , 扩 展 名
为” .yaml” ,常用于写配置文件
• 存: [Link](obj, file)…
• 取: [Link](file)…
• Yaml 规范:
• 每 一 次 dump 只 能 保 存 一 种 类 型 , 多 种
类型需要插入分隔符” ---”
• 以空格的缩进方式区分层次,不能使用
Tab
• 表示方式:字 典:” :” ,列表:” -”
• 更多细节见参考文献 4
实例: argparser
实例: progressbar
参考文献
• 1. Python 菜鸟教程: https://
[Link]/python3/[Link]
• 2. 《 python 基础教程 第 3 版》
• 3. [Link]
• 4. [Link]