PYTHON

파이썬의 입출력(1) - 함수

휘성티비 2024. 8. 31. 00:15

 

 

프로그래밍을 하다 보면 반복해서 작성하고 있는 자신을 발견할 것이다. 이때가 함수를 사용해야 할 때이다.

반복적으로 사용되는 부분을 하나로 묶어 특정 값을 입력할 때 결과 값을 리턴해주는 식으로 작성하는 것이다.

 

사실 함수는 굉장히 자주 쓰이기 때문에 앞으로 실습을 진행하면서 자연스레 익혀보겠다. 이 글에서는 함수의 정의보다는 사용될 때 생길 수 있는 경우에 대해 간단히 다루겠다.

 

함수의 기본 구조

 

함수의 기본 구조는 다음과 같다.

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

 

의미에 대해서는 다음과 같이 해석할 수 있다.

함수의 이름은 add이고 입력으로 2개의 값을 받으며 리턴값은 2개의 입력값을 더한 값이다.

 

코드에서는 이런 식으로 사용이 가능하다.

>>> def add(a, b):
...     return a+b
...
>>>
>>> a = 3
>>> b = 4
>>> c = add(a, b)  # add(3, 4)의 리턴값을 c에 대입
>>> print(c)
7

 

이 상황에서 함수를 사용하다 보면 매개변수와 인수라는 단어를 수 없이 들어볼 텐데 함수를 사용할 때 함수 안에 값을 넣는 것을 인수라고 하고, 인수로부터 넘어온 값을 정의 부분에서 받아들이는 a, b를 매개변수라고 한다.

 

함수의 입력값과 리턴값

>>> def say(): 
...     return 'Hi'
>>> a = say()
>>> print(a)
Hi

위와 같이 함수는 입력 값이 없을 수도 있으며

 

>>> def add(a, b): 
...     print("%d, %d의 합은 %d입니다." % (a, b, a+b))
>>> add(3, 4)
3, 4의 합은 7입니다.

리턴 값이 없을 수도 있다.

 

>>> def say(): 
...     print('Hi')
>>> say()
Hi

물론 둘 다 없을 수도 있다.

 

매개변수 지정

>>> def sub(a, b):
...     return a - b

위와 같은 함수가 있을 때 매개 변수를 지정할 수도 있다.

 

>>> result = sub(a=7, b=3)  # a에 7, b에 3을 전달
>>> print(result)
4

이렇게 변수를 지정해 줄 수도 있다. 이때는 인수의 순서는 상관없다.

 

입력값이 여러 개인 함수

>>> def add_many(*args): 
...     result = 0 
...     for i in args: 
...         result = result + i   # *args에 입력받은 모든 값을 더한다.
...     return result

이처럼 매개변수 앞에 *을 붙이면 입력값을 모두 모아 튜플로 만든다.

 

>>> result = add_many(1,2,3)
>>> print(result)
6
>>> result = add_many(1,2,3,4,5,6,7,8,9,10)
>>> print(result)
55

 

kwargs

키워드 매개변수를 사용할 때 매개변수 앞에 별 2개를 붙인다.

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

 

이 단순한 함수를 다음과 같이 사용해보자

>>> print_kwargs(a=1)
{'a': 1}
>>> print_kwargs(name='foo', age=3)
{'age': 3, 'name': 'foo'}

의미를 잘 파악했으면 좋겠다.

 

리턴값은 하나이다.

간단히 설명하면 ㅈㄱㄴ이다.

하나만 리턴값으로 지정할 수 있고,

>>> def add_and_mul(a,b): 
...     return a+b, a*b

이렇게 작성하면 리턴값들이 한 튜플로 저장된다.

>>> result1, result2 = add_and_mul(3, 4)

이렇게 호출하면 각각 변수에 들어가긴 한다.

 

초기값 설정

초기값을 미리 설정해놓을 수 있다.

def say_myself(name, age, man=True): 
    print("나의 이름은 %s 입니다." % name) 
    print("나이는 %d살입니다." % age) 
    if man: 
        print("남자입니다.")
    else: 
        print("여자입니다.")

이 코드를 예시로 들겠다.

쉽게 설명하자면 함수 정의 시 초기값을 설정하면 호출 시 인수를 주지 않으면 초기값으로 입력된다.

 

def say_myself(name, man=True, age): 
    print("나의 이름은 %s 입니다." % name) 
    print("나이는 %d살입니다." % age) 
    if man: 
        print("남자입니다.")
    else: 
        print("여자입니다.")

만약 이렇게 정의하면 

say_myself("박응용", 27)

이렇게 호출 시에 오류가 난다. 인터프리터 언어에서 27을 man에 넣을지 age에 넣어야 할지 판단하기 어렵기 때문이다.

인수가 없을 때 초기값을 설정하기 때문에 초기값을 설정해줄 매개변수는 가장 뒤에 정의해야 한다.

 

 

 

함수에서 사용할 수 있는 함수 밖에서 정의한 변수, 파이썬에서 가장 중요한 요소인 lambda에 대한 내용은 다음 글에서 다루겠다.