在Python 2.7中,为什么print(*[1,2])
不起作用?这不是print(1,2)
吗?
更具体我的情况:
import numpy as np
n = np.array([1,2,3,4]) % create and manipulate numpy array
print(*n.tolist()) % print results
如果splat功能有效,我的下一个问题是:
tolist()
,还是执行splat? ...(感谢快速回复)。我会接受print()
不是函数,而是csv.writer.writerow
?
让我们更具体:
import numpy as np
import csv
n = np.array([1,2,3,4]) # create and manipulate numpy array
print(*n.tolist()) # print results
flName = 'C:\Users\Joe\test.csv'
fl = open(flName, 'wb')
writer = csv.writer(fl)
writer.writerow(*n.toList()) # ERROR with splat
fl.close()
现在我想知道什么是和不被认为是一个功能?
答案 0 :(得分:1)
在Python 2中,print
是一个语句,而不是一个函数,所以它实际上并不接受任何参数。当您“呼叫”print(1, 2)
时,您实际上正在打印元组(1, 2)
。
您需要一个函数来解压缩参数,因此在文件的最顶部导入Python 3的print
函数:
from __future__ import print_function
答案 1 :(得分:1)
功能
csv.writer(fl).writerow()
以列表作为参数。所以,
writer.writerow(*n.toList())
将尝试将列表的每个元素作为参数发送,在这种情况下为4。有效的是:
writer.writerow(n.toList())
然而,当我尝试做的时候:
writer.writerow((5,*n.toList()))
抛出了语法错误。根据“How can I get the concatenation of two lists in Python without modifying either one?”,这不是应该如何做到的。更正后的版本是:
writer.writerow([5]+n.toList())
表示写入“5,1,2,3,4”的输出文件。
答案 2 :(得分:0)
如果print(1,2)
是函数,则意味着print
。它不是 - 这是一个声明。在这种情况下,(1,2)
实际上只是一个元组,而不是函数调用。
在您的情况下,您不需要splat,因为print不是函数。
你不能在函数调用之外进行splat。