10.23学习总结
目录一、常见内置函数
1.abs():求绝对值
2.all():所有的数据值都为True的情况下 结果才是True
3.any():所有的数据值只要有一个为True 结果就是True
4.bin() oct() hex() 十进制转其他进制
print(bin(10)) # 0b1010
print(oct(10)) # 0o12
print(hex(10)) # 0xa
5.int():类型转换 其他进制转十进制
6.bytes():类型转换
7.chr() ord():# 依据ASCII码表实现字符与数字的转换chr将字符转数字 ord将数字专字符
8.dir():# 获取对象内部可以通过句点符获取的数据
9.divmod():# 获取除法之后的整数和余数
10.enumerate():# 枚举
11.eval() exec():# 能够识别字符串中python代码并执行
12.hash():# 返回一串随机的数字(哈希值)
13.help():# 查看帮助信息
14.isinstance():# 判断某个数据是否属于某个数据类型
15.pow():# 幂指数
16.round():# 大致:四舍五入
二、可迭代对象
1.迭代的理解:
迭代就是在原来的基础上进行更新
2.基础结构:
内置有__iter__方法的都叫做可迭代对象
内置是通过句点符能直接点出来的东西
__iter__读法:双下iter
3.可迭代对象分类:
可迭代类型:字符串、列表、元组、集合、文件
不可迭代类型:整型、浮点型、布尔值、函数名
三、迭代器对象
1.迭代器的作用:
迭代器可以不依赖于索引取值 可以对字典、集合等无序类型进行循环取值,但只能向前取不能来回取
2.迭代器对象结构:
内置有__iter__和__next__的对象都称为迭代器对象
3.可迭代对象与迭代器对象的关系:
可迭代对象调用__iter__方法之后就会变成迭代器对象
迭代器对象再调用__iter__还是迭代器对象本身
l1 = [1,2,3,4,5]
res = l1.__iter__()
print(res.__next__())
'''
打印结果
1
2
3
4
5
'''
# 可迭代对象 迭代器对象 通过打印操作无法直接看出内部数据,可以节省内存,当你需要的时候要一个拿一个。
四、生成器对象
1.什么是生成器
本质就是迭代器只不过迭代器是解释器提供的而生成器是我们自己定义出来的,依然有内置__iter__和__next__
2.生成器代码实现
def index():
print('打印我')
yield 1,2,3
res = index()
res.__next___()
'''
当函数体代码中有yield关键字
那么第一次调用函数的时候不会执行
而是把函数变成了生成器 返回值
yield可以在函数体代码中多次出现
调用__next__方法从上往下执行遇到yield代码会停留
yield后面有数据值 则会像return一样返回
多个数据值用逗号隔开 组织成元组返回'''
3.生成器表达式
l1 = (i**2 for i in range(10) if i > 3)
五、for循环的本质
1.语法结构:
for 变量名 in 可迭代对象:
for 循环体代码
3.for会自动将in后面的数据调用__iter__()变成迭代器对象之后调用__next__()取值
4.for能自动处理最后没有值报错问题
六、异常捕获
1.什么是异常
异常就是程序在运行过程中出现的报错 称为:‘bug’
2.异常结构
关键字line:精准提示你哪一行代码出错
最后一行左侧:错误的类型
最后一行右侧:错误的具体原因(关键信息)
3.异常的类型
NameError:名称错误
IndexError:索引错误
KeyError:健错误
SyntaxError:语法错误
TypeError:类型错误
4.异常的分类
语法错误:致命错误!!!!
逻辑错误:可以出现,即使修改!!
七、异常捕获语法
1.什么时候需要
当不确定代码什么时候会报错的情况下,类似提前预测可能出现的问题做好处理措施
2.代码实现
try:
检测的代码
except 错误类型1 as e: # e是具体报错原因
处理措施
except 错误类型2 as e: # e是具体报错原因
处理措施
'''万能异常'''
try:
检测代码
except Exception as e:
print(e)
except BaseException as e:
print(e)
'''当不知道具体会是什么错误类型时可以用
万能异常处理:Exception、BaseException'''
3.else与finally
try:
检测代码
except Exception as e:
print('你出错了')
else:
print('监测的代码没有出错的情况下正常运行结束 则会执行else子代码')
finally:
print('try监测的代码无论有没有出错 最后都会执行finally子代码')
4.断言
name = 'aaa'
assert isinstance(name,str) # True
assert isinstance(name,list) # False
'''传入一个数据提前预测它是什么类型返回布尔值'''
# 因为try监测需要占用内存资源所以被检测的代码能少就少能不用异常捕获就不用。
八、 迭代取值与索引取值的差异
索引取值:
优势:可以随意反复的获取任意数据值
劣势:针对无序的容器类型无法取值
迭代取值
优势:提供了一种通用的取值方式
劣势:取值一旦开始只能往前不能回退
ps:没有谁好谁差,按实际需求选中使用的就好
九、模块
1.模块简介
模块就是结合了一系列功能的结合体,表现形式为py文件
分为三类:
内置模块:解释器自带的可以直接调用
自定义模块:自己写的模块
第三方模块:别人写的模块使用前要先从网上下载
2.导入模块的句式
句式1: import
1.会产生执行文件的名称空间
2.产生被导入文件的名称空间并运行该文件内所有的代码 存储名字
3.在执行文件中会获取一个模块的名字 通过该名字点的方式就可以使用到被导入文件名称空间中的名字
句式2:from...import...句式
1.创建执行文件的名称空间
2.创建被导入文件的名称空间
3.执行被导入文件中的代码 将产生的名字存储到被导入文件的名称空间中
4.在执行文件中获取到指定的名字 指向被导入文件的名称空间
3.两种句式的优缺
import md
优点:通过md点的方式可以使用到模块内所有的名字 并且不会冲突
缺点:md什么都可以点 有时候并不想让所有的名字都能被使用
from md import money, read1
优点:指名道姓的使用指定的名字 并且不需要加模块名前缀
缺点:名字及其容易产生冲突(绑定关系被修改)
4.导入小知识
from md import * #表示导入所以
在模块文件中可以使用__all__ = [字符串的名字]控制*能获取的名字
5.判断文件类型
__name__的结果是__main__则该文件是执行文件
__name__的结果是模块名 则该文件是被导入文件
主要用于开发模块的作者测试自己的代码使用
if __name__ == '__main__':
当是执行文件时会执行
6.模块的查找顺序
内存>>>内置>>>sys.path(程序系统环境变量)
1.通用方式
sys.path.append(目标文件所在路径)
2.from...import句式
eg:from 目录import 模块名
十、路径
1.绝对导入
导入模块时sys.path永远以执行文件为起点一层一层的往下找
from 文件夹名 import 模块文件名
'''eg:如果要调用与执行文件同级的aa文件夹下的bb文件夹中的c模块'''
from aa.bb import c
2.相对导入
. : 在路径中表示当前路径
.. : 在路径中表示上一层的路径
../.. : 在路径中表示上上一层路径
from .. import m1
from ../.. import m2
相对导入只能在模块文件中使用不能在执行文件中使用
当项目目录比较复杂的情况下很有可能会出错(因此推荐使用绝对导入)
十一、包
1.什么是理解包
内部含有__init__.py的文件夹,就是一个文件夹
2.包的作用
内部存放多个py文件(模块文件) 仅仅是为了更加方便的管理模块文件
3.具体使用
import 包名
导入包名其实导入的是里面的__init__.py文件(该文件里面有什么你才能用什么)
其实也可以跨过__init__.py直接导入包里面的模块文件
ps:在python3解释器 其实文件夹里面有没有__init__.py已经无所谓了,但是在Python2解释器 文件夹下面必须要有__init__.py才能被当做包,为了兼容性还是加上。
十一、 软件开发目录规范
1.bin文件夹
用于存储程序的启动文件 start.py
2.conf文件夹
用于存储程序的配置文件 settings.py
3.core文件夹
用于存储程序的核心逻辑 src.py
4.lib文件夹
用于存储程序的公共功能 common.py
5.db文件夹
用于存储程序的数据文件 userinfo.txt
6.log文件夹
用于存储程序的日志文件 log.log
7.interface文件夹
用于存储程序的接口文件 user.py order.py goods.py
8.readme文件(文本文件)
用于编写程序的说明、介绍、广告 类似于产品说明书
9.requirements.txt文件
用于存储程序所需的第三方模块名称和版本
ps:并不是强制要求按上面的一模一样来,只要做到分类名字取什么没有统一规定。
十二、常见内置模块
1.collections模块
# 创建一个和tuple类似的对象 # from collections import namedtuple
# 双端队列 # from collections import deque
# 有序字典 # from collections import OrderedDict
# 完成计数 # from collections import Counter
2.时间模块之time模块
常见时间日期格式化符号
%y 表示年份(00-99)
%m 表示月份(1-12)
%d 表示一个月中的天数(1-31)
%H 表示24小时制的时数(0-24)
%I 表示12小时制的时数(1-12)
%M 表示分钟(0-59)
%S 表示秒数(0-59)
%j 表示一年内的第几天(1-366)
%w 表示星期几
%x 当地相应的日期表示
%X 当地相应的时间表示
表示时间的三种格式:
(1).时间戳:time.time()
时间戳都表示从1970年1月1日0时到现在经过了多长时间
(2).结构化时间:time.gmtime()
将一个时间戳转换为UTC时区
符号 属性
tm_year 表示年份
tm_mon 表示月份
tm_mday 表示天数
tm_hour 表示小时
tm_min 表示分钟
tm_sec 表示秒钟
tm_wday 表示一周的第几天
(3).格式化时间:time.strftime()
用于格式化时间,返回以可读字符串表示的当地
import datetime
naw_date = datetime.datetime.today() # 打印现在的日期和时间
naw_time = datetime.date.today() # 打印当前日期
print(naw_date) # 2022-07-15 15:53:49.136500
print(naw_time) # 2022-07-15
print(naw_date.year) # 2022
print(naw_date.month) # 7
print(naw_date.weekday()) # 4
print(naw_date.date()) # 2022-07-15
print(naw_date.isoweekday()) # 5
4.os模块
(1) os.mkdir()、os.makedirs():创建目录
传入一个路径,创建目录,当目录存在的话会报错所以我们可以用异常处理,或者
(2) os.rmdir()、os.removedirs():删除目录
传入一个路径,删除指定路径下的文件夹,只能删除空文件夹,删除非空文件夹会报错。
(3) os.listdir():列举指定路径下的文件名称(文件、目录)
传入一个路径,返回的是该路径下所有文件和目录以列表形式返回;
(4) os.rename():重命名文件
传入一个文件名,再有逗号隔开传入新名字
(5) os.remove():删除文件
传入一个文件名进行删除
(6) os.getcwd():获取当前工作路径
获取当前工作的绝对路径
(7) os.path.dirname():获取当前文件所在的目录路径
也可以传入一个完整的路径,只获取绝对绝对路径
(8) os.path.abspath(__file__):获取当前文件的绝对路径
(9) os.path.exists()、os.path.isdir()、os.path.isfile:判断路径是否存在(文件、目录)
传入一个路径,判断指定路径下是否存在。存在返回True,否则返回False
(10) os.path.join():拼接路径
传入两个路径,将该路径拼接起来,形成一个新的完整路径
(11) os.path.getsize():获取文件大小
传入一个文件的路径,返回该文件的大小(bytes)
5.sys模块
path():
返回模块的搜索路径列表
version():
返回 Python 解释器的版本信息
platform():
返回操作系统平台名称
6.json模块
dumps:
传入一个字典将其编码为json格式的字符串
import json
test_dict = {'name':'aaa','age':18,'habby':'run'}
data = json.dumps(test_dict)
print(data,type(data))
'''打印结果
{"name": "aaa", "age": 18, "habby": "run"} <class 'str'>
'''
loads:
传入一个json格式将其解码为字典
import json
test_dict = {'name':'aaa','age':18,'habby':'run'}
data = json.dumps(test_dict)
json_dict = json.loads(data)
print(json_dict,type(json_dict))
'''打印结果
{'name': 'aaa', 'age': 18, 'habby': 'run'} <class 'dict'>'''
ps:首先肯定是字符串 其次引号是标志性的双引号,用于不同编程语言之间数据交互必备的模块
标签:总结,__,10.23,迭代,文件,学习,模块,print,import
From: https://www.cnblogs.com/zx0524/p/16818970.html