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

做百家好还是个人网站大唐网站建设

做百家好还是个人网站,大唐网站建设,梅州网站建设,中国建设劳动学会官方网站是多少作为一个Python初学者, Python的格式化语法让众多编程小白追捧, 它的语法糖让代码变得简洁易读#xff0c;它的庞大开源库让它在各个领域都能发挥作用. 但我时常感受到这个门槛极低的语言远没有表面上看起来易懂易用. 在Python的学习之路上, 我也时常迷茫于自己是否真正掌握了…作为一个Python初学者, Python的格式化语法让众多编程小白追捧, 它的语法糖让代码变得简洁易读它的庞大开源库让它在各个领域都能发挥作用. 但我时常感受到这个门槛极低的语言远没有表面上看起来易懂易用. 在Python的学习之路上, 我也时常迷茫于自己是否真正掌握了这门语言. Stackoverflow上有一篇帖子很好地说明了Python的进阶之路, 于是我准备顺着这个思路写写各个要点.根据这篇帖子, Python进阶之路: 从小白到大神. 其中, 前两点分别是Discover list comprehensions 和 Discover generators(生成器). 身为小白的我, 心里暗想generators是个啥。于是研究了一番遂成此文。注: 全文使用Python3.5, 标准库.谈起Generator, 与之相关的的概念有{list, set, tuple, dict} comprehension and containeriterableiteratorgenerator fuction and iteratorgenerator expression接下来, 我们分别来看看这些概念:{list, set, tuple, dict} comprehension and containerContainer是存储元素的数据结构, 一般存储在内存中. 在Python中常见的container包括但不限于:list, deque, …set, …tuple, namedtuple, …dict, defaultdict, Counter, …简单举例:assert 1 in [1, 2, 3] # listassert 1 in {1, 2, 3} # setassert 1 in (1, 2, 3) # tupled {1: foo, 2: bar, 3: qux}assert 1 in d # dict特别的, String也是container. 我们可以查询一个substring是否在string里, 如:s foobarassert foo in sassert x not in s # string 包含所有的 substrings. 需要注意的是string并不存储这些substrings, 只是可以如此查询iterable一般说来,大部分的containers是iterable.而iterable不限于containers,还包括像文件.iterable是实现了__iter__()方法的对象.该方法返回的是的一个iterator对象.其中,iterator的目的是返回所有元素.来看例子:from collections import Iterable, Iteratorx [1, 2, 3]y iter(x)z iter(x)next(y)Out: 1next(y)Out: 2next(z)Out: 1next(z)Out: 2type(x)Out: listisinstance(x, Iterable)Out: Truetype(y)Out: list_iteratorisinstance(y, Iterable)Out: True可以看出, x是list, 也是iterable. y和z都是x的返回值, 也就是iterators, 互相独立. iterators通过___next___()这个方法返回元素每执行一次, 返回一个元素. 值得注意的是y作为iterable的实例, 它也是iterator. iterable是一个比iterator更大的概念.import disx [1, 2, 3]dis.dis(for _ in x: pass)1 0 SETUP_LOOP 14 (to 17)3 LOAD_NAME 0 (x)6 GET_ITER 7 FOR_ITER 6 (to 16)10 STORE_NAME 1 (_)13 JUMP_ABSOLUTE 7 16 POP_BLOCK 17 LOAD_CONST 0 (None)20 RETURN_VALUE更深入的, 我们可以明显看出在for循环中, Python每次都是调用FOR_ITER这个指令实现了读取下一个next()的功能, 也就是说, for循环中首先利用GET_ITER得到x的返回值, 一个iterator. 再通过FOR_ITER得到其中的元素. 如此实现了循环的功能.iterator那么什么是iterator? 就像之前我们提到的, iterator可以通过调用__next___()生成下一个值. 我们也可以说有__next___()这个方法的都可以是iterator. 这与它如何生成值无关. 我们具体看一个例子:from itertools import isliceclass seq:def __init__(self):self.gap 2self.curr 1def __iter__(self):return selfdef __next__(self):value self.currself.curr self.gapreturn valuef seq()list(islice(f, 0, 10))Out: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]以上, 我们构建了一个等差数列, 差为2. 其中, f既是iterable(因为iter方法), 也是iterator(因为有next方法).对于iterator, next方法做的两件事是:更新iterator的状态到下次调用;返回当前调用结果, eg: return value.generator function and iteratorOk. 终于到了本文的正题 generator. 首先下定义, generator是返回generator iterator的function(函数). 具体来说, 它可以让你更优雅的实现iterator, 而不用写带有__iter__() 和 __next__() 的类. 继续以上面那个等差数列为例, 我们看看generator如何的优雅的完成它:def seq():gap, curr 2, 1while True:yield currcurr curr gapf seq()list(islice(f, 0, 10))Out: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]以上, 我们看到了让它如此优雅的原因 yield.让我们看看这段code是如何运行的,首先 seq是一个Python程序, 它返回的是iterator. 当 f seq() 被调用, generator 会准备好返回. 但这时没有执行任何代码.接下来, 这个generator实例在islice()中被使用. 仍然没有执行代码. 然后, list()开始建立list. 为了得到list的元素, list()开始调用islice()的next()方法抓取元素, 也就是要在 f 函数中取元素.记住每次只生成一个元素. 这是代码开始运行到 gap, curr 2, 1 初始化变量. 接着进入始终为真的循环, 到了yield语句. 它做两件事: 1.暂停, 并更新状态到下一次yield, 2. 返回当前结果, 也就是curr值, 1. 这个值接着被传到了islice(), 最后加到list中. list现在是 [1].list()继续要下一个值. 暂停的 f 函数继续运行下一个语句curr gap. curr 现在是2. 继续进入下一个while循环, 遇到 yield. 同样的, yield做两件事: 1.暂停下来调整状态; 2. 返回值2. 值返回到list, list 等于 [1, 2].如此循环直到list取完10个元素. 特别的, 在第11次去值, islice()会有exception: StopIteration. 告诉list已经取值结束.generator expressiongenerator expression是Python的另一种generator. 相信大家都用过list expression, 比如生成一列数的平方:numbers [1, 2, 3, 4, 5, 6][x ** 2 for x in numbers][1, 4, 9, 16, 25, 36]generator expression很类似, 比如squares_list (x * x for x in numbers)squares_list at 0x10435eaf0next(squares_list)Out: 1list(squares_list)Out: [4, 9, 16, 25, 36]以上, 不再累述.Summary下图说明了各个概念之间的关系,最后谈谈为什么要使用generators. 它能帮你实现更优雅的代码, 减少中间变量和不必要的数据结构从而代码量, 节省内存空间和运算性能.针对一个循环代码,def something():result []for ... in ...:result.append(x)return result你可以做这样的转换def iter_something():for ... in ...:yield x感谢阅读欢迎大家修改指正.本文作者Early Kid更多内容请访问BitTiger.io 扫描下面二维码关注微信公众账号“论码农的自我修养”
http://www.huolong8.cn/news/351601/

