본문 바로가기
Python/Python 개념

파이썬 함수 - 기초

by hyun-am 2020. 3. 29.

파이썬 함수

 

함수에 대한 경험

 

이때까지 진행했던 파이썬 예제들에서 함수를 하나도 사용 안 했다고 생각하면 잘못된 생각입니다. 앞에서 했던 예제들에서도 저희들도 모르게 사용한 많은 함수가 있습니다.

예를 들면 sum, len, range등이 있습니다.

함수란 우리가 알고있는 개념처럼 주어진 입력(input)에 대해서 의도된 출력(output)를 전달하는 역할을 합니다.

그렇다면 하나씩 살펴보겠습니다.

먼저 range 함수는 정수를 입력으로 전달하면 (0,정수)로 이루어진 리스트를 생성하는 역할을 합니다.

sum 함수는 리스트, 튜플등을 입력하면 전체아이템의 합을 출력으로 전달하는 역할을 합니다.

len 함수는 리스트, 튜플등을 입력으로 전달하면 아이템의 개수를 출력으로 하는 전달하는 역할입니다.

 

그리고 위에 있는 함수들은 특별한 import 없이 그냥 구현이 가능합니다.

위와 같은 함수들은 내장 함수라고합니다. (built-in-function)

 

내장 함수의 예시

 

# range
range_list_a = list(range(0,11))
print(range_list_a)

# sum
sum_a = sum(a)
print(sum_a)

# len
len_a = len(a)
print(len_a)

## 출력 값
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 55
# 11

 

함수의 정의

 

정의할 때 맨 앞에 def를 적어서 정의합니다.

argument 정의(함수에 입력으로 전달하는 값을 의미, argument 또는 parameter 라고 합니다.)

예를 들면 def sum(a, b) 여기서 a, b 를 의미합니다.

: (콜론) → 함수 역시 코드 블록이기 때문에 콜론(:)이 필요합니다.

body는 함수를 구현하는 부분입니다. 함수 역시 코드 블록이기 때문에 들여쓰기 된 부분까지 함수의 코드블록으로 인지합니다.

 

함수를 호출한 코드(caller)로 함수가 해당 기능을 수행하고 완료된 값(output)을 전달하기 위해 return 키워드를 사용합니다.

즉, return 이후에 오는 값을 caller로 전달합니다.

함수를 이름 지을때는 중요합니다. 왜냐하면 어떤 기능을 하는 함수인지 정확히 나타내야 재사용 하기 편하기 때문입니다.

 

함수 예시 코드

 

저는 리스트의 평균을 구하는 함수를 만들어 보았습니다.

 

def average(a):
    avg = sum(a) / len(a)
    return avg

num_list = list(range(0,11))
print(average(num_list))

## 출력 값
# 5.0

 

함수의 호출 및 함수에서 사용하는 용어

 

def 함수이름(파라미터1, 파라미터2, .... 파라미터 n)

위와 같이 정의된 함수의 이름과 전달되는 parameter(인자)를 괄호안에 전달하여 함수를 호출합니다.

함수가 호출되면 실행의 흐름이 호출자에서 함수로 변경됩니다.

함수의 입력(input), 파라미터(parameter), 아규먼트(argument)라고도 합니다.

 

여기서 파라미터를 자세하게 설명하겠습니다.

 

파라미터(parameter), 인자(argument)

 

함수에 전달되는 입력압니다.(input) 입력이 필요하지 않을 수도, 1개의 입력만 있을 수도, 여러개의 입력이 존재할 수 있습니다.

파라미터로 int, string, float, boolean, list, dict 등 어떤 파이썬 객체도 전달 가능합니다.

심지어, 함수도 함수의 파라미터로 전달할 수 있습니다.

python의 경우, 타입 명시가 없기 때문에, 함수 생성 시, 의도된 파라미터의 타입에 맞게 입력을 전달하는 것이 중요합니다.

예시) 자바에서는 함수명이 다음과 같이 정의 됩니다.

static void swap(int[] a, int x, int y)

