博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 装饰器,生成器,迭代器
阅读量:5742 次
发布时间:2019-06-18

本文共 1959 字,大约阅读时间需要 6 分钟。

装饰器

  • 作用:当我们想要增强原来已有函数的功能,但不想(无法)修改原函数,可以使用装饰器解决

  • 使用:

    • 先写一个装饰器,就是一个函数,该函数接受一个函数作为参数,返回一个闭包,而且闭包中执行传递进来的函数,闭包中可以在函数执行的前后添加一些内容。

    • 在需要装饰的函数前添加@装饰器名就可以使用了,如:

      @zhuangshiqi def show():  pass
      • 再使用原函数时,就已经是装饰过的了

  • 示例1:无参无返回值

    def shuai(func):     def wrapper():         print('拉风的墨镜') func() print('脚穿大头鞋') return wrapper @shuai def mugai(): print('木盖,屌丝一枚') mugai()
  • 示例2:带参函数的装饰器

    # 带参函数的装饰器 def zhuangshiqi(func):     def wrapper(*args, **kwargs): print('今天天气不错,出门就打到车了') func(*args, **kwargs) return wrapper @zhuangshiqi def test(n): print('我的幸运数字为:{}'.format(n)) test(7)
  • 示例3:带参有返回值的装饰器

    def zhuangshiqi(func):     def wrapper(*args, **kwargs): return func(*args, **kwargs) + 10 return wrapper @zhuangshiqi def pingfang(n): return n*n print(pingfang(4))

生成器(generator)

  • 列表生成式,可以快速的生成列表

    # 数据量非常小,内存占用不大 l = [i for i in range(10)] # 数据量特别大时,会造成内存占用突然增大 l2 = [i for i in range(10000)]
  • 为了解决内存突然增大问题,python引入了生成器

  • 产生方式:

    • 将列表生成式的[]改为()

    # 数据量非常小,内存占用不大 l = [i for i in range(10)] # 数据量特别大时,会造成内存占用突然增大 # l2 = [i for i in range(10000)] # 生成器 l2 = (i for i in range(2)) print(type(l)) print(type(l2)) # 可以转换为列表 # print(list(l2)) # 使用next获取生成器中值,一次一个,遍历结束会报错StopIteration # print(next(l2)) # print(next(l2)) # print(next(l2)) # 可以使用for-in遍历 for i in l2: print(i)
    • 通过在函数中使用yield关键字

    def test(n):     l = []     for i in range(1, n+1): l.append(i) return l # print(test(5)) def test2(n): for i in range(1, n+1): yield i t = test2(5) for j in t: print(j)
  • 特性:

    • 可以使用next获取数据,一次一个,结束时会报错

    • 只能遍历一遍

    • 可以转换为列表

    • 可以使用for-in遍历

迭代器(Iterator)

  • 定义:就是可以使用for-in进行遍历,并且可以使用next依次获取元素的对象

  • 说明:

    • 生成器就是一种特殊的迭代器

    • 判断是否是迭代器

    from collections import Iterator ​ l = (i for i in range(10)) print(isinstance(l, Iterator))
    • 字符串、列表、元组、集合、字典等都不是迭代器,他们都是可迭代对象。

可迭代对象

  • 定义:可以使用for-in遍历的对象,我们都称之为可迭代对象

  • 判断一个对象是否是可迭代对象

    from collections import Iterable print(isinstance(l, Iterable)) print(isinstance(lt, Iterable))

iter函数

  • 作用:将可迭代对象转换为迭代器

  • 使用:

    lt2 = iter(lt) print(isinstance(lt2, Iterator))

转载于:https://www.cnblogs.com/kiki5881/p/8550047.html

你可能感兴趣的文章
Android MVC之我的实现
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
关于批处理-1
查看>>
Tomcat部署Web应用方法总结
查看>>
Python3 django2.0 字段加密 解密 AES
查看>>
CCNA实验之:网络地址转换(NAT)实验
查看>>
计算机网络原理笔记-停止等待协议
查看>>
确定当前记录和下一条记录之间相差的天数
查看>>
sql语句返回主键SCOPE_IDENTITY()
查看>>
机器学习开源项目精选TOP30
查看>>
iOS开发-邮件发送
查看>>
/etc/resolv.conf文件详解
查看>>
【转】VC的MFC中重绘函数的使用总结(整理)
查看>>
JQuery日记_5.13 Sizzle选择器(六)选择器的效率
查看>>
oracle查看经常使用的系统信息
查看>>
Django_4_视图
查看>>
Linux的netstat命令使用
查看>>
lvm讲解,磁盘故障小案例
查看>>
大快网站:如何选择正确的hadoop版本
查看>>