1

在 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 函数有效,我的下一个问题是:

  1. 它适用于颠簸的阵列吗?
  2. 操作顺序是什么?即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()

现在我想知道什么是函数,什么不被认为是函数?

4

3 回答 3

1

在 Python 2 中,printis 是一个语句,而不是一个函数,因此它实际上不带任何参数。当您“调用”print(1, 2)时,您实际上是在打印 tuple (1, 2)

您需要一个函数来解压缩参数,因此print在文件的最顶部导入 Python 3 的函数:

from __future__ import print_function
于 2013-06-28T23:30:08.997 回答
1

功能

csv.writer(fl).writerow()

接受一个列表作为它的参数。所以,

writer.writerow(*n.toList())

将尝试将列表的每个元素作为参数发送,在本例中为 4。有效的是:

writer.writerow(n.toList())

但是,当我尝试这样做时:

writer.writerow((5,*n.toList()))

引发了语法错误。这不是根据“如何在不修改任何一个的情况下在 Python 中获得两个列表的连接? ”的做法。更正的版本是:

writer.writerow([5]+n.toList())

对于写入“5,1,2,3,4”的输出文件。

于 2013-06-29T00:56:05.760 回答
0

这意味着print(1,2)如果print是一个函数。这不是 - 这是一个声明。在(1,2)那种情况下,实际上只是一个元组,而不是函数调用。

在你的情况下,你不需要 splat,因为 print 不是一个函数。

您不能在函数调用之外进行喷溅。

于 2013-06-28T23:29:34.417 回答