2013-06-28 2 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

파이썬 2를 사용한다면'print (* n.tolist())'는 어떻게 에러를 던지지 않습니까? 또한,'writerow'는 필드의리스트를 가지고 있습니다. 그래서 여러분은 splat을 제거 할 수 있습니다. – Blender

답변

0

print이 기능이면 print(1,2)을 의미합니다. 그것은 아닙니다. 그것은 진술입니다. 이 경우 (1,2)은 실제로는 하나의 튜플이 아니라 함수 호출입니다.

인쇄가 기능이 아니기 때문에 귀하의 경우에는 표시 할 필요가 없습니다.

함수 호출 외부에 표시 할 수 없습니다.

1

파이썬 2에서 print은 함수가 아닌 명령문이므로 실제 인수가 필요하지 않습니다. print(1, 2)을 "호출"하면 실제로 튜플 (1, 2)이 인쇄됩니다.

당신은 인수를 압축하기 위해 기능, 그래서 수입 파이썬 파일의 맨 위에 3의 print 기능이 필요합니다

from __future__ import print_function 
+0

맞지만 그는 함수가 아니기 때문에 인수를 아예 풀어 낼 필요가 없습니다. – Marcin

+0

@Marcin : 그래서'print'를 함수로 바꾸는'__future__' 가져 오기를 제안합니다. – 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?"에 따라 어떻게해야하는지가 아닙니다. 수정 된 버전은 "5,1,2,3,4"를 출력하는 출력 파일에 대해

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

입니다.

관련 문제