Python Basic 15 | 함수

devheyrin·2022년 1월 10일
0

python basic

목록 보기
15/19

함수 만들고 호출하기

def hello():
    print('hello, world!')
hello()

# hello, world!

함수의 실행 순서

  1. 파이썬 스크립트 최초 실행
  2. hello 함수 호출
  3. hello 함수 실행
  4. print 함수 실행 및 문자열 출력
  5. hello 함수 종료
  6. 파이썬 스크립트 종료

매개변수 사용하기

def add(a, b):
    print(a + b)
add(1, 30)

# 31 

참고) 독스트링 사용하기

def add(a, b):
    """이 함수는 a 와 b를 더한 결과를 반환하는 함수입니다."""
    return a + b

print(add(10, 20))  # 30
print(add.__doc__)  # 이 함수는 a 와 b를 더한 결과를 반환하는 함수입니다.
help(add) 
# 결과 
Help on function add in module __main__:

add(a, b)
    이 함수는 a 와 b를 더한 결과를 반환하는 함수입니다.

반환값(return) 사용하기

def add(a, b):
    return a + b

x = add(10, 20)
print(x)  # 30 

return 으로 반환하는 값을 반환값이라고 하며, 함수 호출의 결과를 바깥에 알려주기 위해 사용한다.

def not_ten(a):
    if a == 10:
        return
    print(a, '입니다', sep='')

not_ten(10)
not_ten(3)  # 3입니다

return 은 if와 조합하여 특정 조건일 때 함수 중간에서 빠져나오기 위한 용도로도 사용한다.

def add_sub(a, b):
    return a+b, a-b

result = add_sub(20, 10)
print(result)  # (30, 10) 
add, sub = add_sub(20, 10)
print(add)  # 30
print(sub)  # 10

값을 여러 개 반환할 때는 return 에 반환값을 콤마로 구분해서 지정한다. 함수 호출 시 결과는 튜플로 반환된다.

리스트 언패킹을 활용해 가변 인수 함수 만들기

리스트 또는 튜플 앞에 * 을 붙이면 언패킹되어서, 요소를 각각 넣은 것과 마찬가지의 기능을 수행할 수 있다.

def print_numbers(a, b, c):
    print(a)
    print(b)
    print(c)

print_numbers(1, 2, 3)
print_numbers(*[1, 2, 3])
x = [1, 2, 3]
print_numbers(*x)

가변 인수 함수 만들기

인수의 개수가 정해지지 않은 함수를 가변 인수 함수라고 한다.

def print_number(*numbers):
    for arg in numbers:
        print(arg)

print_number()
print_number(10, 20)
print_number(20, 40, 50)
x = [10, 20, 30]
print_number(*x)

매개변수는 args가 아닌 원하는 대로 지어도 상관 없지만, 관례적으로 arguments를 줄여서 args 로 사용한다.

args라는 매개변수 이름으로 튜플을 넘겨주는 함수이다.

함수를 호출할 때 매개변수로는 콤마를 이용해 직접 값을 여러 개 넣어도 되고, 리스트(튜플) 언패킹을 사용해도 된다.

고정 인수와 가변 인수를 함께 사용하기

매개변수 순서에서 가변 인수는 항상 고정 인수 뒤에 와야 한다.

def print_number(a, *args):
    print(a)
    print(args)

# print_number()  # 최소한 한 개의 인수가 필요하기 때문에 에러 발생
print_number(10)
print_number(20, 40)
x = [10, 20, 30]
print_number(*x)

키워드 인수 사용하기

def personal_info(name, age, address):
    print('이름: ', name)
    print('나이: ', age)
    print('주소: ', address)

personal_info(name='heyrin', age=24, address='이촌동')

딕셔너리 언패킹

함수의 매개변수 이름과 딕셔너리 키 이름이 일치해야 하고, 매개변수 개수와 딕셔너리 키 개수도 일치해야 한다.

def personal_info(name, age, address):
    print('이름: ', name)
    print('나이: ', age)
    print('주소: ', address)

x = {'name': '홍길동', 'age': 30, 'address': '서울시 용산구 이촌동'}
personal_info(**x)

가변 인수 함수 만들기

인수를 직접 넣어 주거나, 딕셔너리 언패킹으로 함수를 호출할 수 있다.

def personal_info(**kwargs):
    for kw, arg in kwargs.items():
        print(kw, ': ', arg, sep='')

personal_info(name='홍길동')
personal_info(name='홍길동', age=25)
x = {'name': '홍길동', 'age': 30, 'address': '서울시 용산구 이촌동'}
personal_info(**x)

보통 **kwargs를 사용한 가변인수함수는 함수 안에서 특정 키가 있는지 확인한 후 기능을 수행하도록 만든다.

def personal_info(**kwargs):
    if 'name' in kwargs:
        print('이름: ', kwargs['name'])
    if 'age' in kwargs:
        print('나이: ', kwargs['age'])
    if 'add' in kwargs:
        print('주소: ', kwargs['add'])

# gender는 함수에서 확인할 수 없기 때문에 출력되지 않는다. 
personal_info(name='홍길동', age=28, add='서울시 강남구', gender='Male')

위치 인수와 키워드 인수 함께 사용하기

*agrs 는 위치 인수를, **kwargs 는 키워드 인수를 받는다. 두 가지는 함께 사용할 수 있다. 대표적인 함수가 print 이다.

위치 인수와 키워드 인수를 함께 사용하는 경우, **kwargs 가 반드시 가장 뒤쪽에 와야 한다. 고정 매개변수와 함께 사용한다면 고정매개변수, 위치인수, 키워드 인수 순으로 지정해야 한다.

매개변수에 초깃값 설정하기

초깃값이 지정된 매개변수는 항상 맨 마지막으로 지정해야 한다.

def personal_info(name, age, add='비공개'):
    print('이름: ', name)
    print('나이: ', age)
    print('주소: ', add)

# 초깃값이 있는 add는 생략하고 호출할 수 있다. 
personal_info('홍길동', 30)
# 값을 넣으면 해당 값이 전달된다. 
personal_info('홍길동', 30, '용산구') 
profile
개발자 헤이린 🔜 프로덕트 매니저로 나아가는 중!

0개의 댓글