- 编译:将源代码转换成目标代码的过程
- 解释:将源代码逐条转换成目标代码同时逐条运行目标代码的过程
- c语言是编译型语言;python是解释型语言
- Python的特点:语法简洁;与平台无关;粘性扩展;开源理念;通用灵活;强制可读;支持中文;模式多样;类库丰富
- Python的注释格式:
- 单行注释:以#开头
- 多行注释:以'''三个单引号来作为开头和结尾
- Python的变量命名规则:长度没有限制,允许采用大写字母、小写字母、数字、下划线和汉字等字符来给变量命名,但不允许首字符为数字,同时中间不能出现空格。
- 关键字
False | None | True | |||
and | as | assert | break | class | continue |
def | del | elif | else | except | finally |
for | from | global | if | import | in |
is | lambda | nonlocal | not | or | pass |
raise | return | try | while |
eval函数(本质为脱最外层引号)
可以使用eval()嵌套input()进行实现输入需要的类型
input()输出为str类型
注意“:”的使用(在函数定义,递归条件使用的情形下需要使用:)
数据类型(char不是python数据类型)
基本数据类型(整数、浮点数、复数)
int float complex
浮点数最多精确15位
复数x:实部:x.real
虚部:x.imag
//:整数商 输出数据类型为int
/:商 输出数据类型为float(xx.x)
**:幂函数(x**y和pow(x,y)意义相同
字符串(输入输出、★切片)
字符串定义时可以使用单引号、双引号和三引号来表示,其中单引号和双引号为单行字符串,使用单引号时可以将双引号作为字符串一部分,使用双引号时可以将单引号作为字符串一部分,三引号可以表示单行或多行,换行时,会在字符串内添加一个元素\n
基本字符串操作
操作符 | 描述 |
x+y | 连接两个字符串x和y |
x*n或n*x | 复制n次字符串x |
x in s | 如果x为s的子串,返回true;否则返回false |
str[i] | 索引,返回字符串str的第i个元素 |
str[N:M] | 切片,范围索引第N个元素到第M-1个元素 |
len(x) 返回字符串x的长度,也可以应用在其他组合数据类型中
方法 | 描述 |
str.lower | 返回字符串str的副本,全部字符小写 |
str.upper | 返回字符串str的副本,全部字符大写 |
str.split(sep="*",maxsplit=-1) | 返回一个列表,由str被sep分割后的状态构成,maxsplit默认为-1(全部分割)指定maxsplit=x则最多分割x次 |
str.replace(old,new,count) | 返回字符串str的副本,count未给定,则所有old字符串被替换成new,否则替换前count次 |
str.join(iterable(可迭代类型)) | 返回一个新字符串,由可迭代类型变量iterable中每个元素构成,元素间用str分隔 |
集合:
列表:
元组:
字符串:
int(3.14)== 3
int(9.9)== 9
float(3)== 3.0
表达式取位宽最长的数据类型
★if(0.1+0.2==0.3)
false (float的数据处理)
- pow(x,y,z)=(x**y)%z,其中参数z可以省略
特殊格式化控制字符
\a | 蜂鸣,响铃 |
\b | 向后退一格 |
\f | 换页 |
\n | 换行,光标移动到下行首行 |
\r | 回车,光标移动到本行首行 |
\t | 水平制表 |
\v | 垂直制表 |
\0 | NULL,什么都不做 |
- 函数定义(语法形式)
def 函数名():
.....
return 返回值
其中函数名不能是python内的关键字,没有返回值时,函数默认返回None
- 全局变量:
- 作用域:全局作用域
- 生命周期:程序运行期间一直存在
- 局部变量:
- 作用域:局部作用域
- 生命周期:程序运行出局部作用域,变量即被释放
变量声明:
1.简单数据类型变量
(1)简单数据类型变量无论是否与全局变量重名,仅在函数内部创建和使用,函数退出后变量被释放,对同名全局变量无影响
(2)简单数据类型变量在函数中作为全局变量(global)声明后,该全局变量保留且值受到函数的影响
2.组合数据类型变量
(1)组合数据类型变量若在函数内部没有真实创建,且有其同名全局变量,则内部可以直接调用并修改全局变量的值
(2)组合数据类型变量若在函数内部真实创建(未真实创建且没有同名全局变量则报错),则在函数结束时被释放,对同名全局变量无影响
(3)组合数据类型变量在函数中作为全局变量(global)声明后,该全局变量保留且值受到函数的影响
程序控制结构
- 程序的基本结构有三种:
- 顺序结构
- 分支结构
- 单分支
- 双分支
- 循环结构
- 条件循环
- 遍历循环
循环的使用
分支结构根据条件判断结果选择不同的向前执行路径
循环结构根据条件判断结果能够向后反复执行
- 循环保留字:
- break:跳出当前所在的循环,程序从循环后继续执行
- continue:跳出本次循环,但将继续遍历剩余循环列表
- 流程图的基本元素有:
- 起止框
- 判断框
- 处理框
- 输入/输出框
- 注释框
- 流向线
- 连接点
递归调用(程序题)
1.阶乘
其中round()函数作用是四舍五入取最接近的整数
2.字符串反转
组合数据类型
- 元组、列表、字符串有序
- 集合、字典无序
- 集合符号是{}
- 列表符号是[]
- 元组符号是()
- 字符串是''' ''' 或" "或' '
一、集合类型
```
集合是多个元素的无序组合
集合元素之间无序,每个元素唯一,不可重复
*集合元素不可更改,不能说可变数据类型
```
```
集合用{}表示,元素间用","分隔
建立集合类型用{}或set()
建立空集合类型,必须使用set()
```
操作符(未要求)
操作符 | 描述 |
S|T (并) | S和T内所有元素 |
S-T (差) | 在S但不在T内的元素 |
S&T (交) | 同时在S和T内的元素 |
S^T (补) | S和T内非相同的元素 |
S<=T或S<T | 判断S和T的子集关系 |
S>=T或S>T | 判断S和T的包含关系 |
S|=T (并) | 更新S集合 包括S和T内的所有元素 |
S-=T (差) | 更新S集合 在S但不在T内的元素 |
S&=T (交) | 更新S集合 同时在S和T内的元素 |
S^=T (补) | 更新S集合 S和T内非相同的元素 |
处理方法(未要求)
方法 | 描述 |
S.add(x) | 如果x不在集合S内,则将x添加到S |
S.discard(x) | 移除S中元素x,如果x不在S中,不报错 |
S.remove(x) | 移除S中元素x,不如x不在S中,产生KeyError异常 |
S.clear() | 移除S内所有元素 |
S.pop() | 随机取出s内一个元素并删除,若S为空,产生KeyError异常 |
S.copy() | 返回S的一个副本 |
len(S) | 返回S的元素个数 |
x in S | 判断S中元素x,在S内返回True,否则返回Flase |
x not in S | 判断S中元素x,不在S内返回True,否则返回Flase |
set(x) | 将其他类型变量x变为集合类型 |
应用
数据去重:利用集合无重复元素的特点
包含关系比较
二、序列类型
```
序列是一维元素向量,元素类型可以不同
类似数学元素序列:S0,S1,S2……
元素间由序号引导,通过下标访问序列的特定元素
序列类型是一个基类类型
包含:*字符串类型 *元组类型 *列表类型
```
操作符(未要求)
x in S | 判断序列S中元素x,在S内返回True,否则返回Flase |
x not in S | 判断序列S中元素x,不在S内返回True,否则返回Flase |
S+T | 连接两个序列S和T(S、T必须为同类型) |
S*n或n*S | 将序列s重复n次 |
S[i] | 索引,返回S中第i而元素,i是序列序号 |
S[i:j:k] | 分片,返回S中的第i到j个元素以k为步数的子序列(k默认为1,可省略) |
len(S) | 返回序列S的长度,即元素个数 |
min(S) | 返回序列S的最小元素,元素需可比较 |
max(S) | 返回序列S的最大元素,元素需可比较 |
S.index(x) | 返回序列S第一次出现x的位置 |
S.index(x,i,j) | 返回序列S从i开始到j位置第一次出现x的位置 |
S.count(x) | 返回序列中出现x的总次数 |
应用场景:
```
元组用于元素不改变的应用场景,固定搭配场景
列表更加灵活,是最常用的序列类型
列表的最主要作用:表示一组有序数组,进而进行操作
```
1.元组类型
```
元组是序列类型的一种扩展
元组的一种序列类型,一旦创建不能修改
使用()或tuple()创建,元素间用","分隔
可以使用或不使用()
```
2.列表类型
```
列表是一种序列类型,创建后可以被随意修改
使用[]或list()创建,元素间用“,”分割
列表中各元素的类型可以不同
```
操作符(**重要)
操作符 | 描述 |
ls[i]=x |
替换列表ls第i元素为x |
ls[i:j]=lt | 用lt替换ls中的第i到j-1个元素 |
ls[i:j:k]=lt | 用列表lt替换ls切片后所对应的元素子列表 |
del ls[i] | 删除ls的第i元素 |
del ls[i:j:k] | 删除ls中第i到第j-1以k为步长的元素 |
ls+=lt | 更新ls,将lt元素增加到ls中 |
ls*=n | 更新列表ls,其元素重复n次 |
ls.append(x) | 在列表ls最后增加元素x |
ls.clear | 删除所有元素 |
ls.copy() | 生产新列表,赋值所有元素 |
ls.insert(i,x) | 在ls第i位置增加元素x |
ls.pop(i) | 将第i元素取出并删除,默认从列表末尾删除元素,ls为空时报错 |
ls.remove(x) | 将ls中出现的第一个x删除 |
ls.reverse() | 将ls内的元素反转 |
文件操作:
***必须将程序保存到要打开的文件的路径
在python shell中必须更改工作目录,当然在实际程序编写过程中可以将文件或程序的位置更改
文件读取方法的区别
操作方法 | 含义 |
<file>.readall() | 读入整个文件内容,返回一个字符串或字节流* |
<file>.read(size=-1) | 从文件中读入整个文件内容,若给出size则读前size长度的字符串或字节流 |
<file>.readline(size=-1) | 从文件中读入一行内容,若给出size则读该行前size长度的字符串或字节流 |
<file>.readlines(hint=-1) | 从文件中读入全部行内容,每行返回一个列表,若给出hint则读入前hint行的内容 |
<file>.readall()方法似乎在现版本的python不再适用
注意:每次读取后指针指向最后,需要seek(0)命令回到开始
每次进行文件读取时需要使用open命令打开文件
在操作完成后需要使用close命令关闭文件,释放文件的使用授权,不关闭文件句柄则会无法进行文件删除等操作,同时及时关闭文件能够避免超出操作系统的限制的问题
第三方库(选择):
从数据分析到人工智能 | |||
数据分析 | 数据可视化 | 文本处理 | 机器学习 |
numpy pandas Scipy |
Matplotlib seaborn mayayi |
PyPDF2 NLTK Python-docx |
Sciket-learn TensorFlow MXNet |
从web解析到网络空间 | |||
网络爬虫 | web信息提取 | web网站开发 | 网络应用开发 |
Requests Scrapy pyspider |
BeautifulSoup Re Python-Goose |
Django Pyramind Flask |
WeRoBot aip MyQR |
从数据分析到人工智能
数据分析:
numpy
pandas
SciPy
数据可视化:
Matplotlib
seaborn
mayavi
文本处理:
PyPDF2(处理pdf)
NLTK(自然语言文本处理)
Python-docx(处理word)
机器学习:
Scikit-learn(最基本最优秀的机器学习之一)
TensorFlow
MXNet(基于神经网络,自动驾驶、机器翻译、语音识别)
从web解析到网络空间
网络爬虫:
Requests(最友好,页面级)
Scrapy(最主要最专业的框架之一)
pyspider(强大的web页面爬取)
web信息提取:
BeautifulSoup(HTML和XML的解析库)
Re(正则表达式解析处理)
Python-Goose(提取文章类型)
web网站开发:
Django(最流行web应用框架,MTV模式)
Pyramid(规模适中)
Flask(简单规模小快速)
规模:Django>Pyramid>Flask
网络应用开发:
WeRoBot(微信公众号开发框架)
aip(百度AI开放平台接口)
MyQR(二维码生成)