使用这个简单的循环,我打印了一串数字:
rows = cursor.execute.....
rows_ftcl = rows.fetchall()
for row in rows_ftcl:
test = row[2]
print(test)
我想用同样的循环“Short Hand”,写在变量的同一行,得到同样的结果,我会用这样的东西:
rows = cursor.execute.....
rows_ftcl = rows.fetchall()
test = row[2] for row in rows_ftcl
print(test)
如果我使用这个,我得到错误<generator object <genexpr> at 0x7effb5f1edc0>
.我还尝试添加方括号,我得到打印在一个列表中.我不想打印在一个列表中,但我想打印垂直数字(没有任何括号).
我怎样才能得到和上面的循环一样的结果呢?我想使用“速记”模式,把所有的东西写在同一行(像我的第二个例子)
2条答案
按热度按时间3lxsmp7m1#
生成器是一个可迭代对象,就像任何其他可迭代对象一样,它可以用作unpack或splat操作符的目标
星号
*
表示可迭代解包。它的操作数必须是可迭代对象。可迭代对象在解包位置展开为一个项序列,这些项包含在新的元组、列表或集合中。因此,我们可以使用unpack操作符将生成器的所有值作为参数传递给
print
,然后使用sep
关键字参数选择一个分隔符。生成器表达式周围的额外括号仅用于操作符优先级;除了改变解析顺序之外,它们自身没有特殊的行为。
h5qlskok2#
<generator object <genexpr> at 0x7effb5f1edc0>
不是错误。它只是表达式row[2] for row in rows_ftcl
创建的生成器对象的字符串表示形式。如果您不知道生成器是什么,许多好的解释是quick web search away现在,您希望打印生成器生成的所有元素。为此,您首先需要构建要打印的字符串。在前面的方法中,您不需要这样做,因为您只是简单地循环生成器的元素。并逐个打印它们。
print
使用换行符"\n"
隐式结束对它的每次调用。由于您'我们必须自己构建字符串,你必须自己把这些元素放进去,我们可以用换行符把生成器生成的所有元素连接起来。或者,unpack将生成器传入
print
的参数,并传递一个换行符作为分隔符参数。现在print
的行为就像生成器的每个元素都是一个单独的参数一样,并在打印输出时使用sep
中指定的字符分隔每个参数