我正在学习推导式。我理解print(x)部分(我想它打印通过“in”测试的x的值),但为什么它还会返回一个None列表?
>>> g
['a', 'x', 'p']
>>> [print(x) for x in g]
a
x
p
[None, None, None] #whats this?
我正在学习推导式。我理解print(x)部分(我想它打印通过“in”测试的x的值),但为什么它还会返回一个None列表?
>>> g
['a', 'x', 'p']
>>> [print(x) for x in g]
a
x
p
[None, None, None] #whats this?
print
是 Python3 中的一个函数,它能够将内容输出到屏幕上,但是它的返回值是 None。
在 Python2 中,print
是一个语句。在列表推导式中,只有表达式而非语句才可以使用。例如,[print(x) for x in g]
会引发 SyntaxError 错误。函数调用是一个表达式,这也是为什么 Python3 允许在列表推导式中使用 print
的原因。但是,正如你所看到的,即使允许使用,使用 print
在列表推导式中也没有多大用处。
你可以使用列表推导式打印列表中的项目,然后再打印整个列表。尝试将列表赋值给一个变量。
>>> g
['a', 'x', 'p']
>>> x = [print(x) for x in g]
a
x
p
#
>>> print(x)
[None, None, None]
>>> x
[None, None, None]
[print(x) for x in g]
等同于:
l = []
for i in g:
l.append(print(i))
return l
Print是用于打印输出的函数,所以你看到了a、x和p,但它返回None
,因此最终得到的列表是[None, None, None]。
g
相同的列表。>>> [x for x in 'axp']
['a', 'x', 'p']
>>> [x[0] for x in ['alpha', 'xray', 'papa']]
['a', 'x', 'p']
>>> list('axp')
['a', 'x', 'p']
由于g
已经是字符串,您可以使用join将其组合成一个字符串以打印:
>>> g=['a', 'x', 'p']
>>> ''.join(g)
'axp'
要打印它,只需使用所需的分隔符进行连接:
>>> print('\n'.join(g))
a
x
p
>>> li=[1,2,3]
>>> '\n'.join(li)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected str instance, int found
>>> print('\n'.join(str(e) for e in li))
1
2
3
print()
函数的返回值。 - squiguyfor x in g: print(x)
。 - Andy Hayden