一、迭代器和生成器
可迭代对象:可以直接作用于for循环的对象统称为可迭代对象(iterable)用isinstance()来判断是否为可迭代对象。
判断是否为可迭代对象
实例:
from collections import Iterable
print(isinstance(1,Iterable)) #False
print(isinstance(1.2,Iterable)) #False
print(isinstance('abcd',Iterable)) #True
print(isinstance((),Iterable)) #True元组是可迭代对象
print(isinstance([],Iterable)) #True 列表
print(isinstance({},Iterable))#True 字典
print(isinstance({1,2},Iterable))#True 集合
print(isinstance(True,Iterable))#False
迭代器:
- 迭代器必须是一个可迭代对象
- 有两个方法iter() next()
- 我们也可以使用isinstance 来判断时候为迭代器
4.迭代器只能不断往后走,走完以后再往下走会报stopIteration的错误
实例:
from collections import Iterator #导入迭代器的数据类型
myStrIterator = iter('abcde')
print(myStrIterator)#<str_iterator object at 0x0200A390>b变成了一个迭代器
print(isinstance(myStrIterator,Iterator)) #True,是一个迭代器
print(isinstance('abcde',Iterator)) #False 是一个可迭代对象,而不是一个迭代器
#使用next()方法 一个一个取值
print(next(myStrIterator))#a
print(next(myStrIterator))#b
print(next(myStrIterator))#c
print(next(myStrIterator))#d
print(next(myStrIterator))#e
#迭代器依然可以作用于for循环
for i in myStrIterator:
print(i)
生成器
1.函数使用了yield关键字
- 使用列表生成式(i for i in range(1000))叫做生成器
3.生成器也可以使用迭代器的 next方法 进行一个一个取值
4.生成器的好处:节约电脑资源
使用列表推导式生成的生成器实例
#列表推导式
# myList = [i for i in range(1000)]
# print(myList)
#生成器也实现了迭代器的部分功能,也可以使用next()方法进行取值
myList = (i for i in range(1000))
print(next(myList))
print(next(myList))
print(next(myList))
print(next(myList))
使用函数的生成器
实例
def demo():
for i in range(1,10):
print(i)
yield i # 将yield修饰的变量进行返回 如果没有变量 则返回None
myGen = demo()
#一个一个取值
next(myGen)
next(myGen)
next(myGen)
next(myGen)
#也可以作用于for循环
for i in myGen:
print(i)
二、异常处理
概念:当程序遇到问题的时候,不让程序停止或者直接报错,越过错误继续向下而执行
主体结构:
try:
可能出现问题的代码块
except:
如果上面的代码出现异常,才会执行这里
#处理异常
(1)捕获特定的错误
实例:
try:
可能出现异常的代码块
except NameError:
如果上面的代码出现异常,才会执行这里
#处理异常
(2)多重捕获
会进行多次判断,如果是对应某一个的except就会执行,如果都没有满足走最后的except
注意:如果代码出现了多个错误,只会抓捕第一个错误
实例:
try:
name= 'xx'
print(name)
# int('avc')
1+'asdasd'
except NameError: #只要出现错误 就会走except 捕获所有的错误
print("我知道你报的是 NameError")
except ValueError:
print("我知道你报的是 ValueError")
except:
print("你就是有错了")
一个except 也可以捕获特定的某几个错误
try:
# name= 'xx'
# print(name)
# int('avc')
1+'asdasd'
except (NameError,ValueError,TypeError) as e:
print("你的错误是",e)
(3)配合else的使用
当代码没有出现异常的时候 走 else
try:
name= 'xx'
print(name)
# int('avc')
# 1+'asdasd'
except (NameError,ValueError,TypeError) as e:
print("你的错误是",e)
else:
print("代码没有异常走这里 常用来处理一些打开的链接 或者是资源")
(4)finally
不论代码是否出现异常都会走finally
try:
name= 'xx'
# print(name)
# int('avc')
# 1+'asdasd'
except NameError: #只要出现错误 就会走except 捕获所有的错误
print("我知道你报的是 NameError")
else:
print('没有出现 代码错误')
finally:
print('无论是否有错,都显示一下这句话')
(5)抛出异常
raise 异常名称(错误说明)
try:
# name= 'xx'
print(name)
# int('avc')
# 1+'asdasd'
except NameError: #只要出现错误 就会走except 捕获所有的错误
print("我知道你报的是 NameError")
else:
print('没有出现 代码错误')
finally:
print('无论是否有错,都显示一下这句话')
raise NameError("没有找到name")
三、os模块常用函数总结
函数名称 | 函数说明 |
---|---|
os.name | 获取操作系统的类型nt->windows posix->linuxmac |
os.environ | 获取操作系统中的所有环境变量 |
os.getcwd() | 获取当前的工作目录 |
os.listdir(path) | 以列表的形式返回当前目录的文件 |
os.mkdir() | 创建新的目录(创建新的文件夹) |
os.rmdir() | 删除目录(删除文件夹) |
os.rename(old,new) | 重命名 |
os.remove(filename) | 删除文件 |
os.system(command) | 运行shell命令 shutdown -s -f /shutdown -a |
os.path.join(dir,filename) | 拼凑完整路径 |
os.path.isdir() | 判断是否为目录 |
os.path.isfile() | 判断是否为文件 |
os.path.splitest() | 获取文件的扩展名 |
os.path.exists(path) | 判断文件或者目录是否存在 |
os.path.getsize(path) | 获取文件的大小(字节) |
os.path.dirname(path) | 获取目录名 |
os.path.basename(path) | 获取文件名 |
os.path.abspath() | 查看当前文件的绝对路径 |
os.path.split() | 拆分路径 |