Day 20 python基础总复习
一、计算机基础
1.1 计算机基础之编程
- 编程语言是人与计算机之间交流的介质
- 编程就是写一堆文件
- 编程为了奴隶计算机,解放劳动力
1.2 计算机组成原理
- CPU
- 控制器:控制硬件
- 运算器:逻辑运算和算术运算
- 内存:临时保存数据
- 优点:快
- 缺点:断电即消失
- 外存:
- 优点:永久保存
- 缺点:运行速度慢
- 输入设备:输入信息,如鼠标/键盘
- 输出设备:输出信息,如显示器/打印机
I/O设备:即能输入信息也能输出信息,如u盘
- 机械硬盘工作原理:
- 机械手臂:读取数据
- 磁道:存储数据
- 扇区:划分磁道
- 平均寻道时间:由于工业水平的限制,为5ms
- 平均延迟时间:以7200r/min的电脑为例,为4.15ms
- 平均寻找数据时间:5+4.15=9.15ms
1.3 计算机操作系统
- 操作系统接收外部指令,转为二进制,控制硬件
- 计算三大组成
- 应用程序:与操作系统和用户交互,完成具体的某个任务
- 操作系统:与应用程序和硬件和用户交互,起着承上启下的作用
- 硬件:存储数据
- 文件是操作系统提供的虚拟的单位
- 打开应用程序的流程(以qq为例)
- 双击qq,发送指令给操作系统qq的路径
- 操作系统接收指令,直接给CPU
- CPU接收指令,控制内存去硬盘读取qq数据
- 在内存中运行qq
- 打开操作系统的流程
- 开电源
- 打开临时操作系统
- 临时操作系统唤醒真正的操作系统
1.4 计算机之编程语言
- 机器语言
- 优点:执行效率高
- 缺点:开发效率低
- 汇编语言
- 优点(相比较机器语言):开发效率高
- 缺点(相比较机器语言):执行效率低
- 高级语言
- 解释型语言:相当于同声传译,写一行翻译一行
- 优点(相比较编译型语言):开发效率高
- 缺点(相比较编译型语言):执行效率低
- 编译型语言:相当于谷歌翻译:全部写完后一次性翻译,可以保存结果
- 优点(相比较解释型语言):执行效率高
- 缺点(相比较解释型语言):开发效率低
- 解释型语言:相当于同声传译,写一行翻译一行
二、变量和内存管理
2.1 变量
- 变量用来描述世间万物变化的状态
- 变量的组成
- 变量名:接收变量值
- =:赋值符号
- 变量值:具体的值
- 变量名的命名规范:
- 变量名必须具有某种意义
- 变量名只能由数字/字母/下划线组成,且不能由数字开头
- 变量名不能为关键字(文件名不能命名为模块名/关键字)
2.2 内存管理
- 引用计数:变量值被引用的次数
- 垃圾回收机制:当变量值的引用计数为0的时候,变量值会被Python解释器自动回收,解除变量值内存占用
- 小整数池:当Python解释器启动的时候,Python解释器会自动生成[-5,256]之间的整数,这些整数不会被垃圾回收机制回收
三、与用户交互
3.1 input
- input接收的值都是字符串类型,相比较print多了一个暂停程序的功能,并且会等待用户输入
四、格式化输出
4.1 占位符(了解)
name = 'nick'
age = 18
s = '%s%s'%(name, age)
4.2 format(了解)
name = 'nick'
age = 18
s = '{}{}'.format(name, age)
4.3 f-string
name = 'nick'
age = 18
s = f'{name}{age}'
五、基本运算符(了解)
5.1 算术运算符
- + - * / // % **
5.2 逻辑运算符
- and/or/not
5.3 比较运算符
- > >= < <= != ==
5.4 身份运算符
- is/is not
5.5 赋值运算符
- =
5.6 链式赋值
a=b=c=10
5.7 交叉赋值
a = 10
b = 20
a, b = b, a
c = a
a = b
b = c
5.8 解压缩
e1, e2, e3, *_ = [1, 2, 3, 4, 5]
e1, e2, e3, _ = [1, 2, 3, 4]
六、流程控制
6.1 if判断
- if
- if...else
- if...elif...elif.......else
- if嵌套
6.2 while循环
- 干一些重复的事情
- while
- while + continue
- while + break
- while + else(了解)
- while嵌套
6.3 for循环
- 干一些重复的事情,可控
- for
- for + continue
- for + break
- for + else(了解)
- for嵌套
七、数据类型
7.1 整型
- + - * / // % **
7.2 浮点型
- + - * / // % **
7.3 字符串
- 优先掌握
- 索引取值
- 切片
- 成员运算
- 长度
- 切分
- for循环
- strip
- 需要掌握
- rstrip/lsrtip
- rsplit
- startswith/endswith
- lower/upper
- isdigit
- replace
- 了解
- count/index/find/rfind/rindex
- center‘/ljust/rjust/zfill
- swapcase/title/capitalize
- is系列
7.4 列表
- 优先掌握
- 索引取值,索引更改值
- 切片
- append
- for循环
- 长度
- 成员运算
- del
- 需要掌握
- insert
- extend
- sort
- pop # 不会报错
- reverse
- remove # 会报错
- count
- index
- copy
- clear
7.5 元组
不可更改的列表
- 优先掌握
- 索引取值
- 切片
- 长度
- 成员运算
- for循环
- count
- index
7.6 字典
优先掌握
- 按键取值,按键更改值,按键加值
- 成员运算
- 长度
- for循环
- keys/values/items
- del
- pop # 随机删除
需要掌握
- get # 如果没有为None
- update
- fromkeys
- setdefault
7.7 集合(了解)
- 可以去重,去重后会打乱顺序
7.8 布尔类型
- 除了0/None/空/False外,其他数据类型都自带布尔值为True
八、文件处理
8.1 字符编码
- 用什么编码存,就用什么编码取,大家都用utf-8
8.2 文件操作
8.2.1 打开文件的过程
- 双击文件 open
- 修改内容 read/write
- 关闭文件 close
- del file 之删除了变量名,操作系统的占用仍然存在
8.2.2 打开文件的三种模式
- r:只读
- w:清空后只写
a:追加写入
- b:二进制模式
t:文本模式
8.2.3 with上下文管理
- with open(filename,mode,encoding='utf8') as f:
8.2.4 文件操作的高级应用(了解)
- r+/w+:表示可读可写(不推荐使用)
- seek:移动指针
- tell:告诉指针当前位置
- truncate:截断文件
8.2.5 拷贝文件
with open('test.txt','r',encoding='utf8') as fr, \
open('test_swap.txt','w',encoding='utf8') as fw:
data = fr.read()
# 逻辑处理
fw.write(data)
import os
os.remove('test.txt')
os.rename('test_swap.txt','test.txt')
九、函数
9.1 函数基础
9.1.1 函数的定义
- def 函数名():
9.1.2 函数的三种形式
- 有参函数
- 无参函数
- 空函数
9.1.3 函数的返回值
- 返回值会中断函数,下面的代码不会运行了
- 返回值可以接收任意类型的数据,默认会None
- 返回值可以多个数据类型,以元组的形式返回
9.1.4 函数的调用
- res = 函数名() # res就是返回值
9.1.5 函数的参数
- 形参:定义函数阶段,形参类似于变量名,具有描述意义,接收实参,没有具体的值
- 位置形参:从左到右接收位置参数
- 默认形参:如果没有接收值,给一个默认值,默认形参在位置形参后
- 实参:调用函数阶段,有具体的值
- 位置实参:从左到右给形参传值
- 关键字实参:按照形参名给形参传值,关键字实参在位置实参后
9.1.6 可变长参数(了解)
- *args
- 形参:接收多余的位置实参,并存储为元组
- 实参:打散元组,然后把打散的值以位置实参的形式传给形参
- **kwargs
- 形参:接收多余的关键字实参,并存储为字典
- 实参:打散字典,然后把打散的值以关键字实参的形式传给形参
9.1.7 名称空间与作用域
- 内置名称空间:Python解释器启动的时候加载
- 全局名称空间:文件运行的时候加载
- 局部名称空间:函数调用的时候加载
- 执行顺序:内置--》全局--》局部
- 搜索顺序:从当前位置开始,如果为局部,则为局部--》全局--》内置
- 全局和局部互不干涉,即全局中的x和局部中的x没有任何关系,互不影响
9.1.8 函数对象
- 函数名其实就是一个对象,类似于变量名可以:
- 引用
- 作为函数的参数
- 作为函数的返回值
- 作为容器元素
9.1.9 函数嵌套
- 函数套函数
9.1.10 闭包函数
def f1(x):
def f2():
print(x)
return f2
f3 = f1(10)
f3() # 10
f3() # 10
f3() # 10
f4 = f1(20)
f4() # 20
f4() # 20
f4() # 20
9.2 函数高级
9.2.1 装饰器
- 不改变源代码,不改变调用方式给其增加功能
def sanceng(x):
def deco(func):
def wrapper(*args,**kwargs):
res = fun(*args,**kwargs)
return res
return wrapper
return deco
@deco
def inde():
pass
9.2.2 迭代器
- 可迭代对象:具有iter方法的数据类型,可迭代对象不一定是迭代器对象
- 迭代器对象:具有iter和next方法的数据类型,迭代器对象一定是可迭代对象,文件是特殊
- for循环原理,以for i in range(10)为例
- 使用iter方法把range(10)变成迭代器对象
- 然后再用next一个个取值
- 取完报错,捕捉异常,中止循环
9.2.3 三元表达式(了解)
- 结果1 if 条件 else 结果2
9.2.4 列表推导式(了解)
- [i for i in range(10)] # 一筐鸡蛋
9.2.5 字典生成式(了解)
- {k:v for k,v in dic}
9.2.6 生成器
- 自定义迭代器,函数内部有yield关键字的函数,就是生成器
- yield:接收返回值,不会停止函数,会继续运行函数代码
- return:接收返回值,停止函数
9.2.7 生成器表达式(了解)
- (i for i in range(10)) # 老母鸡
9.2.8 匿名函数(了解)
- lambda x,y : x+y
- max:取最大值
- min:取最小值
- sorted:排序
- map:映射
- filter:过滤
9.2.9 内置函数(了解)
- zip 拉链函数,会把两个列表变成一个字典
- enumerate 获取索引和值
- eval 把字符串变成原来的数据类型
- time = __import__('time')
9.2.10 递归(了解)
- 函数自己调自己
9.2.11 面向过程编程
- 类似于工厂的流水线,一步一步机械式的的完成任务
- 优点:逻辑清晰
- 缺点:扩展性差,有一个功能有问题,则后面会收到影响
十、模块
10.1 模块和包的使用
10.1.1 模块的四种形式
- 自定义模块
- 内置模块
- 第三方模块
- 包
10.1.2 import和from...import...
- import module as md
- from module import fangfa1,fangfa2,fangfa3
- from module import *
10.1.3 循环导入问题
# m1.py
from m2 import y
x = 10
# m2.py
from m1 import x
y = 20
- 因为m1去m2找y,然后会运行m2文件,m2去m1找x,m2-m1-m2-m1……死循环了
- 解决方案一:
# m1.py
x = 10
from m2 import y
# m2.py
y = 20
from m1 import x
- 解决方案二:
# m1.py
def f1():
from m2 import y
x = 10
# m2.py
def f1():
from m1 import x
y = 20
10.1.4 模块的搜索路径
- 内存--》内置--》环境变量
- 当你以模块名命名的时候,你启动文件的时候就放入内存中
10.1.5 包
- 模块太大了,合理的分配模块的函数
# m1.py
f1
f2
f3
f4
# m2.py
f1
f2
# m3.py
f3
f4
- 所以得用文件夹管理,文件夹命名为m1,导入m1就是导入m1中的__init__
10.2 Python常用模块
10.2.1 time模块
- 打印三种不同形式的时间,时间戳/格式化时间/结构化时间
10.2.2 datetime模块
- 时间的加减
10.2.3 random模块
- 随机数
10.2.4 os模块
- 与操作系统交互,多用于文件操作
10.2.5 sys模块
- 与python解释器交互,多用于环境变量配置
10.2.6 json模块
- 序列化:把数据从内存读入硬盘(以json格式)
- 反序列化:把数据从硬盘读入内存(以json格式)
- 跨平台性质,它可以序列化dict/list/str/int/float/bool/None数据类型
10.2.7 pickle模块
- 序列化:把数据从内存读入硬盘(以pickle格式,二进制形式)
- 反序列化:把数据从硬盘读入内存(以pickle格式,以二进制形式)
- 无法跨平台,但是可以序列化Python的任意数据类型,
10.2.8 hashlib模块
- 加密
10.2.9 hmac模块
- 加盐加密
10.2.10 logging模块
- 日志模块
- 步骤
- 创建logger对象
- 创建handler对象
- 创建formatter对象
- 把formatter绑定到handler对象上
- 把handler对象绑定到logger对象上
- 设置级别
- 测试
10.2.11 numpy模块
- 多维数组(矩阵/张量)的运算
10.2.12 pandas模块
- 处理表格/json等文件,数据库
10.2.13 matplotlib模块
- 数据可视化
10.2.14 re模块
- 正则表达式,从文本中匹配特定的内容
10.2.15 typing模块
- 导入Python的数据类型
10.2.16 shutil模块(了解)
- 文件的压缩与解压缩,文件的拷贝
10.2.17 subprocess模块(了解)
- 运行子程序,即运行linux命令
10.2.18 xml模块(了解)
- 类似于json模块,做不同程序间的数据交互
Day 20 python基础总复习的更多相关文章
- C#基础总复习01
马上就快毕业了,准备把这几个月所学到的知识梳理一下,这儿所写的都是一些C#中最基础的东西(大牛不要笑话我,这也是我记录的一些笔记等等),希望能帮到一些正在学习这方面的知识的人,如果有写的不对的地方,望 ...
- .net基础总复习(1)
第一天 1.new关键字 (1) 创建对象 (2) 隐藏从父类那里继承过来的成员 2.访问修饰符 public: 公开的,公共的. private:私有的,只能在当前类的内部访问,类中的成员, 如果不 ...
- 1.20 Python基础知识 - python常用模块-1
一.time和datetime 1.time模块 1)time.process_time() >>> import time >>> time.process_ti ...
- C#基础总复习02
继续更新第二篇: 1:一元运算符:++ -- ++:不管是前加加还是后加加,变量的值最终都会自身加一. 前加加和后加加的区别体现在参与运算的时候,如果是后加加,则首先拿原值参与运算, 运算完成后再自身 ...
- Python 基础语法复习
由于选修了<人工智能模式识别>的课程,要求用phthon来实现算法,乘着周三晚上没课,就来回顾一下python的主要语法. 环境: Anaconda Python3.6 1.变量 ...
- 2015/9/20 Python基础(16):类和实例
面向对象编程编程的发展已经从简单控制流中按步的指令序列进入到更有组织的方式中,依靠代码块可以形成命名子程序和完成既定的功能.结构化的或过程性编程可以让我们把程序组织成逻辑快,以便重复或重用.创造程序的 ...
- .net基础总复习(2)
第二天 文件操作常用类 File类 //操作文件的 //复制.剪切.创建.移除 //File.Create(@"C:\Users\BDSOFT\Desktop\new.txt" ...
- C#基础总复习03
继续更新...接下来就是面向对象的知识了 1.面向对象:概念:使用面向对象的思想进行编程可以让的程序变得扩展性更高,便于维护: 我们在现实生活中去描述一个人的时候,通过描述这个人的特征和行为. 我们在 ...
- Python基础语法复习
1.数据类型 List 列表 函数 append(): 在列表末尾追加. count(): 计算对象在列表中出现的次数. extend():将列表内容添加到列表中. index(): 计算对象在列表中 ...
随机推荐
- 2.5-冗余VLAN
2.5-冗余VLAN High-Availability(AH) First hop routers on the LAN redundancy Network/首跳冗余网络(出口第一个网络) ...
- 动态配置 JBOSS ( eap 6.2 ) 数据源
操作环境 windows + jboss eap 6.2 + MyEclipse 10.0 项目用的是jboss eap 6.2,作为Red公司升级后的eap稳定版. 相比之前的 AS 系列,不管是安 ...
- Apache Traffic Server 5.3.1公布
本文来源于我在InfoQ中文站翻译的文章,原文地址是:www.infoq.com/cn/news/2015/07/traffic-server-5.3.1-release 近日,Apache软件基金会 ...
- SharePoint 2013 关闭 customErrors
在SharePoint 2013上做开发时,如果不把customErrors 关掉,那调试起来那真叫一个费劲.在2013里,关闭customErrors 和2010一样,只要把文件路径改成15目录下即 ...
- c++ 基于Policy 的 模板编程
在没真正接触c++ 模板编程之前.真的没有想到c++ 还能够这么用.最大的感触是:太灵活了,太强大了. 最初接触模板威力还是在Delta3d中,感觉里面的模板使用实在是灵活与方便,特别是dtAI中使 ...
- luogu2157 [SDOI2009]学校食堂 局部状压
题目大意 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数 ...
- luogu2577 [ZJOI2005] 午餐 贪心
题目大意 THU ACM小组的吃饭计划是这样的:先把所有的人分成两队,并安排好每队中各人的排列顺序,然后一号队伍到一号窗口去排队打饭,二号队伍到二号窗口去排队打饭.每个人打完饭后立刻开始吃,所有人都吃 ...
- bzoj2132: 圈地计划(无比强大的最小割)
2132: 圈地计划 题目:传送门 简要题意: 给出一个矩阵,一共n*m个点,并给出三个收益矩阵.A矩阵表示这个点建A的可取收益,B矩阵表示这个点建B的可取收益,C矩阵表示如果相邻(有且仅有一条公共边 ...
- C# 验证数字的正则表达式集
验证数字的正则表达式集 博客分类: 正则 正则表达式 验证数字的正则表达式集 验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d ...
- EOJ 1501/UVa The Blocks Problem
Many areas of Computer Science use simple, abstract domains for both analytical and empirical studie ...