使用PyDev获取错误:<generator object <genexpr> at 0x0000000002731828>

ram*_*mas -1 python pydev

我得到一个简单的打印语句错误,可能是错误,已更改为浮动并尝试但仍然存在错误.

if __name__ == '__main__':
    print (i*i for i in range(5))
Run Code Online (Sandbox Code Playgroud)

错误:

<generator object <genexpr> at 0x0000000002731828>
Run Code Online (Sandbox Code Playgroud)

提前致谢...

mus*_*ain 9

在Python 3中,print()是一个函数,而不是一个语句.

生成器表达式类似于列表推导,除了它创建一个在迭代它时产生结果的对象,而不是在创建它时.例如,

[i*i for i in range(5)]
Run Code Online (Sandbox Code Playgroud)

产生一个列表,[0,1,4,9,16],而

(i*i for i in range(5))
Run Code Online (Sandbox Code Playgroud)

生成一个生成器对象,当您迭代它时将生成这些数字.

如果给一个函数只有一个参数并且它是一个生成器表达式,你可以省略生成器表达式周围的括号,所以你不必做myfunc((i + 1代表i)).

因此,您要创建一个生成器对象,并将其传递给print()函数,该函数将打印其表示形式.它正是你所要求的,而不是你要求的.

您可以从生成器表达式初始化列表:

print(list(i*i for i in range(5)))
Run Code Online (Sandbox Code Playgroud)

但是使用列表理解更容易:

print([i*i for i in range(5)])
Run Code Online (Sandbox Code Playgroud)

您可以如何使用生成器对象的简单示例是:

for value in (i * i for i in range(5)):
    print value
Run Code Online (Sandbox Code Playgroud)

虽然在这个简单的例子中,显然更容易编写:

for i in range(5):
    print i * i
Run Code Online (Sandbox Code Playgroud)