programing

함수 호출의 별표

mytipbox 2023. 8. 6. 17:35
반응형

함수 호출의 별표

다음과 같은 방식으로 목록 목록을 "플랫"하기 위해 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

반응형