[Python] 함수

haejun-kim·2020년 6월 22일
0

[Python]

목록 보기
5/19
post-thumbnail

함수란?


위의 그림으로 예를 들어보면 input(x) 라는 입력값이 어떤 기능을 하는 함수인 f 를 지났더니 output f(x)로 출력되었다. 입력값을 가지고 어떤 일을 수행한 다음에 그 결과물을 내어놓는 것, 이것이 바로 함수가 하는 일이다.

왜 쓰는데?

어떤 반복된 코드나 작업을 분리하면서 코드를 재사용하거나 조금 더 객체지향적인 프로그래밍을 위해 사용

반복되는 부분을 효율적으로

  • 코딩을 하다보면 하나의 기능을 여러번 사용해야 하는 경우가 굉장히 많다. 이러한 경우 필요한 매 순간마다 그 기능을 매번 구현하는것은 매우 불편하고도 코딩적이지 못한 일이다. 이 때, 반복되는 기능을 하나의 함수로 만들어놓는다면 그 기능이 필요할 때마다 만들어놓은 함수만 사용하면 훨씬 효율적으로 프로그래밍이 가능하다.

객체지향적인 프로그래밍

  • 함수를 사용하는 또 다른 이유는 코딩이 훨씬 깔끔해지고 흐름을 보기 수월해진다는 점이다.
    이렇게 되면 프로그램 흐름도 잘 파악할 수 있고 오류가 어디에서 나는지도 바로 알아차릴 수 있다.

함수의 구조

파이썬에서 함수는 어떻게 정의하고 실행할 수 있는지 알아보자.

기본 구조

def function_name():
    print("함수호출")
    return True

함수는 기본적으로 위의 내용처럼 정의만 한다고 실행이 되지 않고 해당 함수를 호출을 해줘야 실행이 된다.

a = function_name()

입력값이 필요한 함수

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

기본 구조와는 약간 다르게 함수명()()부분에 어떤 값이 들어가있다. 이 값을 매개변수라고 한다.

매개변수(parameter) : 함수에 입력으로 전달된 값을 받는 변수

def add(a, b) # a,b 는 매개변수

인자(argument) : 함수를 호출할 때 전달하는 입력값

print(add(3, 4)) # 3,4 는 인자

즉, 매개변수는 함수에 인풋 데이터를 전달하기 위한 변수이다.
이를 이용하여 함수에서 내가 원하는 입력값을 받도록 할 수 있다.

사용

구조를 알아보았으니 이제 어떤식으로 사용되는지에 대한 예시를 확인해보자.

def get_input_user(message):
    user = input(message)
    return user


user = get_input_user("사용자의 이름을 입력하세요>")
  1. 함수를 정의해주었고, 매개변수로 message를 받도록 하였다.
  2. user라는 지역변수를 만들어서 사용자에게 받은 input 값을 저장하도록 하였고, 그 값을 함수의 출력값으로 return 시켰다.
  3. 함수를 호출해주면 된다. 함수가 실행된다.

위의 예제에서 사용자의 입력값이 제대로 된 형태로 들어왔는지 (이름은 문자열, 나이는 숫자) 확인하고, 제대로 된 값이 들어올 때 까지 반복문을 실행하는 기능을 추가해보자.

def get_input_user(message, casting):
    while True:
        try:
            user = casting(input(message))
            return user
        except:
            continue

user = get_input_user("사용자의 이름을 입력하세요>", str)
ages = get_input_user("사용자의 나이를 입력하세요>", int)

함수의 매개변수로 casting을 추가했으며 이름은 문자열, 나이는 정수형으로 받도록 하였다.
try/except로 조건을 만족하면 결과값을 return , 만족하지 않으면 다시 반복문을 continue하도록 했다.
애초에 처음부터 매개변수에 기본값을 설정하는 방법도 있다.

def get_input_user(message, casting=int):
ages = get_input_user("사용자의 나이를 입력하세요>")

이렇게 입력하면 굳이 함수를 호출할 때 int로 타입을 지정해주지 않아도 casting=int에서 int값만을 받는다.

결과

결과값은 하나만

def add_and_mul(a,b):
    return a+b, a*b
    
result = add_and_mul(3,4)

이런 함수를 정의하면 결과는 어떻게 나올까?

result = (7, 12)

함수의 결괏값은 2개가 아니라 언제나 1개이기 때문에 add_and_mul 함수의 결괏값 a+ba*b는 튜플값 하나인 (a+b, a*b)로 돌려준다.
만약 이 하나의 튜플 값을 2개의 결괏값처럼 받고 싶다면 다음과 같이 함수를 호출하면 된다.

result1, result2 = add_and_mul(3, 4)

return

return은 함수의 주로 결괏값을 반환할 때 사용된다. 이러한 return이 함수를 빠져 나올 때 사용되기도 한다.

def say_nick(nick): 
    if nick == "바보": 
        return 
    print("나의 별명은 %s 입니다." % nick)

만약에 입력값으로 '바보'라는 값이 들어오면 문자열을 출력하지 않고 함수를 즉시 빠져나간다.
return을 이런식으로 사용하기도 하더라.

일급 객체 (first-class citizen)

파이썬에서는 함수가 일급 객체로 취급된다.
일급 함수는 객체 지향 프로그래밍중에서 파이썬을 포함한 몇몇 프로그래밍 언어에서 발견할 수 있는 개념이다.

일급 객체의 조건

일급 객체로 취급될 수 있는 조건엔 크게 세가지가 있다.

  • 변수나 데이터 구조 안에 담을 수 있는가
  • 매개변수로 전달이 가능한가
  • 리턴값으로 사용될 수 있는가

파이썬에서 함수는 일급 객체라고 취급하는걸 보면 위의 조건을 모두 만족하는 것으로 보인다.

예시

def hi():
    print("Hello")

hello = hi
hello()
print(type(hello))

hi()함수를 hello라는 변수 안에 담았다. 여기서 확인하고 넘어가야할 것은 변수에 담을 때는 ()를 넣지 않는다는것!
hello라는 변수는 이제 함수hi가 담겨있으니 이 변수를 실행할 땐 hello()로 실행시키면 된다.
함수가 제대로 담겨있는지 타입을 확인해보자.


🎬

함수는 위에서도 설명했듯 생산성과 효율성을 높이기 위해 필수적이기 때문에 자유자재로 함수를 만들고 사용할 수 있도록 연습에 연습을 해야겠다.

0개의 댓글