본문 바로가기
Python

16. 파이썬 - 함수(초깃값, 값지정), args, kwargs

by 새싹_v 2022. 9. 15.
728x90


 

 

함수(초깃값, 값지정)

 

- 인자에 기본값 지정하기

 

# 초깃값 미리 설정하기

def say_intro(name, age, man=True):
    print(f"제 이름은 {name} 입니다.")
    print(f'제 나이는 {age}살 입니다.')
    if man:
        print('남자입니다.')
    else:
        print('여자입니다.')

say_intro('새싹', 7)  
# 제 이름은 새싹 입니다.
# 제 나이는 7살 입니다.
# 남자입니다.
#초기 값을 설정했기 때문에 남성이라고 출력

say_intro('장미', 10, False)
# 제 이름은 장미 입니다.
# 제 나이는 10살 입니다.
# 여자입니다

 

초기값 설정 시 주의사항

man=True (매개변수)는 항상 뒤쪽에 놔야 한다.
아래 코드처럼 중간에 오면 오류가 발생하게 됨.
def say_intro(name, man=True, age): #name, age, man=True 이 순서가 정상
    print(f"제 이름은 {name} 입니다.")
    print(f'제 나이는 {age}살 입니다.')
    if man:
        print('남자입니다.')
    else:
        print('여자입니다.')

say_intro('새싹', 7)  
#오류메시지
#SyntaxError: non-default argument follows default argument

 

 

 

args(arguments), kwargs(keyword arguments)

args와 kwargs는 함수에서 인자로 받을 값들의 개수가 
불규칙하거나 많을 때 사용한다.

*args 처럼 매개변수 이름 앞에 *을 붙이면 입력값을 전부 모아서 튜플로 만들어 준다.
*args에 args는 임의로 정한 이름이다. (다른 이름 사용 가능)

**kwargs 처럼 매개변수 이름 앞에 **을 붙이면 매개변수
kwargs는 딕셔너리가 되고 모든 key=value 형태의 결괏값이 그 딕셔너리에 저장된다.

 

- args 사용해보기

def add_many(*args):
    add = 0
    for i in args:
        add += i
    return add

print(add_many(1,2,3,4,5))  #15

 

 

- kwargs 사용해보기

def print_kwargs(**kwargs):
    print(kwargs)

print_kwargs(a=1)   #{'a': 1}
print_kwargs(name='나나', age=10) #{'name': '나나', 'age': 10}

 

 

 

패킹과 언패킹

패킹(packing)과 언패킹(unpacking)은 요소들을 묶어주고나 풀어주는 의미
위에 args해보기와 kwargs해보기에서 패킹을 확인해 볼 수 있다.

list 혹은 dictionary의 값을 함수에 입력할 때 주로 사용([ ], { }를 벗겨줌)

 

unpacking 해보기

#리스트 활용

def add_many(*args):
    add = 0
    for i in args:
        add += i
    return add

my_list = [1,2,3,4,5]

print(add_many(*my_list))   #my_list 글자 앞에 *를 사용하면 리스트가 벗겨지며 언패킹이됨
#15

 

#딕셔너리에서 활용

def my_profile(**kwargs):
    profile = {}
    profile['name'] = kwargs.get('name','-')
    profile['age'] = kwargs.get('age','-')
    profile['gender'] = kwargs.get('gender','-')

    return profile

my_intro = {
    'name': '새싹',
    'age' : 7,
    'gender': '남'
}

print(my_profile(**my_intro))
# {
#     'name': '새싹',
#     'age': 7, 
#     'gender': '남'
#     }

 

 

 

 

 

위에 글 내용은 오류 사항이 존재할 수 있습니다!

수정 사항이 있을 시 알려주시면 감사하겠습니다.

728x90

댓글