1-for循环套生成器的面试题
2024-08-27 23:30:53
参考自:
https://www.cnblogs.com/shuimohei/p/9686578.html
https://segmentfault.com/a/1190000016577353
题目:
def add(n,i):
return n+i def test():
for i in range(4):
yield i g = test()
for n in [1,10,5]:
g = (add(n,i) for i in g) print(list(g))
分析:
我们知道生成器函数和生成器表达式都很"懒",只要你不找它取值它就不执行.
函数从上到下开始执行,一直到13行都没开始,13行list()函数找g要值,9-10行的生成器表达式才开始执行,我们将9-10行拆开:
1 n =1
2 g = (add(n,i) for i in g)
3 n =10
4 g = (add(n,i) for i in g)
5 n =5
6 g = (add(n,i) for i in g)
根据执行顺序,1-4行都是生成器表达式,在13行找此时6行要值的时候,1-4行都还未执行,我们将表达式都写在6行,得到:
1 n =5
2 g = (add(n,i) for i in (add(n,i) for i in (add(n,i) for i in test())))
从里面往外面执行,
test() == (0,1,2,3)
(add(n,i) for i in test()) == (5,6,7,8)
(add(n,i) for i in (add(n,i) for i in test())) ==(10,11,12,13)
(add(n,i) for i in (add(n,i) for i in (add(n,i) for i in test()) )) ==(15,16,17,18)
g=(15,16,17,18)
list(g) == [15,16,17,18]
输出结果:
1 [15, 16, 17, 18]
最新文章
- 介绍一款原创的四则运算算式生成器:CalculateIt2
- ng-repeat循环出来的部分调用同一个函数并且实现每个模块之间不能相互干扰
- Jquery 操作CheckBox ,RadioButtonList,DropDownList
- jquery note--czx
- Android视图绘制流程完全解析,带你一步步深入了解View(二)
- nginx Windows服务形式运行
- EditPlus+VisualStudio配置VC简易开发环境环境
- Squid 反向代理加速网站
- (转载)XML Tutorial for iOS: How To Read and Write XML Documents with GDataXML
- Axios 执行post发送两次请求的小坑
- pythonのdjango Session体验
- Python import其他文件夹的文件
- GSP事件探查器 无法进行跟踪的解决办法(场景之一)
- 各版本系统安装tesseract-ocr
- SQL 常用判断语句
- 还没被玩坏的robobrowser(3)——简单的spider
- node中的socket.io制作命名空间
- 创建一个socket服务实时统计在线人数
- PHP——上传头像(1)
- css随堂笔记(三)
热门文章
- python连接mariadb报错解决1045, ";Access denied for user 'root'@'192.168.0.50' (using password: YES)
- 2018-8-27-C#-powshell-调用
- JSP学习(3)
- C# 获取一个文件的MD5值
- 10-基于TMS320C6678+XC7K325T的6U CPCI Full Camera Link图像处理平台
- Google Capture The Flag 2018 (Quals) - Beginner's Quest - Reverse - Firmware
- nginx http正向代理简单配置及systemd 配置
- Windows 下搭建 SVN服务器
- [洛谷P2296] NOIP2014 寻找道路
- 【leetcode】1037. Valid Boomerang