2013-06-28 42 views
1

在Python 2.7中,爲什麼不是print(*[1,2])工作?這是不是意味着print(1,2)如何在Python 2.7中的函數調用中使用splat

更具體到我的情況:

import numpy as np 
n = np.array([1,2,3,4]) % create and manipulate numpy array 
print(*n.tolist()) % print results 

如果圖示功能的工作,我的下一個問題是:

  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() 

現在我不知道是什麼,不被認爲是功能?

+0

「Splat」你可愛的名字崩潰/一些調試器/ IDE做到這一點? –

+2

@NickT這是運營商的正式名稱。查看它,或嘗試一下(當然有一個實際的功能)。 – Marcin

+1

如果你使用的是Python 2,print(* n.tolist())不會拋出錯誤?另外,'writerow'需要一個字段列表,所以你可以刪除這個splat,它會工作得很好。 – Blender

回答

0

這將意味着print(1,2)如果print是一個函數。這不是 - 這是一個聲明。這種情況下的(1,2)實際上只是一個元組,而不是函數調用。

就你而言,你不需要摔打,因爲打印不是一個功能。

您不能在功能調用之外摔打。

1

在Python 2中,print是一個語句,而不是一個函數,所以它實際上沒有任何參數。當你「打電話」print(1, 2),你實際上正在打印元組(1, 2)

你需要以解壓縮參數的函數,所以進口的Python 3的在文件的最頂端print功能:

from __future__ import print_function 
+0

正確,但他根本不需要解開參數,因爲它不是一個函數。 – Marcin

+0

@Marcin:這就是爲什麼我建議'__future__'導入,它將'print'變成函數。 – Blender

+0

這是不必要的,因爲他不需要摔打,因爲它不是一個功能。 – Marcin

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」的輸出文件。

相關問題