함수 호출과 매개변수 선언에 있어서 * 와 **의 사용규칙

김건우·2021년 12월 22일
0

파이썬

목록 보기
15/18
post-thumbnail

iteralbe 객체와 매개변수

상황
func(⭐️iterable) : iterable 객체를 전달하면서, ⭐️을 붙여서 함수 호출 할 때
func(⭐️⭐️dict) : dict 객체를 전달하면서 ⭐️을 붙여서 함수 호출 할 때
def func(⭐️args) : 함수를 정의하면서 매개변수 args에 ⭐️ 붙일 때
def func(⭐️⭐️args) : 함수를 정의하면서 매개변수 args에 ⭐️⭐️ 붙일 때

객체를 전달하는 과정에서 언패킹이 진행되는 상황 ( 함수 호출 )
func(⭐️iterable) : 리스트, 튜플, 문자열을 풀어서 전달
func(⭐️⭐️dict) : 딕셔너리의 값을 풀어서 전달

def who(a, b, c):
	print(a, b, c, sep = ', ') 
who(*[1, 2, 3])				# 리스트를 풀어서 매개변수에 각각 전달
> 1, 2, 3
who(*(0.1, 0.2, 0.3))			# 튜플을 풀어서 매개변수에 각각 전달
> 0.1, 0.2, 0.3
who(*'abc') 				# 문자열을 풀어서 매개변수에 각각 전달
> a, b, c
d = dict(a = 1, b = 2, c = 3)
who(*d)					# *을 붙이면 키가 매개변수에 전달
> a, b, c
who(**d)				# **을 붙이면 값이 매개변수에 전달
> 1, 2, 3

딕셔너리 키와 값을 동시에 전달

def who(a, b, c):
	print(a, b, c, sep = ', ')
d = dict(a = 1, b = 2, c = 3)
who(*(d.items()))			# items 함수를 호출하여 뷰 객체로 전달
> ('a', 1), ('b', 2), ('c', 3)

딕셔너리와 매개변수

함수를 정의할 때 매개변수의 선언에 의해 패킹이 진행되는 상황 ( 함수 정의 )
def func(⭐️args) : 값들이 튜플로 묶여서 args에 전달된다.
def func(⭐️⭐️args) : 전달되는 내용이 딕셔너리로 묶여서 args에 전달된다.

def func(*args):		# 튜플
	print(args)	
func()
> ()
func(1)
> (1, )
func(1,2)
> (1, 2)
func(1, 2, 3)
> (1, 2, 3)
 def func(**args): 		# 딕셔너리 
 func(a = 1)
> {'a': 1}
 func(a = 1, b = 2)
> {'a':1, 'b':2}
 func('a' = 1, b = 2, c = 3)
> {'a':1, 'b':2, 'c':3}
def func(*args1, **args2):
	print(args1)		# 튜플
   print(args2)			# 딕셔너리  
func()
> ()
> {}
func(1, a = 1)
> (1,)
> {'a':1}
func(1, 2, a = 1, b = 2)
> (1, 2)
> {'a':1, 'b':2}
profile
공부하는 개발자가 목표입니다.

0개의 댓글