함수 호출의 별표
다음과 같은 방식으로 목록 목록을 "플랫"하기 위해 itertools.chain을 사용하고 있습니다.
uniqueCrossTabs = list(itertools.chain(*uniqueCrossTabs))
이것이 다음과 어떻게 다릅니까?
uniqueCrossTabs = list(itertools.chain(uniqueCrossTabs))
*
는 "스플랫" 연산자입니다.목록과 같은 반복 가능한 항목을 입력으로 사용하고 함수 호출에서 실제 위치 인수로 확장합니다.
그래서 만약에uniqueCrossTabs
이었다[[1, 2], [3, 4]]
,그리고나서itertools.chain(*uniqueCrossTabs)
라고 말하는 것과 같습니다.itertools.chain([1, 2], [3, 4])
이것은 그냥 지나가는 것과는 분명히 다릅니다.uniqueCrossTabs
당신의 경우, 당신은 평평하게 하고 싶은 목록이 있습니다.itertools.chain()
사용자가 전달한 모든 위치 인수의 연결을 통해 반복기를 반환합니다. 각 위치 인수는 고유한 권한으로 반복됩니다.
즉, 각 목록을 전달하려는 경우uniqueCrossTabs
의 주장으로서chain()
그것들을 함께 묶을 것이지만, 당신은 별도의 변수에 목록이 없기 때문에 당신은 그것들을 사용합니다.*
연산자를 사용하여 목록 목록을 여러 개의 목록 인수로 확장합니다.
chain.from_iterable()
처음부터 반복 가능한 단일 항목을 가정하기 때문에 이 작업에 적합합니다.그러면 코드가 단순해집니다.
uniqueCrossTabs = list(itertools.chain.from_iterable(uniqueCrossTabs))
함수 호출에 대한 시퀀스를 별도의 인수로 나눕니다.
>>> def foo(a, b=None, c=None):
... print a, b, c
...
>>> foo([1, 2, 3])
[1, 2, 3] None None
>>> foo(*[1, 2, 3])
1 2 3
>>> def bar(*a):
... print a
...
>>> bar([1, 2, 3])
([1, 2, 3],)
>>> bar(*[1, 2, 3])
(1, 2, 3)
개념을 설명하거나 사용하는 다른 방법일 뿐입니다.
import random
def arbitrary():
return [x for x in range(1, random.randint(3,10))]
a, b, *rest = arbitrary()
# a = 1
# b = 2
# rest = [3,4,5]
언급URL : https://stackoverflow.com/questions/5239856/asterisk-in-function-call
'programing' 카테고리의 다른 글
Angular2 - Http POST 요청 매개 변수 (0) | 2023.08.26 |
---|---|
X-Frame-Options에 의해 로드가 거부됨: http://www.youtube.com/v/g5RM5StrMXY 은 교차 프레임 구성을 허용하지 않습니다. (0) | 2023.08.06 |
내포된 함수가 외부 함수의 변수에 액세스할 수 있지만 수정할 수 없는 이유 (0) | 2023.08.06 |
Excel VBA 필터링/가시 셀 (0) | 2023.08.06 |
선행 및 후행 공백을 어떻게 잘라낼 수 있습니까? (0) | 2023.08.06 |