首页 > 试题广场 >

下列代码的运行结果是多少? def bar(n):

[问答题]
下列代码的运行结果是多少?
def bar(n):
  m = n
  while True:
    m += 1
    yield m
b = bar(3)
print b.next()

推荐
xb头像 xb
4 yield 只作用于首个值。 带有yield的函数不是一个普通函数,而是一个生成器generator,可用于迭代; yield是一个类似return的关键字,迭代一次遇到yield时就返回yield后面的值。重点是:下一次迭代时,从上一次迭代遇到的yield后面的代码开始执行。
编辑于 2018-05-07 16:21:37 回复(4)
(1)带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator, 执行到 yield  时, 函数就返回一个迭代值,下次迭代时(使用next函数触发生成器),代码从 yield 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。 (2)生成器:生成器是构造迭代器的最简单有力的工具,与普通函数不同的只有在返回一个值的时候使用yield来替代return,然后yield会自动构建好next()和iter() (3)所以m=4,输出4
编辑于 2018-07-20 12:29:26 回复(0)
 python3 输出为:4

发表于 2018-05-25 10:55:09 回复(0)
dy_头像 dy_
缩进有问题
发表于 2018-03-19 14:33:50 回复(0)
4
编辑于 2018-05-07 16:21:26 回复(1)
5 正确答案应该是4,b=bar(3)这句返回的b不是等于4,而是一个生成器对象,直到调用next()方法才获取到返回值4
编辑于 2018-08-23 00:02:39 回复(0)
4
发表于 2018-06-26 10:27:33 回复(0)
4
发表于 2018-04-24 11:29:23 回复(0)
4 yield作用返回while循环的首个值
发表于 2018-03-28 02:16:50 回复(0)
4 b是一个generator, 调用next的时候返回yield的值
发表于 2020-09-29 15:38:17 回复(0)
4
发表于 2020-01-31 08:25:01 回复(0)
4
发表于 2019-03-26 10:35:11 回复(0)
4
发表于 2019-02-28 15:41:20 回复(0)
4
发表于 2019-02-16 12:47:19 回复(0)
4
发表于 2019-01-06 15:42:24 回复(0)
4
发表于 2018-09-20 00:06:47 回复(0)
4
发表于 2018-09-17 21:25:37 回复(0)
4
发表于 2018-09-17 19:27:46 回复(0)
4
发表于 2018-09-16 12:36:22 回复(0)
4
发表于 2018-09-14 11:56:40 回复(0)
4
发表于 2018-09-12 00:43:36 回复(0)