知识回顾
- 异常常见类型
SyntanxError 语法错误
NameError 名字错误
IndexError 索引错误
KeyError 键错误
- 异常处理语法结构
1.基本语法
try:
待检测的代码
except 错误类型:
针对上述错误类型制定的方案、
2.万能异常
try:
待检测的代码
except Exception as e:
针对各种常见的错误类型全部统一处理
- 异常处理补充
1.断言
name = 'jason'
assert isinstance(name,str) # 断言这个变量名是字符串
print('肯定是字符串')
name.strip()
2.主动抛异常
name = 'jason'
if name == 'jason'
raise Exception('老子不敢了') # 直接抛出一个异常
else:
print('正常执行')
- 异常处理实战应用
实际应用:当代码中可能出现一些无法控制的情况报错才考虑使用
课堂练习:
l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99]
res = l1.__iter__()
while True:
try:
ret = res.__next__()
print(ret)
except Exception as e: # 出现异常直接结束循环
break
- 生成器对象
1.本质
内置有__iter__和__next__的迭代器对象
2.区别
迭代器对象是解释器自动提供给我们的
数据类型、文件对象>>>:迭代器对象
3.创建生成器的基本语法
函数体代码中填写yield关键字
def my_iter():
print('嘿嘿嘿')
yield
"""
1.函数体代码中如果有yield关键字,那么函数名加括号并不会执行函数体代码,会生成一个生成器对象(迭代器对象)
2.使用加括号之后的结果调用__next__才会执行函数体代码
3.每次执行完__next__代码都会停在yield位置,下次基于该位置继续往下找第二个yield
4.yield也可以当做返回值使用
"""
- 生成器对象实现range方法
range方法:
def my_range(star_num,end_num = 0,my_lan = 0):
if end_num == 0:
end_num = star_num
star_num = 0
while star_num < end_num:
yield star_num
star_num += my_lan
- 生成器表达式
生成器的简化写法:
l1 = (i ** 2 for i in range(100)) # 括号就代表生成器
- 索引取值与迭代取值的差异
索引取值:可以任意位置,任意次数取值,不支持无序类型的数据取值
迭代取值:只能从前往后取值,支持所有类型的数据取值
- 模块简介
1.模块的本质
内部具有一定功能(代码)的py文件
2.python模块的表现形式
1.py文件(py文件也可以称之为是模块文件)
2.含有多个py文件的文件夹
- 导入模块的句式补充
"""
1.导入模块一定要搞清楚谁是执行文件,谁是被导入文件
2.导入模块文件不需要填写后缀名
"""
1.import 句式
"""
1.先产生执行文件的名称空间
2.执行被导入文件的代码将产生的名字放入被导入文件的名称空间中
3.在执行文件的名称空间中产生一个模块的名字
4.在执行文件中使用该模块名点的方式使用模块名称空间中所有的名字
"""
2.from ... import ...句式
"""
1.先产生执行文件名称空间
2.执行被导入文件的代码将产生的名字放入被导入文件的名称空间中
3.在执行文件的名称空间中产生对应的名字绑定模块名称空间中对应的名字
4.在执行文件中直接使用名字就可以访问名称空间中对应的名字
"""
- 导入模块的补充说明
1.import与from...import...两者优缺点
import句式:
由于使用模块名称空间中的名字都需要模块名点的方式才可以用,所以不会轻易的被执行文件中的名字替换掉,但是必须每次使用点的方式才可以
from...import..句式:
指名道姓的导入模块名称空间中需要使用的名字,不需要模块名点,但是很容易跟执行文件中名字冲突
2.重复导入
解释器只会导入一次,后续重复的导入语句并不会执行
3.起别名
import 很长的模块名 as 起一个简短的名字使用
4.涉及到多个模块导入
建议使用:
import a
import b
- 循环导入问题及解决策略
1.循环导入
两个文件之间彼此导入彼此并且互相使用各种名称空间中的名字,极容易报错
2.如何解决循环导入问题
1.确保名字在使用之前已经准备完毕
2.在编写代码的过程中尽可能避免出现循环导入
- 判断文件类型
所有的py文件都可以直接打印__name__对应的值
当py文件是执行文件的时候__name__对应的值是__main__
当py文件是被导入文件的时候__name__对应的值的模块名
"""
from a import * *默认是将模块名称空间中所有的名字导入
__all__ = ['名字1','名字2'] 针对*可以限制拿的名字
"""
- 模块的查找顺序
1.内存
2.内置
3.执行文件所在的sys.path(系统环境变量)
- 模块的绝对导入与相对导入
绝对导入:
from mymd.aaa.bbb.ccc import name # 可以精确到变量名
from mymd.aaa.bbb import ddd # 也可以精确到模块名
ps:套路就是按照项目根目录一层层往下查找
相对导入:
.在路径中表示当前目录
..在路径表示上一层目录
..\..在路径表示上上一层目录
不在依据执行文件所在的sys.path 而是以模块自身路径为准
相对导入只能用于模块文件中 不能在执行文件中使用
- 包的具体使用
包:内部含有__init__.py文件的文件夹
- 编程思想的转变
1.面条版代码
2.函数版代码
3.模块版阶段
- 软件开发目录规范
-bin 存放项目启动文件
--star.py
-conf 存放项目配置文件
--settings.py 存放项目的默认配置,一般是大写
-core 存放项目核心文件
--src.py 项目核心功能
-interface 存放项目接口文件
--good.py
--user.py
--account.py
-db 存放项目数据文件
--userinfo.py
--db_handler.py 存放数据库操作相关代码
-log 存放项目日志文件
--log.log
-lib 存放项目公共功能
--common.py
-readme文件 存放项目相关说明
-requirements.txt 存放项目所需模块及版本
- collections模块
1.具名元组namedtuple:
from collections import namedtuple
# 表示二位坐标系
point = namedtuple('点',['x','y'])
p1 = point(1,2)
print(p1.x)
print(p1.y)
2.队列
队列:先进先出
堆栈:先进后出
- 时间模块
import time
"""
时间三种表现形式:
1.时间戳
2.结构化时间
3.格式化时间
"""
常用方法:
1.time.sleep()
推迟指定的时间运行,单位为秒
2.time.time()
获取时间戳
time.strftime
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 现在得具体时间
from datetime import date,datetime
print(date.today())
print(datetime.today())
e = datetime.strptime('2017年9月30日星期六8时42分24秒', '%Y年%m月%d日星期六%H时%M分%S秒')
print(e)
- 随机数模块
import random
print(random.random()) # 随机产生0到1之间的小数
print(random.randint()) # 随机产生括号内两个数之间的整数
print(random.randrange()) # 随机产生执行的整数
print(random.choice()) # 随机抽样一个
print(random.sample()) # 随机抽取指定的样本个数
随机验证码题:
import random
def get_code(n):
code = ''
for i in range():
random_upper = chr(random.randint(65,90))
random_lower = chr(random.randint(97,122))
random_num = int(random.randint(0,9))
temp = random.choice(random_num,random_lower,random_upper)
code += temp
return code
res = get_code(4)
print(res)
- os模块
import os
# 1.创建目录
os.mkdir()
os.makedirs()
# 2.删除目录
os.rmdir()
os.removedirs()
# 3.列举执行路径下的内容
os.listdir
# 4.删除,重命名
os.rename()
os.remove()
# 5.获取当前工作目录
os.getcwd()
os.chdir()
# 6.动态获取项目根拒绝
os.path.abspath()
os.path.dirname(__file__)
os.path.dirname(os.path.dirname(__file__))
# 7.判断路径是否存在
os.path.exists() # 路径是否存在
os.path.isfile() # 路径是否是文件
os.path.isdir() # 路径是否是目录
# 8.路径拼接
os.path.join()
# 9.获取文件大小
os.path.getsize
- sys模块
import sys
print(sys.path) # 获得当前文件的环境变量
- json模块
import json
# 跟数据交互
json.dumps() # 将字典转json格式
json.loads() # 将json格式转字典
# 跟文件交互
json.dump() # 将字典转json格式写入文件
json.load() # 将json格式转字典赋值给变量名
标签:__,文件,回顾,导入,模块,import,os
From: https://www.cnblogs.com/zhanghong1229/p/16819276.html