打印必须位于数组中
此代码与下面的代码失败:
print(num) for num in [1,2,3,4]
一种有效的方法:
[print(num) for num in [1,2,3,4]]
为什么第一个失败?
答案 0 :(得分:1)
这个[print(num) for num in [1,2,3,4]]
是一种理解,正是 list 的一种理解,它会根据表达式建立一个列表,您不应该使用它,因为print
返回{{ 1}},因此您将建立一个没有内容的列表。
另一个是完全无效的python sintax None
,正确的sintax是:
print(num) for num in [1,2,3,4]
答案 1 :(得分:1)
第一个示例由于存在语法错误而失败,因此仅适用于普通的for循环
for num in [1,2,3,4]:
print(num)
对于列表理解,您的表达式必须像第二个示例一样放在for num in [1,2,3,4]:
print(num)
和[
下
]
还要注意,对于不返回值的函数(例如[print(num) for num in [1,2,3,4]]
)来说,列表理解是错误的选择,因为这样做会在print
上创建数组。
None
答案 2 :(得分:0)
print(num) for num in [1,2,3,4]
的语法错误。
如果您不不使用列表推导,则应使用具有以下语法的循环来遍历列表:
for num in [1,2,3,4]:
print(num)
实质上,列表推导是Python中的特殊语法工具,而不是各种常规代码表示形式。
答案 3 :(得分:0)
此答案仅用于一般信息,并不建议实际上将生成器或理解力用于此类简单任务
第一个失败,因为它不是有效的语法。
如果用括号括起来,它将成为生成器:
g = (print(num) for num in [1, 2, 3, 4])
print(g)
# <generator object <genexpr> at 0x0000025F231C8408>
但是请注意,由于生成器是惰性的,因此没有打印任何内容。直到完全必要时,才对它们进行评估。
在这种情况下,评估g
的一种方法是将其传递给list
:
print(list(g))
# 1
# 2
# 3
# 4
# [None, None, None, None]
请注意,这很浪费。 print
返回None
,因此我们实际上是在建立一无所有的列表。
您可以使用next
来代替构建列表:
g = (print(num) for num in [1, 2, 3, 4])
while True:
try:
next(g)
except StopIteration:
break
# 1
# 2
# 3
# 4
但是不要这样做。所有这些“解决方案”都滥用了更为复杂的语言机制,只是为了打印数字列表。只需遵循其他答案中建议的显式for
循环即可。