为什么此行不在 python 中打印 123...n?
Why this line does not printing 123...n in python?
最近我开始学习 python 编程语言,但在打印 123..n 序列时遇到了问题:
n=10
print(i for i in range(1,n+1))
我得到了这个输出:
<generator object <genexpr> at 0x7f5990f20db0>
预期输出:
1234....n
(注:只持续输出)
您正在尝试 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
一起工作。
这一行:
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)))
n =10
for i in range(1,n+1):
print(i)
您需要添加[]
:
>>> 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'
打印序列中数字的正确方法是先运行 for 循环然后打印它们,比如
n=10;
for i in range(1,n):
print (i)
正如许多人提到的那样,这正在创建 generator
。生成器不同于普通函数。生成器 return 是一个 iterator
,您可以在每次迭代中迭代一个项目。
使用yield
语句的方法return是一个生成器。
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
最近我开始学习 python 编程语言,但在打印 123..n 序列时遇到了问题:
n=10
print(i for i in range(1,n+1))
我得到了这个输出:
<generator object <genexpr> at 0x7f5990f20db0>
预期输出:
1234....n
(注:只持续输出)
您正在尝试 print
生成器表达式。这不可能。括号或缺少括号表示 Python.
相反,您可以使用 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
一起工作。
这一行:
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)))
n =10
for i in range(1,n+1):
print(i)
您需要添加[]
:
>>> 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'
打印序列中数字的正确方法是先运行 for 循环然后打印它们,比如
n=10;
for i in range(1,n):print (i)
正如许多人提到的那样,这正在创建 generator
。生成器不同于普通函数。生成器 return 是一个 iterator
,您可以在每次迭代中迭代一个项目。
使用yield
语句的方法return是一个生成器。
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