하지만 파이썬은

def swap(a,x,y)

이런식으로 정의 되기 때문입니다.

또한 파라미터를 전달 할 때, 정의된 순서에 따라 값을 전달하는 것이 중요합니다.

 

Default parameter(기본 인자)

 

함수의 파라미터에 기본 값 지정이 가능합니다. 파라미터를 명시하지 않을 경우, 지정된 값으로 대체 됩니다.

예시 코드는 다음과 같습니다. 다음 처럼 add에 10만 입력해도 출력을 하는 것을 확인 할 수 있고 값을 3개 넣어도 올바르게 값을 출력하는 것을 확인할 수 있습니다.

 

def add(x, y = 3, z = 7):
    a = x + y + z
    return a

print(add(10))
print(add(10,5,3))

## 출력 값
# 20
# 18

 

print 함수에서 사용하는 기본 파라미터 예시

 

print 함수는 sep, end, file등 여러 기본 파라미터를 가집니다.

먼저 예시 코드는 다음과 같습니다.

 

print(1,2,3,4,5,6,7,8,9,10)
print(9,8,7,6,5,4,3,2,1,0)

print(1,2,3,4,5,6,7,8,9,10,sep='*',end="")
print(9,8,7,6,5,4,3,2,1,0,sep='*',end="")

## 출력 값
# 1 2 3 4 5 6 7 8 9 10
# 9 8 7 6 5 4 3 2 1 0
# 1*2*3*4*5*6*7*8*9*109*8*7*6*5*4*3*2*1*0

 

프린트는 끝에 아무것도 적지 않아도 자동으로 '\n'효과가 있습니다. 하지만 end = "" 를 입력하면 '\n' 효과를 없애는 것을 확인할 수 있습니다. 또한 sep은 문자 사이에 들어갈 값들을 정해줍니다.

 

Default parameter를 사용할 때 주의 할 점

 

default를 사용할 때는 뒤에서 부터 차례대로 채워야 합니다. 중간에 채우거나 맨 앞에 채우는 경우 오류가 발생할 수 있습니다.

 

올바른 예

def test(a, b, c=1)
def test(a, b=1, c=2)
def test(a=1, b=2, c=3)

 

올바르지 않은 예

 

def test(a=1, b, c)
def test(a, b=1, c)
def test(a=1, b=2, c)

 

keyword parameter(키워드 파라미터)

 

파이썬의 경우, 파라미터에 값을 전달 할 때, 파라미터의 이름을 명시하면서 전달할 수 있습니다.

파라미터 이름을 사용하지 않을 경우, 기본적으로 순서에 맞게 전달합니다.

 

예시 코드는 아래와 같습니다.

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

test(c=10,a=1,b=2)
test(1,2,10)

## 출력 값
# 1 2 10
# 1 2 10

a, b, c 를 순서를 무작위 적어도 명시된 이름에 파라미터 값을 입력하여 전달할 수 있습니다.

 

return(리턴)

기본적으로 함수의 종료를 명시합니다. return 옆에 값이나 수식이 있다면 해당 값을 호출자(caller)에게 반환합니다.

만약 return만 존재한다면 None을 반환합니다. return이 없는 경우, 기본적으로 함수 코드 블록이 종료되면 종료로 간주합니다. 이때도 None을 반환합니다.

 

또한 return 값을 복수개로 반환할 수 있습니다. 예시는 아래와 같습니다.

 

def cal_c(x,y):
    sum_ = x + y
    sub_ = x - y
    mul_ = x * y
    div_ = x / y
    return sum_, sub_, mul_, div_ 

print(cal_c(5,10))

## 출력 값
# (15, -5, 50, 0.5)

'Python > Python 개념' 카테고리의 다른 글

파이썬 Lambda함수  (0) 2020.03.29
파이썬 - 함수(심화)  (0) 2020.03.29
파이썬 반복분(While)  (1) 2020.03.29
파이썬 반복문(for)  (0) 2020.03.28
파이썬 조건문  (0) 2020.03.28

댓글