第五周周总结
作者:互联网
-
目录
-
-
常见内置函数
-
可迭代对象
-
迭代器对象
-
for循环的本质
-
异常捕获
-
生成器
-
索引取值与迭代取值
-
模块
-
判断文件类型
-
绝对导入与相对导入
-
包的简介
-
软件开发目录规范
-
内置模块
-
-
常见内置函数
1.abs() print(abs(-30)) # 30 取绝对值 2.all()与any() l1 = [1, 3, 5, 0] print(all(l1)) # False 判断列表数据中的布尔值类型(相当于 and) print(any(l1)) # True 判断列表数据中的布尔值类型(相当于 or) 3.ASCII() 英语与二进制数的转换 4.bin()、oct()、hex() 十进制与二进制、八进制、十六进制的转换 5.bool()、dict()、float()、int()、list()、set()、str()、 bytes()、type() 数据类型转换与查看数据类型 6.callable() 判断是否可以调用 7.ord()与chr() print(ord('c')) # 99 字母对应数字数 print(chr(99)) # c 数字数对应字母 8.dir() # 查看数据类型中的数据 9.divmod(x,y) # x/y 的整数部分与余数部分组成元组 print(divmod(88, 9)) # (9, 7) 10.enumerate() # 枚举 将列表中的数据一个个for循环得出数据与对应的索引值 l1 = [1, 3, 5] print(enumerate(l1)) # <enumerate object at 0x0000024396729F98> for i, j in enumerate(l1): print(i, j) 11.eval()、exec() 识别字符串中代码的运行 res = 'print(123)' res1 ='for i in range(2):print(i)' eval(res) # 123 识别简单的字符串中代码的运行 exec(res1) # 0 1 识别复杂的字符串中代码的运行 12.filter() # 过滤序列中不符合条件的数据 13.format() # 支持关键字取值(按k取值) 并且支持重复使用 14.help() # 查看帮助信息 15.id() # 查看内存地址 16.input()与print() # 输入 输出 17.isinstance() 判断数据类型 print(isinstance([1, 2, 3], int)) # False 18.len() 统计数据值个数 l1 = (0, 1) print(len(l1)) # 2 19.map() # 映射 列表中所以数据增加或减少同一个数 20.max()与min()、sum() # 最大值与最小值、求和 l1 = [1, 2, 3] print(max(l1)) # 3 print(min(l1)) # 1 print(sum(l1)) # 6 21.next() # 将可迭代对象转换成迭代器对象 22.open() # 打开文件方式 23.pow() # 幂指数 print(pow(2, 5)) # 32 2的5次方 24.range() # 数据范围 for i in range(3): print(i) # 0 1 2 25.round() # 四舍五入 print(round(222.2)) # 222 26.zip() l2 = 'jason' res = zip(l2) print(list(res)) # [('j',), ('a',), ('s',), ('o',), ('n',)]
-
可迭代对象
1.迭代概念:更新换代,每次迭代使用上一次的结果
2.类型:
2.1.# int 不是可迭代对象
2.2.# float 不是可迭代对象
2.3.# bool 不是可迭代对象
2.4.#函数名 不是可迭代对象
2.5.# str.__iter__() 可迭代对象
2.6.# list.__iter__() 可迭代对象
2.7.# tuple.__iter__() 可迭代对象
2.8.# set.__iter__() 可迭代对象
2.9.# dict.__iter__() 可迭代对象
2.10.# 文件 可迭代对象本身是迭代器对象
3.判断方式
内置有__iter__方法的都可称为可迭代对象,可迭代对象支持for循环
while True: print('123') # 不是可迭代对象 count = 1 while count < 4: print('123') # 是可迭代对象 count += 1
-
迭代器对象
1.作用:取值方式不依赖索引取值,可以对字典、元组无序数据类型循环取值
2.类型:
str.__iter__().__next__()
list.__iter__().__next__()
tuple.__iter__().__next__()
set.__iter__().__next__()
dict.__iter__().__next__()
with open(r'01常见内置函数.py',encoding='utf8') as f:
f.__next__()
f.__iter__().__next__()
3.判断方式
内置有__iter__与__next__方法的称为迭代器对象,可迭代对象先调用__iter__方法之后变成迭代器对象,迭代器对象调用多次__iter__都是它本身
4.迭代器对象取值
4.1 列表取值 l1 = [1, 2, 3, 4] res = l1.__iter__() print(res.__next__()) # 1 print(res.__next__()) # 2 print(res.__next__()) # 3 print(res.__next__()) # 4 print(res.__next__()) # 报错 4.2 字典取值 l1 = {'name':'jason','pwd':123} res = l1.__iter__() print(res.__next__()) # name print(res.__next__()) # pwd 4.3 使用while循环取值 l1 = [22, 34, 55, 67] res = l1.__iter__() count = 0 while count < len(l1): print(res.__next__()) count += 1
5.补充
5.1 迭代器的反复使用 5.1.1 每次都是产生一个新的迭代器对象 l1 = {'name':'jason','pwd':123} print(l1.__iter__().__next__()) # name print(l1.__iter__().__next__()) # name 5.1.2 每次使用的都是一个迭代器对象 l1 = {'name':'jason','pwd':123} res = l1.__iter__() print(res.__next__()) # name print(res.__next__()) # pwd 5.2 双下方法 res = l.__iter__() # 可以简写iter(l) res.__next__() # 可以简写next(res1) 5.3 迭代器对象的特殊地方 可迭代对象与迭代器对象通过打印无法查看内部数据情况,目的是为 了节省内存
6.索引取值与迭代取值
6.1 索引取值:
优点:可以反复获取任意位置的数据
缺点:必须是有序的数据类型才可以采用索引取值
6.2 迭代取值:
优点:可以对有序或无序的数据类型进行取值
缺点:取值开始只能从开始到结束取值不能反复获取任意位置的数据
-
for循环的本质
1.语法结构:for 变量名 in 可迭代对象:
2.循环步骤:
2.1 for会自动将in后面的数据调用__iter__()变成可迭代对象
2.2 每次循环调用__next__()取值
2.3 最后没有值__next__()会报错,但for能够自动处理该错误,让循环正常结束
-
异常捕获
1.异常:当程序出现异常整个程序会停止(BUG)
2.异常的结构
2.1.line关键字:表示代码错误存在的行数
2.2.最后一行冒号左边(NameError):表示代码错误的分类
2.3.最后一行冒号后边(name 'name' is not defined):表示代码错误的原因
3.异常的分类
3.1 语法错误:不可以出现错误,及时发现及时修改
3.2 逻辑错误:允许出现的错误
4.异常的类型
4.1 SyntaxError:语法错误
4.2 NameError:命名错误
4.3 IndexError:列表索引超出范围错误
4.4 KeyError:使用字典里不存在的key产生的错误
4.5 TypeError:类型错误
4.6 IndentationError:缩进错误
5.异常捕获的目的及结构
5.1 目的:当写的代码不确定是否报错时,提前预测可能出现的问题及解决的办法
5.2.异常捕获的结构:
try:
异常代码
except 异常类型 as e (异常原因)
错误的解决办法
6.异常捕获的万能结构
try:
错误代码
except as Exception(BaseException) e(e错误的具体原因)
print(e) (错误的解决办法)
7.异常捕获的其他操作
7.1 try...except....语句与else及finally使用
7.1.1 else是异常处理时的可选分支,必须在except的分支之后,代码未出现错误执行该分支
7.1.2 finally是无论代码正确或错误都会执行该分支
7.2 断言 assert:判断布尔值是否为True ,不是直接报错终止运行
7.3 主动抛异常 raise:引发异常
7.4 异常捕获尽量少用
-
生成器
1.生成器对象:本质是迭代器对象,定义一个yield为返回值的函数,调用函数就创建了一个生成器,再使用__inter__执行
2.目的:不依靠索引取值,节省内存
3.语法结构:定义一个函数以yelid为返回值,调用时将普通函数变成生成器
4.执行步骤:函数调用时不执行,将函数变为生成器,函数体代码中可存在多个yield,每次调用__inter__,从上往下执行,遇到yield停止
5.yield.......send
6.生成器表达式:先执行for循环将一个个数值取出交给if判断,然后将符合条件的数据交给for前面的条件去执行
l1 = [i+1 for i in range(10)]
-
模块
1.简介:拥有一些列功能的结合体,使用模块就等同于使用所拥有的所以功能
2.分类:
2.1 内置模块 :编辑器自带的,可以直接使用
2.2 自定义模块:自己编写
2.3 第三方模块:别人编写好的,在网上下载可以使用的
3.表现形式:
3.1 py文件也称为模块文件
3.2 多个py文件按照功能不同归类放置文件夹中
3.3 已被编译成共享库或DLL或C或C++扩展
3.4 使用C编写并链接到python解释器的内置模块
4.模块导入
4.1 模块导入方式
4.1.1 import语句:执行模块中名称空间的所有代码储存的名字引用到被导入文件的名称空间中,通过执行模块名加点的方式使用所有数据
优点:可以一次使用被导入文件中名称空间中的所有数据
缺点:名字太多不太方便查找
4.1.2 from....import.语句:可以将模块名字的指定代码储存的名字引用到被导入文件的名称空间中,然后使用名字就可以使用对应的数据
优点:指明道姓的导入,方便查找
缺点:存在重命名不易被发现从而数据引用错误
4.1.3 模块导入补充:
重命名:多个模块模块名相同(多人写)或原有模块名复杂
格式 : from 模块名 import 成员名 as 别名
导入多个模块文件:模块功能相似可一次导入,没有关系的尽量分别导入
格式:import 模块名1,模块名2,模块名3
import 模块名1
import 模块名2
import 模块名3
导入同一模块文件中的多个名字(同一模块,推荐使用)
格式:from 模块名 import 名字1,名字2,名字3
当必须使用from.....import....语句导入模块文件中所有名字(全导入)
格式:from 模块名 import * # * 表示所有 可通过__all__控制导入的名字数量
4.2 循环导入
4.2.1 概念:模块文件互相导入彼此
4.2.2 存在的问题及解决办法:互相导入容易出现报错,所以可以在彼此导入之前准备好彼此所需名字,尽可能不使用循环导入
4.3 模块查找顺序
4.3.1 先从内存中查找
导入一个文件,在导入过程中删除,还可以使用(存在于内存中),再次将无法使用,内存数据也已删除
4.3.2 再从内置中查找
创建模块时尽量不要使用和内置模块名相同的名字
4.3.3 再从sys.path(程序系统环境变量)
返回的是一个列表,里面存在多个文件路径,但第一位的一定是执行文件所在的文件路径
-
判断文件类型
1 所有的py文件都自带有__name__内置名,作用是开发作者主要用来测试自己的代码,在pycharm中可以直接输入main按tap键补全
1.1 当文件时执行文件时__name__的结果是__main__
1.2 当文件时被导入文件时__name__的结果是模块
-
绝对导入与相对导入
1.绝对导入:以执行文件所在的sys.path为起始路径 往下一层层查找
2.相对导入:相对导入可以不参考执行文件所在的路径 直接以当前模块文件路径为准(只能在模块文件中使用,情况复杂容易出错,尽量少用)
2.1 . 当前路径
2.2 .. 上一层路径
2.3 ../.. 上上层路径
-
包
1.定义:带有空的__init__.py文件的文件夹
2.作用:分类汇总存放多个py文件,为了方便管理
3.使用:import+包名 导入包名其实导入的是__init__.py文件
4.注:
针对python3解释器 其实文件夹里面有没有__init__.py已经无所谓了 都是包
但是针对Python2解释器 文件夹下面必须要有__init__.py才能被当做包
5.编程思想
5.1 小白 :面条版代码
5.2 函数 :功能定义为函数
5.3 模块 :按照功能不同放置模块
-
软件开发及目录规范
1.bin文件夹:放置程序启动文件
2.conf文件夹:放置程序配置文件
3.cour文件夹:放置程序核心逻辑文件
4.lib文件夹:放置程序公共信息文件
5.db文件夹:放置程序数据文件
6.log文件夹:放置程序日志文件
7.interface文件夹:放置程序接口文件
8.readme文件:类似于说明书信息文件
9.requirements文件:第三方模块及说明信息文件
-
内置模块
1.time模块
1.1 time.time:时间戳 此时至1970年1月1日0时0分0秒的秒数
1.2 time.getime:结构化时间
1.3 time.strftime:格式化时间
1.3.1 时间表达方式 :
time.strftime('%Y-%m-%d %T')
time.strftime('%Y-%m-%d %X')
time.strftime('%Y-%m-%d %H:%M:%S')
time.strftime('%H:%M:%S')
2.datetime模块
2.1. datetime-表示某年-某月-某日 某时:某分:某秒
datetime(年,月,日,时,分,秒) 年-月-日 时:分:秒
2.2. date-表示某年-某月-某日
date(年,月,日) 年-月-日
2.3. time-表示某时:某分:某秒
time(时,分,秒) 时:分:秒
2.4. timedelta-表示显示是天数和小时分钟秒数(不过单位可以换算)
timedelta(week=周数/day=天数/hour=小时/minutes=分钟) # 14 days, 1:00:00
2.5. datetime.now-此时此刻的时间
datetime.now() 年-月-日 时:分:秒小数后六位
2.6. datetime.utcnow-格林尼治时间(本初子午线)
datetime.utcnow() 年-月-日 时:分:秒小数后六位(第一时区与我们差8小时)
3.collection模块
3.1 双端队列deque:列表两端快速增加和删除数据
3.2 具名元组namedtuple
3.3 有序字典OrderedDict
4.os 模块
4.1. 创建目录(文件夹)
mkdr(r'目录名') 只能创建单个目录
nakedire(r'目录名1/目录名2/目录名3') 创建多级目录
4.2.删除目录(文件夹)
rmdir(r'目录名') 只能删除同路径下单个目录
remove(r'文件名') 只能删除同路径下的单个文件
removedirs(r'目录名1/目录名2/目录名3') 删除多级目录
4.3.查看路径文件
listdir() 查看文件所在路径或指定路径下的文件
4.4.重命名
rename(r'旧文件或文件夹名',r'新的文件或文件夹名') 修改当前路径下的文件名或者文件夹名
4.5.查看文件所在路径
os.path.abspath(__file__)
os.path.dirname(__file__)
4.6.判断路径下的文件或文件夹是否存在
os.path.exists(r'文件或文件夹名') 存在True
4.6.1 判断路径下文件夹是否存在
os.path.isdir(r'文件夹名') 存在True
4.6.2 判断路径下文件是否存在
os.path.isfile(r'文件名') 存在True
4.7.路径拼接
os.path.join(路径1,路径2)
4.8.计算文件内的字节数
os.path.getsize(r'文件名')
5.sys模块
1.sys.path.append()
可以当前执行文件所在的环境变量及将文件路径增加至环境变量中,输出的是列表形式
2.platform:查看当前平台
3.version:查看解释器
4.argv :判读取命令行参数,其中保存了程序的文件名和命令行参数,读入的参数以元组的形式保存
6.json模块
6.1.dump(数据变量名,写文件f)
将对应的数据类型的数据以json格式的字符串类型的数据("双引号格式")写入文件
6.2.load(读取文件f)
以变量名接收打印,将json格式的字符串数据类型的数据读取文件并转换为对应的数据类型
6.3.dumps(数据变量名)
将对应的数据类型的数据转换为以json格式的字符串类型的数据("双引号格式")
6.4.loads(数据类型转变后接收的变量名)
将json格式的字符串数据类型的数据转换成对应的数据类型
标签:总结,__,.__,迭代,文件,第五,周周,模块,print 来源: https://www.cnblogs.com/040714zq/p/16485320.html