Python总结
一、Python 介绍
1.1 Python 定义
1.2 Python 历史
1.3 Python 特性
1.4 python 解释器的几种实现版本
1.5 Python 编程的基本方式
二、Python 开发环境
2.1 搭建Python 开发环境
2.1.1 官网地址
2.1.2 Python 运行环境的安装与配置
2.1.3 交互式开发环境
2.1.4 setuptools
2.1.5 IDE
2.2 Python 自省的便利
2.3 os (*) / sys (*) 模块
三、Python 基本元素
3.2 常量、变量
3.3 数据类型
3.3.1 数值
3.3.2 字符串
• 字符串格式化
3.3.3 复数
3.4 类型转换
3.5 其他数据类型
3.6 逻辑行与物理行
3.7 缩进
3.8 运算符与表达式
四、Python 容器
4.1 字符串 str
4.2 列表 list
4.3 元组 tuple
4.4 字典 dict
4.5 集合 set
4.6 练习
五、Python 控制流
5.1 Python 控制流简介
5.2 if、elif 与else比较
5.3 while循环
5.4 for迭代
5.5 break、continue、else
5.6 推导式
5.7 综合练习
六、Python 函数
6.1 什么是函数
6.2 必选参数
6.3 默认参数
6.4 可变参数/包裹位置参数
6.5 关键字参数/包裹关键字参数
6.6 局部变量、全局变量
6.8 匿名函数
6.9 练习
------------------------------------------------------
一、Python 介绍
1.1 Python 定义
解释型
面向对象
带有动态语义
高级程序设计语言
解释型与编译型
计算机无法理解高级语言,也就不能直接执行高级语言,必须将其翻译成机器语言,才能运行高
级语言编写的程序。
∙ 翻译的方式有两种:编译、解释,两种方式只是翻译的时间不同
∙ 编译:在程序运行前翻译,通过专门的编译器编译成机器语言文件,比如exe,运行时直接执行
编译后的文件,翻译只需一次,因此执行效率高。(javac 是 java 的编译器,.java 文件编译为
.class文件后,再运行)
∙ 解释:在程序运行时翻译,每个语句都是执行时才翻译,也需要通过专门的解释器。解释型语
言每执行一次都要翻译一次,因此执行效率比较低。(边执行边翻译)
面向对象
∙ Python 语言中,一切皆对象
∙ Python 语言的一个重要特点就是其对象模型的一致性。Python 解释器中的任何数值、字符
串、数据结构、函数、类、模块等都待在它们自己的“盒子”里,这个“盒子”就是 Python 对
象。
∙ 每一个对象都有一个与之相关的类型(比如字符串或函数)以及内部数据。在实际工作中,这
使得 Python 语言变得非常灵活,因为即使是函数也能被当做其它对象那样处理。
动态语义
∙ 只有在运行时,才确定变量的类型
1.2 Python 历史
Guido van Rossum(吉多∙范罗苏姆)
1989年圣诞创立 Pytnon
1.3 Python 特性
∙ 解释型语言
∙ 动态类型:在赋值时确定变量类型
∙ 强类型与弱类型
∙ 开发效率高
∙ 通用性强
∙ 内置方便的数据容器
∙ 易于扩展和嵌入 ? 胶水语言
∙ 缩进
1.4 python 解释器的几种实现版本
∙ CPython 是python默认的解释器
∙ ActivePython CPython的一个扩展实现,2与3均兼容
∙ Jython 用java实现的一个解释器,使用了JIT技术。
∙ IronPython 是用C#实现
Python之禅
∙ import this
∙ print(this)
1.5 Python 编程的基本方式
∙ 文件头编码申明
∙ 单行注释
∙ 多行注释
∙ Python 主体的使用
∙ 导入另一个文件
∙ 反斜杠’\’及小括号‘()’
二、Python 开发环境
2.1 搭建Python 开发环境
2.1.1 官网地址
官网地址:https://www.python.org
2.1.2 Python 运行环境的安装与配置
windows环境
• path (python_home, scripts)
• Lib\site-packages
Linux环境
2.1.3 交互式开发环境
安装完成并设置好环境变量后,需验证python是否成功安装:进入命令行界面,输入python查
看系统是否正确识别该命令。
配置两个环境变量:
C:\Program
Files\Java\jdk1.8.0_152\bin;C:\Users\Administrator\AppData\Local\Programs\Python\Python36\Scripts\;
C:\Users\Administrator\AppData\Local\Programs\Python\Python36\
C:\Users\Administrator>python
Python 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
2.1.4 setuptools
• https://pypi.python.org/pypi/setuptools
• Python setup.py install
• Linux编译安装
• Win尽量安装exe版本
• 安装第三方工具
∙ easy_install
• easy_install <package_name>
• easy_install -U[--upgrade] “<package_name>>=<version>”
∙ pip
• pip install <package_name> 安装程序
• pip install --upgrade <package>==<version> 升级到某个版本
• pip uninstall <package_name> 卸载程序
当运行 easy_install.exe 或 pip.exe 后主动去官网下载,一键安装到 \Lib\site-
packages 下,实现了简单化的安装相关软件。
第三方工具包:C:\Users\Administrator\AppData\Local\Programs\Python\Python36\Lib\site-packages
安装第三方包管理工具:
C:\Users\Administrator\AppData\Local\Programs\Python\Python36\Scripts\easy_install.exe
eg:
C:\Users\Administrator>pip install selenium==2.53.6
Collecting selenium==2.53.6
Downloading selenium-2.53.6-py2.py3-none-any.whl (884kB)
100% |████████████████████████████████| 890kB 44kB/s
Installing collected packages: selenium
Successfully installed selenium-2.53.6
selenium 安装路径:C:\Users\Administrator\AppData\Local\Programs\Python\Python36
2.1.5 IDE
IDE(Integrated development Enviroment)(集成开发环境)- pycharm
Python 自带工具 idle --- 运行—idle
2.2 Python 自省的便利
• 何为Python自省
• 自省:自我评价、自我批评、自我调控。
• 计算机里指(instrospection):检查某些事物以确定它是什么 ,它知道什么以及它能做什么
2.3 os (*) / sys (*) 模块
使用模块前,要先用 import 导入
python比较重要的两个模块:
∙ os (*)
• os模块是与操作系统交互的一个接口。
import os 导入os模块
os.mkdir('E:/test2') 新建目录
os.makedirs('E:/test4/aa') 新建嵌套目录
os.getcwd() 显示进入os模块时的文件路径
os.rmdir()
∙ sys (*)
• sys模块用于提供对 python 解释器的相关操作。
• “System-specific parameters and functions”(系统特定的参数和函数)。
sys.version 显示 Python 版本号
sys.platform 显示 Python 处于什么操作系统
三、Python 基本元素
3.1 输入、输出
∙ 输入:接受一个标准输入数据,返回 string 类型
input() 等待一个任意字符的输入
∙ 输出:将数据打印到标准输出设备(屏幕),在python中使用print()函数,python2中括号可
以省略,python3中括号不可以省略。
在python中使用print函数输出,可以直接在命令界面使用,也可以保存到文件中,通过运
行文件来执行。
多次输出的内容不换行,可以在print后面加逗号。
3.2 常量、变量
∙ 常量
• 常量没有名字
• 如10、100这样的数值或者“Hello World!”这样的字符串,具备字面的含义,可以按照
字面上的含义使用它们的值,这就是常量。常量的值不能改变。
• 不需要修饰
∙ 变量
• 变量:是计算机中存储信息的一部分内存,这部分内存中存储的信息可以变化,即可以保
存任何东西。为了方便调用这部分内存中存储的信息,为其设置一个名称,即变量名。使用变量
名,就意味着使用变量中保存的数据
• 首字符为字母(大小写均可)或为下划线
• 其他部分字符为字母(大小写均可)、数字、下划线
• 区分大小写
变量的两个有用的方法
• id() 身份 id方法来查看唯一标识符,查看内存
• type() 类型 type
3.3 数据类型
变量可以处理不同类型的值,称为数据类型。
• 在python中基本的数据类型:整数(int)、小数(float)、字符串(str)、布尔值(bool)
• 在python中创建变量的时候,不需要明确指定变量的数据类型,只需要“起个名字,给它个
值”,python会根据赋给变量的值来区分变量的数据类型。同时,因为变量的值是可变的,因此
变量的数据类型也是变化的
3.3.1 数值
• 整数(int) • 长整数 (python2.7支持,3不支持) • 浮点数 • 复数
数值运算
• a+b
• a-b
• a*b
• a/b #得到浮点数
• a//b #得到整数
• a%b #取余
• a**b #乘方
3.3.2 字符串
∙ 单引号 'abc'
∙ 双引号 "abc"
∙ 三单引号'''abc ''' 多行输出 / 注释
∙ 三双引号""" abc """
∙ 转义符 \
∙ 原生字符串 r"hello world!\n"
∙ 字符串的连接 使用连接符+"
∙ 索引与切片操作
• 字符串是字符的有序集合,可以通过其位置来获得具体的元素。
• 字符串中的字符是通过索引来提取的,索引从0开始。
• 索引获取特定偏移的元素
• 分片提取相应部分数据
• 格式: [start:end:step],索引可省略
∙ 字符*N #打印N次字符
∙ 字符串的替换与查找功能
∙ 字符串格式化
可以使用如下方式,对格式进行进一步控制:
• %[(name)][flags][width].[precision]typecode
• (name)为命名、flags可以有+、-、0等,+表示在正数前加上正号,-表示左对齐,0表示
右对齐是空的位置用0填充
• width表示输出宽度、precision表示小数点后精度、typecode表示类型
• width和precision应均为整数,我们可以使用*来动态的代入这两个量
%f:默认小数点后6位
%r:忽略转义意义,原样输出字符串
flag:原型
∙ eval()
eval函数将字符串当成有效Python表达式来求值,并返回计算结果。
3.3.3 复数
3.4 类型转换
变量的数据类型根据存储数据的不同,可以任意改变,但当对一个特定类型的变量进行操作时,
如果这个操作与它的数据类型不匹配,就会产生错误。
• 字符串和整数无法使用“+”计算,在这种情况下,我们需要将数据从一种类型转换成另外一种
类型,使用数据类型转换函数int()、float()、str()、bool()
• 类型转换并不会修改变量原来的值,而是创建了一个新的值
int、float、str 类型转换
• 1、int 函数能够
(1)把符合数学格式的数字型字符串转换成整数
(2)把浮点数转换成整数,但是只是简单的取整,而非四舍五入
• 2、float 函数将整数和数字类型的字符串转换成浮点数。
• 3、str 函数将数字转换成字符
使用数据类型转换函数也有一定的限制
• 1.任意整数、小数、布尔值都可以通过str()函数转换为字符串
• 2.不是所有的字符串都能转换成整数或小数
• 3.使用bool()函数进行数据类型转换,除了为0的数字、空字符串、空值None、空集合的是
False,其他的值都认为是True
3.5 其他数据类型
∙ 线性容器(有序序列)
• 字符串也是一种线性容器
∙ List 列表
∙ tuple 元组 值定义完后不能修改
∙ Hash容器
∙ Dict 字典 key:值 ---> 元素
∙ set 集合 集合会去重
∙ None
∙ 布尔类型
3.6 逻辑行与物理行
• 物理行 -- 程序员编写代码时实际看到的
• 逻辑行 -- Python程序能够识别的
∙ python是认为一个物理行对应一个逻辑行
• 一个物理行中写多个逻辑行? 用”;”连接
• 多个物理行表示一个逻辑行? 用”\”连接
3.7 缩进
• print(“hello”)
• print(“hello”)
• 同一层次的语句必须有相同的缩进
• 不要同时使用空白及制表符
• 建议: 使用单个制表符或两个或四个空格
3.8 运算符与表达式
∙ 运算符
• 算术运算符
• 比较运算符
• 赋值运算符
• 逻辑运算符
赋值运算符
比较运算符
逻辑运算符
成员运算符
∙ 运算符的优先级
从高到低
∙ 表达式
• (常量、变量、函数、对象)+运算符+优先级
• 字符串表达式
• 数值表达式
• 逻辑表达式
• 函数式表达式
逻辑表达式
• if
• while
• for
• break 结束整个循环
• continue 结束本次循环,继续下一次循环
函数式表达式
lambda作为一个表达式,定义了一个匿名函数,上例的代码i为入口参数,i+2为函数体。在这里
lambda简化了函数定义的书写形式。使代码更为简洁,但是使用函数的定义方式更为直观,易理
解。
上面例子中的map的作用,非常简单清晰。但是,Python是否非要使用lambda才能做到这样的
简洁程度呢?在对象遍历处理方面,其实Python的for..in..if语法已经很强大,并且在易读上胜过
了lambda。
比如上面map的例子,可以写成:print ([x * 2 + 10 for x in foo]) 非常的简洁,易懂。
filter的例子可以写成:print ([x for x in foo if x % 3 == 0]) 同样也是比lambda的方式更容易理
解。
∙ repr()
str()与repr()都可以用来直接用来格式化字符串,都是在类(对象)中对类(对象)本身进行字符串处
理。
str()
返回一个可以用来表示对象的可打印的友好的字符串
对字符串,返回本身。
没有参数,则返回空字符串。
对类,可通过__str__() 成员控制其行为。该成员不存在,则使用其 __repr__() 成员。
与 repr 区别:不总是尝试生成一个传给 eval 的字符串,其目标是可打印字符串。
repr()
返回一个可以用来表示对象的可打印字符串。
首先,尝试生成这样一个字符串,将其传给 eval()可重新生成同样的对象。
否则,生成用尖括号包住的字符串,包含类型名和额外的信息(比如地址)。
一个类(class)可以通过 __repr__() 成员来控制repr()函数作用在其实例上时的行为。
eval()
eval函数将字符串当成有效Python表达式来求值,并返回计算结果。
repr()加一层引号,eval()去一层引号。
四、Python 容器
线性容器:∙字符串 str ∙列表 list ∙元组 tuple
非线性容器:∙字典 dict ∙集合 set
4.1 字符串 str
替换字符串指定字符
4.2 列表 list
•有序的集合
•通过偏移来索引,从而读取数据
•支持嵌套
•可变的类型
•内置函数
定义列表:在python中定义列表需要使用方括号,列表中的项目都包含在方括号中,项目之间使
用逗号分隔。列表中的数据可以是任意数据类型,甚至可以是不同类型的混合。
添加: + 生成一个新的列表
extend
append
insert
修改:
删除:
-del
-remove
-pop
∙列表的切片 [start:end:step]
∙正向索引
∙反向索引
∙默认索引
列表的成员关系
列表的排序翻转
列表的赋值
∙用”=”赋值 -- 会指向同一个对象
∙用copy()赋值
4.3 元组 tuple
∙有序的集合
∙通过偏移来取数据
∙属于不可变的对象,定义好后,没有增加、删除及修改操作
∙类型转换
∙隐式tuple调用
元组的创建
元组定义
元组与列表比较:
∙元组占用空间较小
∙保证数据安全
4.4 字典 dict
字典的声明
这种数据结构类似通讯录,有一个名字和名字对应的信息,可以通过名字查找对应的信息,
在字典中名字叫‘键’,对应的内容叫‘值’字典就是一个键/值对的集合。
简单使用
排序问题与解决
在python中定义字典使用花括号,字典中的键/值对之间使用逗号分隔,键和值之间使用冒号分
隔
•empty_dict = {}
•dict1 = {“1”:1, “2”:2}
•dict2 = dict()
简单使用字典
∙update()
∙del操作
∙clear()
∙in
∙使用key去获取元素
∙keys()、values()、items()
∙复制字典 =与copy的区别
排序问题与解决
—sotted是python的内嵌函数,不是dict的内嵌函数
sorted()
sorted(dic.items(),reverse=True) # 倒序
sorted(dic.items(),key=lambda item:item[1]) # value排序(value数据类型要一致)
sorted(dic.items(),key=lambda item:item[0]) # key排序
4.5 集合 set
定义方式
set -- 唯一集合
演示合并功能
类型转换
∙empty_set = set()
∙list1 = [1,2,3,4,4,5,5]
∙print(set(list1))
集合的合并与运算符:
∙交 &
∙并 |
∙差 -
∙异或 ^
∙子集判断 issubset
∙超集判断 issuperset
4.6 练习
1、假定list1包含100个元素,给出下面每个切片中元素的数目
list1[-8:] list1[:8] list1[:] list1[-8:-1] list1[8:8] list1[1:-1]
2、 L=[“sentence”,”contains”,”five”,”words.”]给出下列代码行的相应输出
L.insert(0, “This”)
print(“”.join(L))
del L(3)
L.insert(3, “six”)
L.insert(4, “different”)
print(“ “.join(L))
3. 分析语句:
编写一个程序,分析由用户输入的句子中单词的个数。 如:
Enter a sentence: Know what I mean?
Number of words: 4
五、Python 控制流
5.1 Python 控制流简介
程序设计的三种基本结构:顺序、分支、循环
• 顺序结构:是一种线性、有序的结构,依次执行各语句模块
• 选择结构:根据条件成立与否选择程序执行的路径
• 循环结构:重复执行一个或几个模块,直至满足某一条件
5.2 if、elif 与else比较
if
5.3 while循环
while
循环结构:while
语法:
while expression:
statement(s)
同样,冒号[:]不能省略,while结构体中的语句也要保持统一的缩进
5.4 for迭代
for
循环结构: for
python频繁使用迭代器。它允许在数据结构长度未知和具体实现未知的情况下遍历整个数据结
构,并且支持迭代快速读写其中的数据序列中每个元素的使用。
语法:
for iterating_var n in sequence/range:
statements(s)
range(start, stop, step) -- 返回在特定区间的自然数序列
range(1,10)函数代表一个整数序列,从1开始,到10为止(不包含10)
使用for循环对range(1,10)序列进行递归,每次将序列中的1个值赋给i变量(赋值顺序从左到
右),每赋值一次就会执行一次for结构体中的语句,相当于一次一次的循环,当序列中所有值都
赋值一次后,跳出循环。
for 其它用法
∙ zip()
∙ zip(list1,list2)
for 练习
5.5 break、continue、else
break
• break语句用来终止循环。即在没有满足循环条件或序列没有遍历完的时候,想要强行跳出循
环,需要使用break语句。
continue
• continue语句用来跳过本次循环中的剩余语句,然后继续进行下一轮循环
else
• 如果我们不是除正常以外的其他方式退出循环,那么else分支将被执行。也就是在循环体内没有
break语句、没有return语句,或者没有异常出现。
5.6 推导式
列表推导式
• list1=[]
• list1.append(...)
• ...
• 重复5次
• 或是
• for number in range(5):
• list1.append(number)
[expression for item in iterable]
[expression for item in iterable if codition]
字典推导式
{key_expression: value_expression for expression in iterable}
集合推导式
{expression for expression in iterable}
生成器推导式
∙ 元组没有推导式
∙ number_thing = (number for number in range(1,6))
5.7 综合练习
六、Python 函数
6.1 什么是函数
函数是抽象的第一步,是抽象出来的结构,是总结,是方法
复用函数:
•函数的作用之一,复用代码
•将复杂的问题分解成若干个子问题,并逐个解决
函数命名规范:
•函数名小写,可以用下划线间隔单词以增加可读性
定义函数:
•def是关键词,括号冒号永不忘
•没有return的函数,不是真函数
•记得为def函数添加doc,就像没有性别的人类
6.2 必选参数
按位置依次复制过去
6.3 默认参数
默认参数是指在定义函数的时候提供一些默认值,如果在调用函数的时候没有传递该参数,则自
动使用默认值,否则使用传递时该参数的值。
6.4 可变参数/包裹位置参数
在某些情况下,我们在定义函数的时候,无法预估函数应该制定多少个参数,这时我们就可以使
用可变参数了,也就是,函数的参数个数是不确定的。
*args
返回tuple
6.5 关键字参数/包裹关键字参数
可变参数允许你将不定数量的参数传递给函数,而关键字参数则允许你将不定长度的键值对, 作为
参数传递给一个函数
**args
返回dict
几种参数类型混合使用
•执行顺序:
必选-->默认参数-->可选参数(包裹位置参数)-->关键字参数(包裹关键字参数)
6.6 局部变量、全局变量
局部变量作用于Def作用域内
全局变量:
•定义在整个文件中,作用域为全局范围的变量称为全局变量。
•如果需要在函数内使用全局变量,同时又为全局变量赋值,则使用global语句来实现。
6.7 内置函数
type()
dir()
id()
input() 等待外部输入
all([True, 1, "hello!"]) 是否全为True
any(["", 0, False, [], None]) 是否有一个为True
sorted([1,5,3]) 返回一个按正序排序的list
max
min
6.8 匿名函数
∙a = lambda x:x+1
∙