当前位置: 首页 > news >正文

网址导航网站如何做用户登录入口

网址导航网站如何做,用户登录入口,西安公司注册核名,银川做网站最好的公司有哪些生成器 Generators 要理解生成器#xff0c;首先要理解迭代器#xff0c;迭代器由以下三个部分组成#xff1a; 可迭代对象#xff08;iterable#xff09;迭代器#xff08;iterator#xff09;迭代#xff08;iteration#xff09; 1. 可迭代对象 只要定义了可以…生成器 Generators 要理解生成器首先要理解迭代器迭代器由以下三个部分组成 可迭代对象iterable迭代器iterator迭代iteration 1. 可迭代对象 只要定义了可以返回一个迭代器的__iter__方法的对象或者定义了可以支持下标索引的__getitem__方法。 2. 迭代器 只要定义了一个__next__方法的对象。 3. 迭代 从某个地⽅⽐如⼀个列表取出⼀个元素的过程。当我们使⽤⼀个循环来遍历某个东西时这就叫⼀个迭代。 生成器 生成器也是一种迭代器但是只能对其迭代一次。因为生成器没有把所有的值存在内存中而是在运行时生成值lazy。可以通过遍历来使用它们使用for循环或传递给任意可以进行迭代的函数和结构。 大多数生成器是以函数来实现的它们并不返回一个值而是yield一个值。 生成器最好的使用场景是不需要一次将所有计算的结果全部放在内存中或者一次读出全部的原始数据这样会造成很大的内存占用。 上述例子中我们用for循环来迭代这个生成器函数同样我们可以使用python的next()函数来获得迭代器的下一个元素。 基础数据类型list和str都是可迭代对象我们经常会使用for循环来获得每一个下标的数据。 但是我们发现不能调用next来迭代字符串和数据这是因为 数组和字符串是可迭代对象但不是迭代器。 使用for关键字迭代可迭代对象时for会自动获取到迭代器进行迭代。但是next只能对迭代器进行迭代因此我们需要使用到iter()函数来根据一个可迭代对象返回一个迭代器对象 同时next方法没有实现对StopIteration异常的捕捉在自己写的迭代器内一般需要额外进行迭代结束的编写。 测验 现在我们要写一个生成器迭代一个数组的时候不再是按顺序取出而是隔一个元素取出。 1. 函数式迭代器(yield) def skip_elements(arr):for i in range(0, len(arr), 2): # 从索引0开始每次跨越2个元素yield arr[i]my_list [1, 2, 3, 4, 5, 6, 7, 8, 9] gen skip_elements(my_list)for element in gen:print(element)2. 编写一个迭代器 class SkipElementsGenerator:def __init__(self, arr):self.arr arrself.index 0def __iter__(self):return selfdef __next__(self):if self.index len(self.arr):raise StopIterationelement self.arr[self.index]self.index 2 # 每次跳过一个元素return elementmy_list [1, 2, 3, 4, 5, 6, 7, 8, 9] gen SkipElementsGenerator(my_list)for element in gen:print(element)SkipElementsGenerator是一个迭代器我们直接将要迭代的数组当成形参丢入以初始化迭代器。 注意因为要用for迭代迭代器因此迭代器也必须得是可迭代对象这里只需要简单实现__iter__函数并且返回self即可 Another Way 比较直观了解可迭代对象与迭代器的例子 class MyArray:def __init__(self, arr):self.arr arrdef __iter__(self):return SkipElementsGenerator(self.arr)class SkipElementsGenerator:def __init__(self, arr):self.arr arrself.index 0def __next__(self):if self.index len(self.arr):raise StopIterationelement self.arr[self.index]self.index 2 # 每次跳过一个元素return element# 创建自定义数组对象 my_list MyArray([1, 2, 3, 4, 5, 6, 7, 8, 9])# 使用生成器迭代元素 for element in my_list:print(element)原始数据是可迭代对象实现__iter__方法返回它的迭代器。 迭代器实现__next__方法迭代返回每一次迭代的值。 这个时候for循环直接迭代可迭代对象不像上一个例子一样是迭代迭代器。 for循环是先找到可迭代对象的迭代器 通过__iter__方法 然后对迭代器进行迭代 通过迭代器的__next__方法 这样写的话可以实现函数的解耦不会像上面代码一样还要实例化迭代器gen SkipElementsGenerator(my_list)然后人为迭代迭代器。 这样写的话只需要像原来一个实例化自定义的数据类型直接用for或者iter来获得迭代器代码中不会出现迭代器的名字无感使用。
http://www.w-s-a.com/news/177459/

相关文章:

  • 做网站的中文名字汕尾网站开发
  • 网站推广效果推广网站推荐
  • 腾讯企业网站建设网络推广比较经典和常用的方法有
  • 四川成都网站网页设计上海外贸网站制作公司
  • wordpress模板首页图片锦州网站做优化
  • 哔哩哔哩网站建设分析有哪些做网站好的公司
  • 福建建设执业中心网站沧州网络推广外包公司
  • 做网站怎么改关键词营销网站建设818gx
  • 广撒网网站怎么进行网络营销
  • 中职计算机网站建设教学计划电商网站如何避免客户信息泄露
  • 惠州微网站建设外贸进出口代理公司
  • 网站建设最常见的问题建设银行网站机构
  • 网站集群建设相关的招标南通seo网站建设费用
  • 网络培训的网站建设能够做二维码网站
  • 网站类游戏网站开发wordpress 文章首标点
  • 徐州网站建设熊掌号免费推广网站入口2020
  • 网站建设有前途长春高铁站
  • 做网站网课阿里云域名查询系统
  • saas建站平台有哪些简述网站建设基本流程答案
  • 个人怎么做网站网站浏览思路
  • 网站建设里的知识长沙网络营销公司
  • 网站建设与维护大作业pc网站转换成微网站
  • php网站开发经典教材东莞网站开发
  • 教育培训手机网站模板下载跨境电商培训哪家最好
  • 网站开发淄博网站被降权会发生什么影响吗
  • 网站开发常用的语言东城手机网站制作
  • 微小店网站建设平台手机优化加速有什么用
  • 沈阳酒店企业网站制作公司竞价网站怎么做seo
  • 中山企业网站多少钱学网站建设的好处
  • 做官网网站哪家公司好jianux wordpress