본문 바로가기

Programming Language/Python

[Python] 5. 함수 (1) - 함수의 구조

반응형

 

[목차]

 

1. 함수(Function)란?

 

2. 함수(Function)의 형태

 

 

 

  1. 함수(Function)란?

 

코드를 작성하다보면 들어가는 값만 달라질 뿐 같은 작업을 여러번 반복해야할 때가 있다. 그런 코드를 반복해서 작성하면 매우 비효율적이다. 

이런 경우에 임의의 값에 대해서 동일하게 작동하는 틀을 미리 만들어놓고, 필요할 때마다 값을 넣어서 결과값을 구할 수 있도록 하는 기능을 '함수'라고 한다.  

어떠한 타입의 값이 들어오더라도 항상 동일하게 입/출력을 수행해주는 작업을 하는 print, input 등도 모두 파이썬에서 미리 만들어진 함수이다.

 

1. 함수의 장점

  • 코드의 용도를 구분할 수 있다.
  • 코드를 여러번 재사용할 수 있다.
  • 코드의 길이가 짧아진다.
  • 오류 발생 위치를 빠르게 찾을 수 있다.

 

2. 함수의 구조

 

파이썬에서 함수의 구조는 기본적으로 다음과 같다. 다양한 형태에 대해서는 뒤에서 자세하게 알아보자.

조건문, 반복문과 마찬가지로 들여쓰기를 통해서 함수의 범위를 지정한다. 

 

def 함수명(매개변수):

    [수행할 코드]

 

 

3. 매개변수와 인수

 

함수에서 매개변수와 인수라는 용어를 헷갈리는 경우가 많다. 매개변수(parameter)는 함수에 입력으로 전달된 값을 받는 변수를 의미하고, 인수(arguments)는 함수를 호출할 때 전달하는 입력값을 의미한다. 

 

 

  2. 함수(Function)의 형태

 

1. 입력값과 반환값이 모두 없는 함수

 

앞에서 함수의 구조를 간략하게 알아보았다. 입력값이 없는 함수는 매개변수가 들어갈 자리를 비워둔다. 

함수 정의 형태와 호출 방식은 다음과 같다.

# 함수 정의
def hi():
    print("hello world!")

# 함수 호출
hi()
hi()

# 출력 결과
# hello world!
# hello world!

 

입력값이 없기 때문에 함수를 호출할 때에도 입력값을 넣지 않고 '함수명()' 의 형태로 호출한다. 

이렇게 함수를 정의해두면 print("hello world!")를 반복해서 적을 필요없이 hi()만 호출하면 되는 편리함이 있다. 

 

 

2. 입력값은 있고 반환값은 없는 함수

 

입력값이 있는 함수는 여러가지 입력값에 대해서 동일한 작업을 하고자 할 때 주로 이용된다. 

 

def date(a):
    print("오늘은 %d일 입니다." %a)

date(10) # 오늘은 10일 입니다.

def oper(a, b):
    print(a+b, a-b, a*b, a/b)

oper(2, 3) # 5 -1 6 0.66666666


# 1부터 k까지의 자연수의 합 구하는 함수
res = 0
def sum(k):
    global res
    for i in range(1, k+1):
        res += i

sum(10)
print(res) # 55

 

세번째 함수에서 주의할 점이 있다. 

만약 함수 밖에서 선언된 전역변수(res)인 경우, 해당 변수의 값을 수정하고 싶다면 함수 내에서 global이라는 키워드를 통해 '현재 이용할 변수(res)가 전역변수이다'라고 알려주어야 한다. 

그렇지 않으면 "UnboundLocalError: local variable 'res' referenced before assignment" 라는 에러가 발생한다. 

 

res += i 는 res = res + i과 같은 코드인데, 이는 제일 처음에 res라는 지역변수가 새로 생성된 후에 res + i라는 값을 대입해가는 형태이므로 처음의 res값을 알 수 없어 에러가 발생하는 것이다. 

 

 

3. 입력값은 없고 반환값만 있는 함수

 

주로 특정 값에 상관없이 항상 동일한 결과를 반환하고자 할 때 사용하는 경우이다. 함수에서 값을 반환하기 위해서는 'return' 이라는 키워드를 이용한다. 

 

def say():
    return "hello"
a = say()
print(a) # hello

def event():
    return "님 당첨되셨습니다."
print('Rebro' + event()) # Rebro님 당첨되셨습니다.

 

 

4. 입력값과 반환값이 모두 있는 함수

 

주로 특정 값에 대해서 연산을 한 후, 그 결과값이 필요한 경우에 사용한다. 

# 두 수를 입력받아 곱을 출력
def mul(a, b):
    return a*b

print(mul(3, 4)) # 12


# 십진수의 각 자릿수를 모두 더한 값을 반환하는 함수
def digitsum(a):
    res = 0
    while a > 0:
        res += a%10
        a //= 10
    return res

print(digitsum(1235)) # 11
print(digitsum(11112222)) # 12


# 100 이하의 a의 배수를 리스트로 만들어 반환하는 함수
def func(a):
    res = []
    i = a
    while i <= 100:
        res.append(i)
        i += a
    return res

print(func(12)) # [12, 24, 36, 48, 60, 72, 84, 96]

 

 

 

반응형