【发布时间】:2016-12-09 03:44:13
【问题描述】:
我在使用 python 循环时有一个奇怪的问题。这对我来说可能很容易但很奇怪。假设我有一个字符串列表:
seqs=['AA', 'AT']
然后我想打印出列表中的元素。一种方式(方法一)是使用for循环:
for seq in seqs:
print seq
效果很好。同时,我定义了一个'print'函数(方法2)来打印:
def print0(s):
print s
[print0(s) for s in seqs]
如果我使用 'print0' 函数打印出值,输出如下:
AA
AT
[None, None]
我想知道为什么这里有两个“无”值,因为当我使用方法 1 时这两个值没有出现?我想通过使用并行技术来执行 for 循环,但是使用
'None' 值,joblib 包中的 delayed 函数无法工作。谢谢。
更新:如果我想并行:
Parallel(n_jobs=2)(delayed(print0)(seq) for seq in seqs)
它会给出一个错误信息:
TypeError: expected string or Unicode object, NoneType found
【问题讨论】:
-
...因为你不返回任何东西...
-
两个 sn-ps 在语义上是不同的:一个只是带有 print 语句的 for 循环,而另一个是使用不返回任何内容(无)的函数创建具有列表理解的列表跨度>
-
除了答案中提出的内容之外,如果您不想看到
Nones,请丢弃表达式的值:_=[print0(s) for s in seqs]。