이 질문은 다소 길어질 수 있으므로 사전에 사과드립니다.과도한 위치 인수, 인수 목록 또는 튜플 풀기 및 반복 가능한 반복 포장
우리는 다음과 같은 세 가지 경우에 *를 사용할 수 있습니다 파이썬에서:
I. 우리는 인수의 임의의 번호로 호출되고 싶어하는 기능 등 in this example 등의 정의 :
def write_multiple_items(file, separator, *args):
file.write(separator.join(args))
을
이 경우 초과 위치 인수는 튜플으로 수집됩니다.
II.
>>> range(3, 6) # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6]
>>> range(*args) # call with arguments unpacked from a list
[3, 4, 5]
III를 : 인수가 목록 또는 튜플 중 하나에서 이미 우리는 in this example 별도의 위치 인수를 필요로하는 함수 호출을 풀고하고자 할 때 그 반대의 경우이다. 파이썬 3부터은 * 또한 튜플 in this example로 확장 목록 또는 튜플 풀기의 맥락에서 사용된다
>>> a, *b, c = range(5)
>>> b
[1, 2, 3]
또는리스트를 들어
>>> [a, *b, c] = range(5)
>>> b
[1, 2, 3]
를 둘다 경우에 따라, 언팩 된 반복 가능 항목 중 모든 필수 표현식에 지정되지 않은 모든 항목은 목록에 지정됩니다.
그래서 여기에 질문 : 경우 III에 추가 항목이 목록에 할당하는 동안 경우 에 나는, 여분의 인수는 튜플으로 수집. 이 불일치는 언제 발생 했습니까? 논의
가능한 변화가 있었다 :
[...]
는 별표 대상을 확인 튜플 대신 목록으로 내가 찾을 수있는 유일한 설명은 말한다 PEP 3132에 있었다 . 함수의 * args 인 과 일치하지만 과 일치하지만 결과의 처리를 더 어렵게 만듭니다. 일관성의 부족이 문제가 특히 당신이 결과를 처리하기를 원한다면, 당신은 항상 목록의 (b) (위의 예에서 B를 가정 말할 튜플이었다 수 제공하는 교육 학적 관점에서 그러나
,). 내가 놓친 게 있니?
답해 주셔서 감사합니다. 간단히 말해서 내가 듣고있는 것은 ** ** ** 목록을 제공하도록 설계되어 있어야합니다. –
@Alexandros, 저의 견해입니다.하지만 당연한 생각은 20/20입니다. 그 결정은 ... 11 년 전의 파이썬 1.5.2에서 언제 나왔는지는 잘 모르겠습니다. –