目录
异常
程序在运行时可能出现的异常,我们常说为bug
在错误中:
语法错误是不被允许的,如果出现需要立即修改,否则提桶跑路。
逻辑错误是可以被允许的,应为是一眼不能直接发现的,在程序运行中可能会出现。
异常处理语法
try:
待监测代码
except 错误类型 as f:
错误处理解决方案
except Exceptio(万能错误类型) as f:
错误处理解决方案
else:
不出错执行的方案
finally:
无论出不出错,都执行
断言
name = 'xiao'
assert isinstance(name,int)
主动抛异常
a = 'name'
if a =='name':
raise Exception('呵呵')
else:
print('啊啊啊')
生成器
简化生成器
(i*2 for i in range(5))
自定义生成器
本质是内部有双下iter,和双下next放法的迭代器
区别是生成器是程序员创建的,迭代器是解释器自动创建的
使用yield关键字
def 函数名():
函数体代码
yield 返回值 # 遇到yield立马停止返回返回值
函数体代码
yield 返回值
函数体代码
yield 返回值
res = 函数名() 不会立即执行需要使用next(res)方法来一次一次取数据,如果取完还使用next(res) 则会报错
yield冷门用法
# 生成器也是可迭代对象我们也可以通过for 循环依次进入生成器中取值
def data(user, skills=None):
print(f'{user}准备使用')
while True:
skills = yield # 通过sned方法获取数据 并赋值给前面的skills变量名
print(f'{user}正在使用{skills}')
res = data('tom')
res.__next__()
res.send('R:天崩地裂') # send() 将括号内的数据传给yield前面的变量名 2.再自动调用__next__
res.send('W:横扫千军')
模块
可以看作就是py文件内具有一定功能的python代码
模块在导入时,多次导入只会导入一次,后续导入则不执行
模块的分类
自定义模块
内置模块
第三方模块 其他大佬开发的
模块查找的顺序
内存空间
内置空间
项目环境路径
导入模块的两种方式
import 模块名
底层原理
1.先创建执行文件命名空间,开始执行执行代码。import 模块名
2.创建模块文件命名空间,执行模块里面的代码
3.执行文件采用点的方式调用模块文件功能代码
from ... import ...
底层原理
1.先创建执行文件命名空间,开始执行执行文件代码
from ... import ...
2.创建模块文件命名空间,执行模块里面的代码
3.把模块文件命名空间的变量名,一一绑定给执行文件命名空间
4.执行文件采用点的方式调用模块文件功能代码
循环导入
两个py文件互相导入,会出现报错,就是在定义之前,使用变量名,就会报错
底层原理
模块a导入模块b
import b
name = '1'
a.name
import a
name = '2'
a.name
这样会报错,在导入前就已经使用了
name = '2'
import a
a.name
这样就不会报错了
导包时一定要确定哪个时执行文件,哪个是模块文件
可以使用__name__ 判断 如果 等于 __main__ 者为执行文件,否则是模块文件
导包
包其实就是含有_init_.py文件的文件夹python3中对于包不是很敏感,但是为了兼容python2,还是加上_init_.py文件,导包的时候其实导入的就是init文件
软件开发目录
bin 项目启动文件夹
start.py 项目启动文件
conf 项目配置文件夹
settings.py 项目配置文件
core 项目核心目录
src.py 项目核心文件
interface 项目接口文件按
根据业务逻辑拆分文件
db 项目数据文件夹
db_handle.py 项目数据库文件
log 日志文件夹
log.log日志文件
lib 项目公共功能文件夹
common.py 项目公共功能文件
readme 项目介绍文件
requirements.txt 项目环境,所需模块,版本
编程思想的转变
细绳型,按照顺序一步一步向下执行,不容易修改
类似于把所有东西放到一个文件里面
函数型,把不同的功能,拆分利于维护和修改。
类似于把各种不同文件,视频文件,音频文件,图片文件。文本文件,放到一个盘里
模块型,把不同的功能放到不同文件,更有利于功能的维护,和开发
类似于把不同文件放到不同盘符,更容易查找和修改。
内置模块
collections模块
具名元组
from collections import nametuple
队列
from collections import deque
顺序字典
from collections import orderdict
计数
from collections import Counter
时间模块
time
import time
time.time() # 获取当前时间戳
time.strftime() # 格式化时间
time.strptime() # 格式化转结构化
time.localtime() # 结构化时间
time.sleep() # 程序执行后会,阻塞几秒中
datetime
from datetime import datetime,date
datetime.today() # 获取当前时间
datetime.now() # 获取当前时间
datetime.today().strftime() # 格式化时间
datetime.today().strptime()
date.today()
datetime.strftime()
datetime 年月日时分秒
date 年月日
random 随机模块
import random
import string
"""验证码"""
def codes(num):
re_code = ''
for i in range(num):
upwords = random.choice(string.ascii_uppercase)
lowords = random.choice(string.ascii_lowercase)
numwords = random.choic(string.digits)
code = random.choice(upwords,lowords,numwords)
re_code += code
return re_code
os模块 #主要与系统打交道
os.mkdir()
os.makedirs()
os.rmdir()
os.removedirs()
os.remove()
os.listdir()
os.getcwd()
os.char() # 切换路径
os.path.dirname()
os.path.absfile()
os.path.join()
os.path.exists()
os.path.isfile()
os.path.isdir()
sys模块 # 主要与解释打交道
sys.path 执行环境变量
sys.version 查看解释器版本
sys.argv # 就受cmd传来的数据
json模块
不同语言无法直接进行数据交换,但是可以通过json数据来进行数据交换,
json格式字符串,几乎所有的编程语言都能识别,转换成语言中对应的数据类型,所有可以用来进行,不同语言间的数据交换
json的内置方法
import json
操作数据值类型
name = {
'1':'123',
'2':"456"
}
res = json.dumps(name) # 把字典类型转换成json格式字符串
json.loads(res) # 把json格式字符串转换成python中的字典
操作文件类型
with open(文件路径,打开方式) as f:
json.dump(name,f) # 把字典数据写入文件,
res = json.dumps(name)
f.write(res)
json.load(f) # 把文件内json数据类型,转换成字典数据类型
底层其实就是
res = f.read()
json.loads(res)
标签:10,name,文件,json,模块,import,第二次,os,周报
From: https://www.cnblogs.com/clever-cat/p/16819155.html