得到一个错误:<generator object <genexpr>在 0x0000000002731828>使用 PyDev [英] Get an error: <generator object <genexpr> at 0x0000000002731828> using PyDev

查看:59
本文介绍了得到一个错误:<generator object <genexpr>在 0x0000000002731828>使用 PyDev的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

如果 __name__ == '__main__':打印 (i*i for i in range(5))

错误:

<生成器对象在 0x0000000002731828>

提前致谢...

解决方案

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

一个生成器表达式就像一个列表推导式,除了它创建一个对象,该对象在您迭代它时生成结果,而不是在您创建它时.例如,

[i*i for i in range(5)]

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

(i*i for i in range(5))

生成一个生成器对象,当您对其进行迭代时,该对象将生成这些数字.

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

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

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

print(list(i*i for i in range(5)))

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

print([i*i for i in range(5)])

一个关于如何使用生成器对象的简单示例是:

for value in (i * i for i in range(5)):打印值

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

for i in range(5):打印我 * 我

I got an error for a simple print statement, what could be the possible error, have changed to float and tried but still error persist.

if __name__ == '__main__':
    print (i*i for i in range(5))

error:

<generator object <genexpr> at 0x0000000002731828>

Thanks in advance...

解决方案

In Python 3, print() is a function, not a statement.

A generator expression is like a list comprehension, except it creates an object that produces results when you iterate over it, not when you create it. For example,

[i*i for i in range(5)]

produces a list, [0, 1, 4, 9, 16], while

(i*i for i in range(5))

produces a generator object that will produce those numbers when you iterate over it.

If you give a function only one argument and it is a generator expression, you can omit the parentheses around the generator expression, so you do not have to do myfunc((i + 1 for i in something)).

So you are creating a generator object, and passing it to the print() function, which prints its representation. It’s doing exactly what you asked for, just not what you meant to ask for.

You can initialize a list from a generator expression:

print(list(i*i for i in range(5)))

but it is easier to use the list comprehension:

print([i*i for i in range(5)])

A simple example of how you might use the generator object is:

for value in (i * i for i in range(5)):
    print value

although in that simple example it would obviously be easier to write:

for i in range(5):
    print i * i

这篇关于得到一个错误:&lt;generator object &lt;genexpr&gt;在 0x0000000002731828>使用 PyDev的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