Pytrhon语言概述
一、Python语言的诞生
- 创始人:Guido van Rossum
- Python 2.x : 2002年
- Python 3.x :2008
语言特点:简洁,代码量少
二、Python语言的优势
- 脚本语言 + 语句执行
- 简洁 + 强制可读性
- 跨平台 + 开源
- 面向过程 + 面向对象
- 图形界面
三、Python语言特点
Python语言是
通用语言
脚本语言
开源语言
跨平台语言
多模型语言
胶水语言
IPO 程序编写方法
输入数据
处理数据
输出数据
Python程序实例解析
Python 语法元素分析
严格缩进(4nbsp)表明格式框架
标明代码的层次关系
缩进是表明程序框架的唯一手段注释
单行注释 #
多行注释 “` 开头和结尾命名与保留字
- 命名
大小写字母、数字、下划线(_)、和汉字。==首字符不能是数字, 中间不能出现空格== 长度无限制
++大小写敏感++- 命名
变量 | 常量 |
---|---|
程序中值不发生改变的元素 | 程序中值发生改变或者可以发生改变的元素 |
- 保留字
也称关键字,编程语言内部定义并保留使用的标识符
编写程序不能定义与保留字相同的标识符
保留字一般用来构成程序整体框架、表达关键值和具有结构性的复杂语义等
“ ” 或者 ’ ‘括起来的一个或多个字符
两种序号体系
赋值语句
同步赋值语句:<变量1>, …, <变量N> = <表达式1>, …, <表达式N>
t=x x=y y=t <=> x,y = y,x
input()函数
val = input("提示性文字")
- 分支语句
根据判断选择程序执行路径
if condition1 :
dosth
elif condition2 :
dosth
...
else:
- eval()函数
以Python表达式的方式解析并执行字符串
x = 1
eval("X + 1") 结果为2
eval("1.1 + 2.2") -结果为3.3-
- 输出函数
通过%选择要输出的变量
print("The average numbner is %f" % float_num)
- 循环语句
for i in range(num):
do
基本数据类型
数字类型
- 整数类型
- 浮点数类型
复数类型
> 数字类型对Python语言中的数字表示和使用进行了定义和规范
- pow(x ,y) x^y
- 科学计数法 98e4 53e-3 2.6E5 e或者E
- 复数
z = a + bj z.real z.imag
数字类型的操作
混合类型运算 结果为最宽的类型
基本规则:- 整数之间运算,如果数学意义上的结果是小数,结果是浮点数;
- 整数之间运算,如果数学意义上的结果是整数,结果是整数;
- 整数和浮点数混合运算,输出结果是浮点数;
- 整数或浮点数与复数运算,输出结果是复数。
整数 -> 浮点数 -> 复数
- ==x // y== xy之间的整数商
- ==+x== x本身
- ==x**y== x的y次幂
内置数字运算函数
函数 | 描述 |
---|---|
abs(x) | 绝对值 |
divmod(x,y) | (x//y, x%y) 二元组形式 |
pow(x,y[,z]) | (x**y)%z []参数可以省略 |
round(x[,ndigits) | x四舍五入,保留ndigits位小数 返回四舍五入的整数值 |
max(x1,x2,……,xn) | 最大值,n无限制 |
min(x1,x2,……,xn) | 最小值,n无限制 |
- 数字类类型转换
函数 | 描述 |
---|---|
int(x) | x(字符串,浮点数)转换为整数 |
float(x) | x(字符串,整数) 转换为浮点数 |
complex(re[,im]) | 生成实数 实部re(int,float,string) 虚部im(int, float) |
- 数字类型的判断
type(x) 返回x的类型,适用于所有
type(4.5) 结果:<calss 'float'>
- ## 字符串类型
- 转义符
\ 输出带引号的字符串
\\ 带有转义符的字符串
\n 换行 - 索引 (正,反)
[<索引>] [0 ,len-1]
[:] 不包括end - 字符串连接
”+” 拼接
“*” 本身字符串重复连接形成
3 * "pine" = 'pinepinepine'
- 字符串长度len()
len("pine") 结果:4
- 字符串类型转换
str(123) 结果'123'
- 字符串字符遍历
for chr in string:
do
操作 | 含义 |
---|---|
+ | 连接 |
* | 重复 |
[] | 索引 |
[:] | 剪切 |
len() | 长度 |
.upper() | 大写 |
.lower() | 小写 |
.strip() | 去两边空格和指定字符 |
.split() | 指定字符分割为数组 |
.join() | 连接两个字符串 |
.find() | 搜索指定字符串 |
.replace() | 字符串替换 |
for in | 迭代 |
字符串类型格式化
format() <模版字符串>.format(<逗号分隔的参数>) Example: "{}: 计算机{}的cpu占用率为{}%".format("2016","Python",10) 默认{}顺序对应参数顺序 也可以指定顺序 "{1}: 计算机{0}的cpu占用率为{2}%".format("Python","2016”,10)
{<参数序号>:<格式控制标记>}
: | <填充> | <对齐> | <宽度> | , | <.精度> | <类型> |
---|---|---|---|---|---|---|
引导符号 | 填充的单个字符 | < 左对齐 ^ 居中对齐 > 右对齐 | 设定输出宽度 | 千位分隔符 | 浮点数小数点精度 字符串输出最大长度 | 整数类型 b,c,d,o,x,X 浮点数类型e,E,f,% |
程序的控制结构
程序的基本结构
- 顺序结构
程序的基础
- 分支结构
单分支 二分支(组合成多分支)
if if-else if-elif-else - 循环结构
条件循环 遍历循环
<表达式1> if <条件> else <表达式2>
count = 2
count if count != 0 else "不存在"
for i in range(N):
do
for line in fi:
do
for chr in string:
do
for item in lsL
do
for s in "BIT":
print("execute" + s)
else:
s = "normal complete"
print(s)
#在for正常执行后,继续执行else中的内容。else只在循环正常执行之后才执行并结婚
- ##### 无限循环 while语句
一直保持循环操作知道特定循环条件不被满足才结束,不需要提前知道确定循环次数
- ##### while else结构
- while 和 for 的 else仅在循环全部正常遍历后才执行(没有break或者return退出,continue可以)
break and continue
break跳出最内层的for或while循环
continue跳过循环中下面的语句,不出循环异常处理
try:
num = eval(input("输入一个整数")
print(num**2)
except NameError:
print("输入错误,非整数")
可支持多个except,except不指定类型则处理所有异常
graph TD
A[try]-->B{no excpetion}
A[try]-->F{exception}
F{exception}-->G[except]
G[except]-->D[fianll]
B-->C[else]
C-->D[finally]
函数和代码的复用
- 函数的基本使用
- 函数是一种功能抽象
- 函数是一段具有特定功能的,可重复的语句组,用函数名表示并通过函数名完成功能调用
- 具有名字的子程序,无须重复编写
-不同的参数输入实现对不同的数据的处理 - 执行后反馈处理结果
- 函数是一种功能抽象
def <funcname>(<param_list>):
<body>
return <return_list>
- 匿名函数———lambda函数
<funcname> = lambda<param_list>:<expresion>
等价于
def <funcname>(<param_list>):
return <expression>
- 可选参数和可变数量参数
参数存在默认值,默认值也可以更改
*实现可变数量参数 - 参数的位置和名称传递
调用时指定参数名称,使得参数顺序任意调整 - 返回值
return可以返回多个(元组类型) 也可以无return - 全局变量和局部变量
局部变量在函数执行完成后将被释放
>>>n = 1 #n是全局变量
>>>def func(a, b):
n = b #这个n是在函数内存中新生成的局部变量,不是全局变量
return a*b
>>>s = func("knock~", 2)
>>>print(s, n) #测试一下n值是否改变
knock~knock~ 1
global 显示声明全局变量
>>>n = 1 #n是全局变量
>>>def func(a, b):
global n
n = b #将局部变量b赋值给全局变量n
return a*b
>>>s = func("knock~", 2)
>>>print(s, n) #测试一下n值是否改变
knock~knock~ 2
- 代码复用和模块化设计
块内紧耦合,块间松耦合
- 递归函数
存在一个或多个基例,必须要以一个或多个基例结尾
组合数据类型
组合数据类型概述
序列类型(string tuple list))
先后关系,序号访问,不排他
集合类型 (set)
无序,互异
映射类型(map)
键值对
列表类型
>>>ls = [425, "BIT", [10, "CS"], 425]
>>>ls
[425, 'BIT', [10, 'CS'], 425]
简单的列表赋值不会产生新的对象,而是有一个指针
函数或方法 | 描述 |
---|---|
ls[i]=x | ls第i项替换为x |
ls[i:j] = lt | lt替换ls中的第i到j项(不含j) |
ls[i:j:k] = lt | lt替换i到j以k为步长的项 |
del ls[i:j] | 删除ls i 到 j 项 |
del ls[i:j:k] | 删除i 到j k为步长 |
ls += lt 或 ls.extend(lt) | lt增加到ls中 |
ls *= n | 更新ls 元素重复n次 |
ls.append(x) | ls最后增加一个x |
ls.clear() | 删除所有元素 |
ls.copy() | 生成一个新列表 复制ls所有元素 |
ls.insert(i,x) | 在i位置插入x |
ls.pop(i) | 弹出第i个 |
ls.remove(x) | 删除第一个出现的元素x |
ls.reverse(x) | ls元素反转 |
使用一个列表改变另一个列表的值时候 多增少减
>>>vlist
[0, 1, 2, 'python', 4]
>>>vlist[1:3]=["bit", "computer"]
>>>vlist
[0, 'bit', 'computer', 'python', 4]
>>>vlist[1:3]=["new_bit", "new_computer", 123]
>>>vlist
[0, 'new_bit', 'new_computer', 123, 'python', 4]
>>>vlist[1:3]=["fewer"]
>>>vlist
[0, 'fewer', 123, 'python', 4]
- 字典类型 {}
{<键1>:<值1>, <键2>:<值2>, … , <键n>:<值n>}
- 访问
<值> = <字典变量>[<键>]
- 访问
直接使用大括号{}可以创建一个空的字典,并通过中括号[]向其增加元素。
>>>Dp={}
>>>Dp['2^10']=1024
>>>print(Dp)
{'2^10': 1024}
函数和方法 | 描述 |
---|---|
.keys() | 返回所有键信息 |
.values() | 返回所有值信息 |
.items() | 返回所有键值对 |
.get(,) | 键存在则返回,否则返回默认值 |
.pop(,) | 键存在则返回并删除,否则返回莫认真 |
.popitem() | 随机取出一个键值对,元组(key,value)形式返回 |
.cealr() | 删除所有键值对 |
del [] | 删除某一个键值对 |
in | 判断键是否在字典中 True or False |
文件和数据格式化
- 文件概述
文件包括 文本文件和 二进制文件
textFIle = open("filename","rt") #文本文件
textFIle = open("filename","rb") #二进制文件
- 文件的打开关闭
<变量名> = open(<文件名>,<打开模式>)
打开模式 | 含义 |
---|---|
‘r’ | 只读,不存在返回FileNotFoundError |
‘w’ | 覆盖写模式,不存在则创建 |
‘x’ | 创建写模式,不存在创建,存在报错FileExistsError |
‘a’ | 追加写模式,不存在创建,存在追加 |
‘b’ | 二进制模式 |
‘t’ | 文本文件模式,默认 |
‘+’ | 和rwxa一起使用,原功能基础上增加同时读写功能 E:w+ |
- 文件内容读取
方法 | 含义 |
---|---|
.readall() | 读取整个文件内容,返回字符串或字节流 |
.read(size=-1) | 读入前size长度的字符串或字节流 |
.readline(size=-1) | 读入一行,或者该行前size长度 |
.readlines(hint=-1) | 读入所有行,或者hint行,每行为元素形成一个列表 |
- 文件写
方法 | 含义 |
---|---|
.write(s) | 文件写入一个字符串或者字节流 |
.writelines(lines) | 元素为字符串的列表写入文件 |
.seek(offset) | 改变指针位置 0:开头 1:当前 2:结尾 |
- CSV
CSV文件的每一行是一维数据,可以使用Python中的列表类型表示,整个CSV文件是一个二维数据,由表示每一行的列表类型作为元素,组成一个二维列表。
[
['城市', '环比', '同比', '定基\n'],
['北京', '101.5', '120.7', '121.4\n'],
['上海', '101.2', '127.3', '127.8\n'],
['广州', '101.3', '119.4', '120.0\n'],
['深圳', '102.0', '140.9', '145.5\n'],
['沈阳', '100.1', '101.4', '101.6\n'],
]
- JSON
- 数据保存在键值对中;
- 键值对之间由逗号分隔;
- 括号用于保存键值对数据组成的对象;
- 方括号用于保存键值对数据组成的数组。
"本书作者" : [
{ "姓氏" : "嵩",
"名字" : "天",
"单位" : "北京理工大学" },
{ "姓氏" : "礼",
"名字" : "欣",
"单位" : "北京理工大学" },
{ "姓氏" : "黄",
"名字" : "天羽",
"单位" : "北京理工大学" }
]
程序设计方法论
- 自顶向下设计
- 自底向上执行
- 计算生态和模块编程
模块编程思想是Python 语言最大的价值
Python第三方库的安装
pip工具安装
最常用 最高效
自定义安装
文件安装
pip install <拟安装库名>
pip install -U <nane>
pip uninstall <拟卸载库名>
pip download <拟下载库名>
pip search <拟查询关键字>
pip list