为什么这行不能在python中打印123 ... n?

时间:2018-06-19 09:50:25

标签: python python-3.x generator-expression

最近我开始学习python编程语言,我在使用这个打印123..n序列时遇到困难:

n=10
print(i for i in range(1,n+1))

我得到了这个输出:

<generator object <genexpr> at 0x7f5990f20db0>                                   

期望输出:
     1234 ....ñ
     (注意:只有连续输出)

6 个答案:

答案 0 :(得分:8)

您正在尝试print生成器表达式。这是不可能的。括号或缺少括号表示Python中的generator expression

相反,您可以使用方括号表示的list

n = 10
print([i for i in range(1, n+1)])
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

如果要打印生成器表达式的内容,可以显式迭代:

n = 10
for i in (i for i in range(1, n+1)):
    print(i)

或者通过解压缩表达式并使用sep参数:

n = 10
print(*(i for i in range(1, n+1)), sep='')
12345678910

在此特定示例中,由于您正在耗尽迭代器,因此可以直接传递range对象:

n = 10
print(*range(1, n+1), sep='')
12345678910

*运算符用于序列解包。它可以采用任何可迭代的并将解压缩的组件传递给馈送器函数,在本例中为print。它适用于print,因为这个特定的函数可以采用任意数量的参数,例如试试print(1, 2, 3, 4, 5, sep='')。相反,它不会与list一起使用,try_files只需要一个参数。

答案 1 :(得分:0)

这一行:

print(i for i in range(1, n+1))

创建一个生成器并将其打印出来,它完全符合预期。要将值打印为list,我猜是你想要的,添加[]

print([i for i in range(1, n+1)])

如果您打算在单独的行上打印每个元素,语法类似但略有修改:

[print(i) for i in range(1, n+1)]

编辑:对于您在评论中请求的同一行中的所有内容:

print(''.join(str(i) for i in range(1, n+1)))

答案 2 :(得分:0)

您需要添加[]
>>> print([i for i in range(1,n+1)]) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

没有军营,你将获得1 ... n的迭代器 有了它们,您将获得迭代器创建的列表

要仅打印数字,请使用"".join()
>>> "".join([str(i) for i in range(1,n+1)]) # str(i) to convert from int to str '12345678910'

答案 3 :(得分:0)

正如许多人所说,这是创建一个generator。生成器与普通函数不同。生成器返回iterator,您可以每次迭代迭代一个项目。

使用yield语句的方法返回一个生成器。 return语句和yield之间的区别在于return语句完全终止程序。而yield语句保存下一次迭代的变量状态。假设您想在我们使用生成器的场景中使用屈服值做某事。

以下是return和yield语句的示例。

Return

def retutn_meth(n):
    for i in range(1, n+1):
        return i


a = retutn_meth(10)
for b in range(1,10):
    print(a)

Output

1
1
1
1
1
1
1
1
1

Process finished with exit code 0

yield

def gen_meth(n):
    for i in range(1, n+1):
        yield i


a = gen_meth(10)
for b in range(1,10):
    print(next(a))
    print('blah blah blah')

output

1
blah blah blah
2
blah blah blah
3
blah blah blah
4
blah blah blah
5
blah blah blah
6
blah blah blah
7
blah blah blah
8
blah blah blah
9
blah blah blah

Process finished with exit code 0

正如您在第二个示例中所看到的,变量的状态已在每次迭代中保存,并且在'print('blah blah')中,您可以在迭代之间放置您想要执行的任何其他功能。

请在此处阅读以进一步说明:Python Generators

答案 4 :(得分:-3)

在序列中打印数字的正确方法是首先运行for循环并打印它们,如

  

N = 10;
  对于范围(1,n)中的i:

     
    

print(i)

  

答案 5 :(得分:-4)

n =10

for i in range(1,n+1):
    print(i)