2018-07-22的简书

代码块


In [16]: L
Out[16]: [0, 2, 4, 6, 8]

In [17]: G = ( x*2 for x in range(5))

In [18]: G
Out[18]: <generator object <genexpr> at 0x7f626c132db0>

In [19]:
... prompt'''

创建 L 和 G 的区别仅在于最外层的 [ ] 和 ( ) , L 是一个列表,而 G 是一个生成器。我们可以直接打印出L的每一个元素,但我们怎么打印出G的每一个元素呢?如果要一个一个打印出来,可以通过 next() 函数获得生成器的下一个返回值:

代码块



In [28]: def fib(times):
....: n = 0
....: a,b = 0,1
....: while n<times:
....: print(b)
....: a,b = b,a+b
....: n+=1
....: return 'done'
....:

In [29]: fib(5)
1
1
2
3
5
Out[29]: 'done'
enerator非常强大。如果推算的算法比较复杂,用类似列表生成式的 for 循环无法实现的时候,还可以用函数来实现。
比如,著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:
1, 1, 2, 3, 5, 8, 13, 21, 34, …
斐波拉契数列用列表生成式写不出来,但是,用函数把它打印出来却很容易:





©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 包(lib)、模块(module) 在Python中,存在包和模块两个常见概念。 模块:编写Python代码的py...
    清清子衿木子水心阅读 9,207评论 0 27
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 19,283评论 17 410
  • 我们在一个教室我们前后只相差一排 可是今天我没有感觉到一次你的目光 昨天问你是不是不喜欢我了 你说没什么变化 可是...
    菀卿阅读 2,905评论 0 0
  • 昨晚因为作业的侍寝,又开始闹别扭,与妈妈生气。 大约不会讲骂人的话,于是想出自己能想到的不好的事物冲妈妈发脾气: ...
    秋野鹿鸣阅读 2,372评论 0 0
  • 新年都末有芳华,二月初惊见草芽。白雪却嫌春色晚,故穿庭树做飞花。韩愈老先生的咏春诗歌就象是为今天飘雪花的格尔木所写...
    征海阅读 2,880评论 2 1