2010-12-22 4 views
2

저는 파이썬으로 한 줄을 보았습니다.파이썬에서 "*"는 무엇을 의미합니까?

  self.window.resize(*self.winsize) 

이 줄에서 "*"는 무엇을 의미합니까? 파이썬 튜토리얼에서 이것을 보지 못했습니다.

+1

보기 ([인자리스트 풀기] http://docs.python.org/tutorial/controlflow.html?highlight=unpacking#unpacking-argument- 목록) 온라인 [Python Tutorial] (http://docs.python.org/tutorial/index.html)에 있습니다. – martineau

+0

http://stackoverflow.com/questions/4496712/better-way-of-handling-nested-list/4497363#4497363을 참조하십시오. –

+0

[**와 * do는 python 매개 변수에 대해 무엇을 할 수 있습니까?] (http://stackoverflow.com/questions/36901/what-does-and-do-for-python-parameters) – sth

답변

8

하나의 가능성은 self.winsize가 목록 또는 튜플이라는 것입니다. * 연산자는 목록이나 튜플에서 인수를 풉니 다.

참조 : http://docs.python.org/tutorial/controlflow.html#unpacking-argument-lists

아 : SO를 토론이에있다 : Keyword argument in unpacking argument list/dict cases in Python

예 :

>>> def f(a1, b1, c1): print a1 
... 
>>> a = [5, 6, 9] 
>>> f(*a) 
5 
>>> 

그래서리스트 나 튜플에서 요소의 압축을 풉니 다가. 요소는 무엇이든 될 수 있습니다.

또 다른 작은 추가 : 함수가 명시적인 수의 인수를 예상하면 튜플 또는 목록은 필요한 요소의 수와 일치해야합니다.

>>> a = ['arg1', 'arg2', 'arg3', 'arg4'] 
>>> f(*a) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: f() takes exactly 3 arguments (4 given) 
>>> 

인수의 수를 모른 채 여러 인수를 승인하려면 :

여기
>>> def f(*args): print args 
... 
>>> f(*a) 
('arg1', 'arg2', 'arg3', 'arg4') 
>>> 
+2

가능한 유일한 방법입니다. – Falmarri

+0

감사합니다. 숫자 순서만으로 작동합니까? – sqram

+0

@Falmarri : 정말 고마워! 나는 확실하지 않고 소리가되고 싶지도 않았다. – pyfunc

2

, self.winsise는 튜플 또는 기대 self.window.resize 인수의 수와 같은 요소를 정확히 동일한 번호 목록입니다. 숫자가 적거나 많으면 예외가 발생합니다.

그렇다면 비슷한 트릭을 사용하여 원하는 수의 인수를 허용하는 함수를 만들 수 있습니다. this을 참조하십시오.

+0

확인을 마쳤습니다. 감사! – sqram

2

튜플 또는 목록 일 필요는 없지만 이전 (유한) 반복 가능한 모든 작업을 수행 할 수 있습니다. 여기

이 예는 발전기 식 통과

>>> def f(*args): 
...  print type(args), repr(args) 
... 
>>> f(*(x*x for x in range(10))) 
<type 'tuple'> (0, 1, 4, 9, 16, 25, 36, 49, 64, 81) 
관련 문제