首页 > 试题广场 >

在Python3.x环境下,执行以下程序,下列说法中,正确的

[单选题]
在Python3.x环境下,执行以下程序,下列说法中,正确的是( )
s = (i for i in range(1, 3))    # ①
print(s.__next__())             # ②
for i in s:
    print(i)                    # ③
  • 语句①的s是一个元组

  • 语句②的输出结果为1

  • 语句③的输出结果为1 2

  • 语句③可以替代为while s.__next__():

    print(s.__next__())

  • A. 语句①的s是一个元组:错误。语句①使用圆括号(i for i in range(1, 3))创建的是一个生成器表达式(generator expression),而不是元组。生成器表达式会返回一个生成器对象,该对象在迭代时逐个产生值(惰性求值)。如果创建元组,应使用tuple()或显式写成s = (1, 2)。因此,s是生成器,不是元组。

  • B. 语句②的输出结果为1:正确。语句②print(s.__next__())调用生成器s的__next__()方法。生成器s由range(1, 3)初始化,产生序列[1, 2](range左闭右开,包括1,不包括3)。第一次调用__next__()返回第一个值1,因此输出结果为1。

  • C. 语句③的输出结果为1 2:错误。语句③指的是for i in s: print(i)部分的输出。在语句②中,生成器s的第一个值1已被消耗,因此生成器当前位置在第二个元素。for循环遍历生成器s剩余的元素,只有一个值2,所以输出结果为2,而不是1 2。整个程序的输出是:

    但选项C指定的是语句③的输出,仅为2。
  • D. 语句③可以替代为while s.__next__(): print(s.__next__()):错误。该替代代码会导致运行时错误。原因:

    • 生成器s在语句②后剩余一个值2。

    • while s.__next__(): 首先调用s.__next__(),返回2(条件为True),进入循环体。

    • 循环体内print(s.__next__())试图再次调用s.__next__(),但生成器已无更多元素,引发StopIteration异常。

    • 原for循环会自动处理StopIteration并优雅结束,而替代代码会因异常而终止。

编辑于 2025-08-17 10:02:12 回复(0)
  1. 与列表生成式不同,元组生成式产生的是生成器,而不是元组
  2. 生成器表达式会返回一个生成器对象,该对象在迭代时逐个产生值(惰性求值)。 
发表于 2025-10-26 14:03:49 回复(0)