1-for循环套生成器的面试题
参考自:
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]
1-for循环套生成器的面试题的更多相关文章
- <每日一题>题目4:for循环套生成器的面试题
题目: 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 ...
- (各个公司面试原题)在线做了一套CC++综合測试题,也来測一下你的水平吧(二)
刚才把最后的10道题又看了下.也发上来吧. 以下给出试题.和我对题目的一些理解 前10道题地址 (各个公司面试原题)在线做了一套CC++综合測试题.也来測一下你的水平吧(一) 11.设已经有A,B,C ...
- 分享一套高级Java笔试题(实拍高清图)
分享一套高级Java笔试题 微信群里群友分享的 刚好他在笔试 有些问题不会发到群里求助 如果你最近正好在面试 需要参考需要提升 这套试题或许对你有用 下面是部分分享原图 下面是微信群中群友的热议 非常 ...
- <每日一题>题目5:生成器表达式面试题
题目: def demo(): for i in range(4): yield i g = demo() g1 = (i for i in g ) g2 = (i for i in g1) prin ...
- 循环打印i值(面试题)
/* * 下面的代码,为了实现每隔1秒说一句话, * 找出存在的问题,并改正,然后描述一下你的解决方案. * */ var arr = [ '第一句话', '第二句话', '第三句话', '第四句话' ...
- 2w字长文!手撸一套 Java 基础面试题
Java 基础篇 Java 有哪些特点 并发性的: 你可以在其中执行许多语句,而不必一次执行它 面向对象的:基于类和面向对象的编程语言. 独立性的: 支持一次编写,到处运行的独立编程语言,即编译后的代 ...
- day 14 - 2 生成器练习
相关练习 1.处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕 #比较 low 的方法 def check_file(filename,aim): with open( ...
- python基础08--迭代器,生成器
1.1 迭代器 1.可迭代对象:str,list,tuple,set,dict, 迭代器:f(文件),range() 可迭代对象和迭代器都可以for循环 可迭代对象不会计数, 迭代器会计数,上面操作到 ...
- python06-列表表达式、生成器表达式及其面试题、解耦简单介绍、函数递归相关
目录: 一.列表推导式 二.生成器表达式 三.集合生成器 四.生成器面试题 五.解耦简单介绍 六.函数递归相关 一.列表推导式 需求:将[1,3,5]中的每个元素平方 正常思路: new_list = ...
随机推荐
- Docker实战部署应用——Redis
Redis 部署 拉取Redis镜像 docker pull redis 创建Redis容器 docker run -id --name=sun_redis -p 6379:6379 redis 客户 ...
- Tensorflow学习笔记3:卷积神经网络实现手写字符识别
# -*- coding:utf-8 -*- import tensorflow as tf from tensorflow.examples.tutorials.mnist import input ...
- sort 文本排序
1.命令功能 sort 将输入的文件内容按照指定的规则排序,然后将排序的内容输出. 2. 语法格式 sort option file 参数说明 参数 参数说明 -b 忽略每行开头的空格 -n 根据 ...
- 八个JS中你见过的类型。
1.布尔类型 布尔值只能为 true 或者 false ,其他的会报错 let bool: boolean = false; bool = true; // bool = 123; // error ...
- 触发redo写的几个条件
触发redo写的几个条件 作者:eygle |English [转载时请标明出处和作者信息]|[恩墨学院 OCM培训传DBA成功之道]链接:http://www.eygle.com/archive ...
- 610K图纸打印新版增值税发票不完整的调整方法 黑盘红盘都兼容
新版增票页面设置增票向下0.8向右-10,5刻度进纸测试 向右调整可能会有些出入 根据情况微调即可. 下面为黑盘的设置 可与上面兼容
- pandas.DataFrame.drop_duplicates 用法说明
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False) subset考虑重复发生在哪一列,默认考虑所有列,就是在任何一列 ...
- Task6.神经网络基础
BP: 正向计算loss,反向传播梯度. 计算梯度时,从输出端开始,前一层的梯度等于activation' *(与之相连的后一层的神经元梯度乘上权重的和). import torch from tor ...
- 01-跨域-jsonp原理
jsonp能跨域,并不是因为它发送了ajax请求,而是利用动态创建的script标签. script标签没有收到浏览器同源策略的限制,是可以跨域访问的. 创建的script标签,把其src指向请求的服 ...
- 第四周作业—N42-虚怀若谷
一.统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户个数,并将用户都显示出来 [root@centos7 ~]# grep -v "/sbin/nolo ...