美文网首页
day6Python(迭代器、生成器、异常处理、os)

day6Python(迭代器、生成器、异常处理、os)

作者: 以我丶之姓 | 来源:发表于2018-04-08 11:58 被阅读0次

一、迭代器和生成器

可迭代对象:可以直接作用于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

迭代器:

  1. 迭代器必须是一个可迭代对象
  2. 有两个方法iter() next()
  3. 我们也可以使用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关键字

  1. 使用列表生成式(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() 拆分路径

相关文章

  • day6Python(迭代器、生成器、异常处理、os)

    一、迭代器和生成器 可迭代对象:可以直接作用于for循环的对象统称为可迭代对象(iterable)用isinsta...

  • 2019-03-20

    1 迭代器和生成器 迭代器 获取数据:next (迭代器)、for 循环遍历 ,数据来源:转换、生成器 生成器:...

  • yield and Iterator

    Generator(生成器) 生成器是特殊的迭代器,迭代器不一定是生成器。 生成器与迭代器均是可迭代对象。 目前学...

  • 14. Python之迭代器(iterator)和生成器(gen

    1 什么是迭代器 2 为何要有迭代器 3 如何用迭代器 4 生成器 生成器应用案例

  • 第014篇:三大神器之生成器

    Python的三大神器:装饰器、迭代器、生成器 1、生成器 1.1、什么是生成器 生成器就是迭代器的一种;生成器作...

  • ES6 ES7 语法特性与规范

    生成器函数 说生成器之前先讲迭代器,下面就是迭代器的简单范例,迭代器代表一个流程,迭代器的每次next()调用,会...

  • Python基础-16生成器-迭代器

    16.生成器-迭代器     可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象,在Python中提供...

  • 迭代器

    可迭代对象(Iterable): for迭代器(Iterator): for + next生成器属于迭代器。 验...

  • Python :生成器、迭代器、装饰器、递归函数与正则表达式

    Python 第四篇:生成器、迭代器、装饰器、递归函数与正则表达式 Python迭代器和生成器 Python 迭代...

  • Python生成器

    1 生成器概念 生成器是一个特殊的迭代器(迭代器的抽象层级更高)所以,生成器拥有迭代器的特性:1.惰性计算,节省内...

网友评论

      本文标题:day6Python(迭代器、生成器、异常处理、os)

      本文链接:https://www.haomeiwen.com/subject/aoqphftx.html