Python에서 함수 인수로 목록, 튜플 및 사전 확장 및 전달

사업

Python에서는 목록(배열), 튜플 및 사전을 확장(압축 해제)할 수 있고 각각의 요소를 함수 인수로 함께 전달할 수 있습니다.

함수를 호출할 때 목록과 튜플의 경우 *를 사용하고 사전의 경우 **를 사용하여 인수를 지정합니다. 별표 수 *에 유의하십시오.

여기에는 다음 세부 정보가 설명되어 있습니다.

  • *(별표 1개)가 있는 목록 또는 튜플 확장(압축 해제)
    • 기본 인수가 있는 함수의 경우
    • 가변 길이 인수가 있는 함수의 경우
  • **(별표 2개)로 사전 확장(압축 풀기)
    • 기본 인수가 있는 함수의 경우
    • 가변 길이 인수가 있는 함수의 경우

함수를 정의할 때 Python 함수, 기본 인수 및 *,**가 있는 가변 길이 인수의 기본 사용법은 다음 문서를 참조하십시오.

*(별표 1개)가 있는 목록 또는 튜플 확장(압축 해제)

목록이나 튜플이 *가 있는 인수로 지정되면 확장되고 각 요소는 별도의 인수로 전달됩니다.

def func(arg1, arg2, arg3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

l = ['one', 'two', 'three']

func(*l)
# arg1 = one
# arg2 = two
# arg3 = three

func(*['one', 'two', 'three'])
# arg1 = one
# arg2 = two
# arg3 = three

t = ('one', 'two', 'three')

func(*t)
# arg1 = one
# arg2 = two
# arg3 = three

func(*('one', 'two', 'three'))
# arg1 = one
# arg2 = two
# arg3 = three

다음 설명은 목록에 대한 것이지만 튜플에도 동일하게 적용됩니다.

요소의 수가 인수의 수와 일치하지 않으면 TypeError 오류가 발생합니다.

# func(*['one', 'two'])
# TypeError: func() missing 1 required positional argument: 'arg3'

# func(*['one', 'two', 'three', 'four'])
# TypeError: func() takes 3 positional arguments but 4 were given

기본 인수가 있는 함수의 경우

기본 인수가 설정되어 있으면 요소 수가 부족한 경우 기본 인수가 사용됩니다. 요소의 수가 너무 많으면 TypeError 오류가 발생합니다.

def func_default(arg1=1, arg2=2, arg3=3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

func_default(*['one', 'two'])
# arg1 = one
# arg2 = two
# arg3 = 3

func_default(*['one'])
# arg1 = one
# arg2 = 2
# arg3 = 3

# func_default(*['one', 'two', 'three', 'four'])
# TypeError: func_default() takes from 0 to 3 positional arguments but 4 were given

가변 길이 인수가 있는 함수의 경우

가변 길이 인수가 설정되면 위치 인수에 대한 요소 뒤의 모든 요소가 가변 길이 인수로 전달됩니다.

def func_args(arg1, *args):
    print('arg1 =', arg1)
    print('args =', args)

func_args(*['one', 'two'])
# arg1 = one
# args = ('two',)

func_args(*['one', 'two', 'three'])
# arg1 = one
# args = ('two', 'three')

func_args(*['one', 'two', 'three', 'four'])
# arg1 = one
# args = ('two', 'three', 'four')

**(별표 2개)로 사전 확장(압축 풀기)

사전 dict가 **와 함께 인수로 지정되면 요소 키는 인수 이름으로 확장되고 값은 인수 값으로 확장되며 각각은 별도의 인수로 전달됩니다.

def func(arg1, arg2, arg3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

d = {'arg1': 'one', 'arg2': 'two', 'arg3': 'three'}

func(**d)
# arg1 = one
# arg2 = two
# arg3 = three

func(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three'})
# arg1 = one
# arg2 = two
# arg3 = three

인수 이름과 일치하는 키가 없거나 일치하지 않는 키가 있으면 TypeError 오류가 발생합니다.

# func(**{'arg1': 'one', 'arg2': 'two'})
# TypeError: func() missing 1 required positional argument: 'arg3'

# func(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three', 'arg4': 'four'})
# TypeError: func() got an unexpected keyword argument 'arg4'

기본 인수가 있는 함수의 경우

사전의 키와 일치하는 인수 이름의 값만 업데이트되는 이미지입니다.

인수 이름과 일치하지 않는 키는 TypeError 오류가 발생합니다.

def func_default(arg1=1, arg2=2, arg3=3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

func_default(**{'arg1': 'one'})
# arg1 = one
# arg2 = 2
# arg3 = 3

func_default(**{'arg2': 'two', 'arg3': 'three'})
# arg1 = 1
# arg2 = two
# arg3 = three

# func_default(**{'arg1': 'one', 'arg4': 'four'})
# TypeError: func_default() got an unexpected keyword argument 'arg4'

가변 길이 인수가 있는 함수의 경우

가변 길이 인수가 설정되면 인수로 지정된 인수 이름 이외의 키가 있는 모든 요소가 가변 길이 인수로 전달됩니다.

def func_kwargs(arg1, **kwargs):
    print('arg1 =', arg1)
    print('kwargs =', kwargs)

func_kwargs(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three'})
# arg1 = one
# kwargs = {'arg2': 'two', 'arg3': 'three'}

func_kwargs(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three', 'arg4': 'four'})
# arg1 = one
# kwargs = {'arg2': 'two', 'arg3': 'three', 'arg4': 'four'}

func_kwargs(**{'arg1': 'one', 'arg3': 'three'})
# arg1 = one
# kwargs = {'arg3': 'three'}