如何在Python 2.7中的函数调用中使用splat

时间:2013-06-28 23:26:24

标签: python python-2.7

在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?

  3. ...(感谢快速回复)。我会接受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()
    

    现在我想知道什么是和不被认为是一个功能?

3 个答案:

答案 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。