2010-08-13 3 views
122

'unpack'이 잘못된 어휘 일 수도 있습니다 - 사과합니다. 중복 질문입니다.파이썬으로 목록의 압축을 풉니 다?

내 질문은 매우 간단합니다. 항목 목록이 필요한 함수에서 파이썬 목록 항목을 오류없이 전달할 수 있습니까?

my_list = ['red', 'blue', 'orange'] 
function_that_needs_strings('red', 'blue', 'orange') # works! 
function_that_needs_strings(my_list) # breaks! 

은 분명히이 목록을 확장 할 수있는 방법, 그리고 발굽에 기능 'red','blue','orange'을 통과해야합니까?

+30

내 # 1 불평은'*'연산자와 같은 깔끔한 물건을 찾는 어려움이다. :) –

+1

예. 도대체 어떻게 미리 그걸 할 수 있는지 알고 있었습니까? – gtrak

+1

"python apply"를 검색하고 거기서 문서를 읽으면 거기에 구문을 지적합니다. "적용"은 이러한 방식으로 여러 언어에서 사용됩니다. – srparish

답변

160
function_that_needs_strings(*my_list) # works! 

You can read all about it here.

+0

-1'csvfile'이'csv.writer' 객체라고 가정하면,'writerow' 메소드는 단지 하나의 arg를가집니다. 함수/메소드 호출에서'args'는'arg [0], arg [1], ...'을 쓰는 짧은 방법 일뿐입니다. 함수 또는 메소드는 사용자가 제공하는 args를 처리 할 수 ​​있어야합니다. '* args'는 funtion/method arg 선언을 오버라이드하는 부두가 아닙니다. 귀하의 예제는'len (my_list) == 1' 일 때만 "작동"합니다. 이것은 제가 잠시 본 가다 레인 상영의 최악의 경우입니다. –

+1

@ John Machin : 질문의 요점을 놓쳤습니다. 방금 질문의 첫 번째 개정판에서 함수를 복사했지만 방금 변경했습니다. –

+0

@ THC4k : 나는 그 질문에 대해 잘 알고 있습니다. 당신이 대답의 일부를 복사 한 곳은 부적절합니다. 제 대답은 당신의 대답의 첫 문장이 우습게 잘못되었다는 것입니다. –

15

예, 당신이 *args (플랫) 구문을 사용할 수 있습니다

function_that_needs_strings(*my_list) 

my_list 어떤 반복 가능한 일 수있다; 파이썬은 주어진 객체를 반복하고 각 요소를 함수에 대한 별도의 인자로 사용합니다.

call expression documentation을 참조하십시오.

키워드 매개 변수 상당 별 2 개 사용,뿐만 아니라있다 :

kwargs = {'foo': 'bar', 'spam': 'ham'} 
f(**kwargs) 

equivalent syntax 함수 서명에 포괄 인수를 지정하는이 :

def func(*args, **kw): 
    # args now holds positional arguments, kw keyword arguments 
5

이후 파이썬 3.5 당신은 list을 무제한으로 풀 수 있습니다.

PEP 448 - Additional Unpacking Generalizations

그래서이 작동합니다 : 파이썬

a = ['1', '2', '3', '4'] 
b = ['5', '6'] 
function_that_needs_strings(*a, *b) 
+0

어떻게하면 동일한 작업을 수행 할 수 있습니까? 파이썬 2.7 또는 3.4? – answerSeeker

관련 문제