python

迭代器与生成器:

迭代是Python最强大的功能之一,是访问集合元素的一种方式。

迭代器是一个可以记住遍历的位置的对象。

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

迭代器有两个基本的方法:iter() 和 next()

字符串,列表或元组对象都可用于创建迭代器

生成器第一种方式:需要将中括号换成小括号

在 Python 中,使用了 yield 的函数被称为生成器(generator)

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行

调用一个生成器函数,返回的是一个迭代器对象

一个函数 f,f 返回一个 list,这个 list 是动态计算出来的(不管是数学上的计算还是逻辑上的读取格式化),并且这个 list 会很大(无论是固定很大还是随着输入参数的增大而增大),这个时候,我们希望每次调用这个函数并使用迭代器进行循环的时候一个一个的得到每个 list 元素而不是直接得到一个完整的 list 来节省内存,这个时候 yield 就很有用

打个比方的话,yield有点像断点。     加了yield的函数,每次执行到有yield的时候,会返回yield后面的值 并且函数会暂停,直到下次调用或迭代终止

yield后面可以加多个数值(可以是任意类型),但返回的值是元组类型的

推导:

     numbers1=[x for x in range(100) if x % 3 ==0]

    print(numbers1)

列表推导式:

     name=['bob','tom','alcie','jerry','wendy','smith']

     print(name.upper() for name in name if len(name)>3)

字典式推导、交换values和key的至、值:
      mcase={'a':10,'b':22}
      mcase_frequency={v:k for k,v in mcase.items()}

      print(mcase_frequency)

集合、推导、set集合中不能有重复的:
      squared1={x**2 for x in[1,1,2]}
      print(squared1)

itertion: 就是迭代,一个接一个(one after another),是一个通用的概念,比如一个循环遍历某个数组。 
iterable: 这个是可迭代对象,属于python的名词,范围也很广,可重复迭代,满足如下其中之一的都是iterable:

  • 可以for循环: for i in iterable
  • 可以按index索引的对象,也就是定义了getitem方法,比如list,str;
  • 定义了iter方法。可以随意返回。
  • 可以调用iter(obj)的对象,并且返回一个iterator

iterator: 迭代器对象,也属于python的名词,只能迭代一次。需要满足如下的迭代器协议

  • 定义了iter方法,但是必须返回自身
  • 定义了next方法,在python3.x是next。用来返回下一个值,并且当没有数据了,抛出StopIteration可以保持当前的状态

迭代是Python最强大的功能之一,是访问集合元素的一种方式

迭代器是一个可以记住遍历的位置的对象

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退

迭代器有两个基本的方法:iter() 和 next()

在 Python 中,使用了 yield 的函数被称为生成器(generator)

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行

调用一个生成器函数,返回的是一个迭代器对象


一个函数 f,f 返回一个 list,这个 list 是动态计算出来的(不管是数学上的计算还是逻辑上的读取格式化),并且这个 list 会很大(无论是固定很大还是随着输入参数的增大而增大),这个时候,我们希望每次调用这个函数并使用迭代器进行循环的时候一个一个的得到每个 list 元素而不是直接得到一个完整的 list 来节省内存,这个时候 yield 就很有用


打个比方的话,yield有点像断点。     加了yield的函数,每次执行到有yield的时候,会返回yield后面的值 并且函数会暂停,直到下次调用或迭代终止


yield后面可以加多个数值(可以是任意类型),但返回的值是元组类型的

logging

Logging 函数允许用户对应用程序进行日志记录,并把日志消息发送到电子邮件、系统日志或其他的机器

装饰器语法糖

闭包的重要特性:封存上下文,这一特性可以巧妙的被用于现有函数的包装,从而为现有函数增加功能。而这就是装饰器


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值