相关文章:

  • 深圳专业网站建设企网站怎么做ipfs
  • 宁波创建网站河南郑州网站建设哪家公司好
  • 购物网站难做简约的网页设计欣赏
  • 广东工程建设咨询有限公司网站电子商务网站建设选择
  • 简单的网站设计开发智慧团建注册登录入口下载
  • 网站建设业务员论坛php网站开发工程师任职要求
  • 怎么做网站运营重庆seo技术教程
  • 网站优化如何收费企业邮箱收费
  • 网站建设成本包括什么丹阳seo公司
  • 广州建设网站哪个好html网页制作完整代码
  • 建各企业网站多少钱权重域名做网站有用么
  • 做网站优化常用工具装饰设计学校
  • 做小型企业网站多少钱织梦建站模板
  • 做网站的服务器用什么 系统好炫酷网站设计
  • 在广州开发一个营销网站多少钱北京市官方网站
  • 公司建设网站需要多少钱做网站的出路
  • 手机微网站怎么制作天河做网站哪家强
  • 无锡论坛网本地网站莱阳 网站建设
  • 重庆高端网站建设上海网站seo策划
  • 用什么网站做cpa网站建设销售简历
  • 三维在线设计网站镇江公交优化
  • 南昌住房建设局网站海报设计说明
  • 网站开发大致多少钱央视新闻移动网app官方下载
  • asp 网站 模板东莞网站制作十年乐云seo
  • cad dwt模板做网站模版珲春市建设局网站
  • 云霄县建设局网站如何查看网站开发公司
  • 直播网站开发计划书关于网站建设规划方书案例样式
  • 技术支持:上海网站建设梅西网页设计作业
  • 特产网站开发的目的如何实现输入域名访问网站首页
  • 潍坊网站建设工作室微信运营商是哪个公司