당신은 멋쟁이, 우리는 장고쟁이~

0%

Python 기초 17편 - 사용자 정의 함수

User defined functions


소개글


모든 프로그램 언어와 스크립트 언어들에서, 함수는 프로그램 문장 블럭으로

프로그램 안에서 반복적으로 사용될수 있는것입니다.


함수는 코드 블럭을 다시 재사용할수 있게 만들어서, 프로그래머들의 시간을 낭비하지 않게 해줍니다


파이썬에서 함수의 개념은 다른 언어들과 동일합니다.

파이썬에는 미리 정의가 되어 있는, built in 함수, 즉 내장되어 있는 함수가 존재하고. 혹은, 사용자가 필요에 의해 정의를 한 사용자 정의 함수가 존재할수 있습니다.


파이썬에서 함수 정의


  1. def로 시작하고, def 다음에 함수이름을 적어주면 선언됩니다
  2. 함수는 def <함수명> () : 형태로, 괄호안에 input 으로 쓰여질 인자들을 정의할수 있고, : 으로 끝납니다
  3. 함수명에 인자를 정의해 주면, 다음줄부터 코드 문장을 쓸수 있고, 이 코드 문장들은 들여쓰기가 되어 있어야 합니다.

간단한 함수를 예로 들어보면, 아래와 같습니다.


1
2
3
4
5
6
7
8
9
# 사용자 정의 함수 
# average_number 는 함수명
# x, y 는 함수에 input 으로 쓰여질 인자들

def average_number(x, y):
print("x 와 y 의 평균은 {} 입니다".format((x + y) / 2))

# 정의된 함수를 호출 x 값엔 4를, y 값에는 6을 넣어줍니다
average_number(4, 6)

함수를 호출하는 방법


다른 프로그래밍 언어들과 비슷하게, 함수를 호출하는 방법은, 함수명을 쓰고 () 안에 파라미터를 넣어주어 호출합니다. 위의 예시에서 average_number(4 ,6) 은 average_number 라는 함수를 호출하고, 파라미터로, 4, 6 을 넣어줍니다


함수 호출 예시


1
2
3
4
5
6
7
8
9
10
11
# 함수 호출 예시 

def print_three_times():
print("이것은 파이썬 기초 입니다")
print("이것은 파이썬 기초 입니다")
print("이것은 파이썬 기초 입니다")

# 위의 정의된 함수를 호출
# 함수는 인자를 가지지 않고, print 문을 3번 실행 합니다

print_three_times()

함수에서 return 문


파이썬에서 return 문은 함수로부터 값을 반환하기 위해 사용됩니다. 수식과 인자가 없이 실행된 함수에 return 문은 None 을 반환합니다.


예를들면,


1
2
3
4
5
6
def nsquare(x, y):
return (x * x + 2*x*y + y*y)

# return 뒤의 수식 의 값을 함수의 값으로 반환합니다

print("2와 3의 합계의 제곱은 : {}".format(nsquare(2, 3)))

기본 인자 값


함수의 파라미터 리스트에서 우리는, 하나 혹은 그 이상의 인자들에 대해 기본값을 지정할수 있습니다.

기본값은, 인자1 = 값 의 형태로 작성될수 있습니다.


우리는 어떤 인자가 기본값을 가지게 될지에 대해서 선택하여 지정할수 있습니다.


예를들면,


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# y 는 2라는 값을 기본값으로 지정됩니다 
def nsquare(x, y = 2):
return (x*x + 2*x*y + y*y)

# y값에 대한 파라미터가 전달되지 않는다 하더라도
# y 는 기본값인 2를 가지고 함수를 실행하고
# 그에 맞는 값을 반환합니다

print("2와 3의 합계의 제곱은 : {}".format(nsquare(2)))

# y 값에 대한 파라미터가 4로 전달이 되면,
# y 는 전달된 4라는 값을 가지고 함수를 실행하고
# 값을 반환합니다

print("2 와 4의 합계의 제곱은 : {}".format(nsquare(2,4)))

키워드 인자


우리는 어떻게 기본 인자값들을 지정하는지 배웠습니다만.

함수는 키워드 인자들을 사용하여 호출될수도 있습니다.


키워드 인자란?

변수명 = 값 형태로 되어 있는 인자들을, 키워드 인자라고 부릅니다.


함수에 전달된 모든 키워드 인자들은, 함수가 받는 인자들중 하나와 꼭 매치가 되어야 합니다.


아래 예시에서, 함수가 호출될때마다, 함수로 전달되는 인자들중 꼭 한가지는 함수가 받는 인자들중 하나와 매치가 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 키워드 인자 

def marks(english, math=85, science=80):
print("Marks in : English is - ", english, "Math -", math, "Science -", science)

# english parameter 는 71의 값을 갖고, math 는 77 그리고 science 는 기본값인 80을 갖습니다
marks(71, 77)

# english parameter 는 65 의 값을 갖고, math 는 기본값인 85, 그리고 science 는 74로 전달 됩니다
marks(65, science=74)

# 순서가 바뀌긴 했지만, 상관없이 정확히 매칭만 된다면,
# english 는 75의 값을, math 는 90의 값을, science 는 70의 값을 갖게 됩니다
marks(science=70, math=90, english=75)

Arbitrary Argument Lists


arbitrary argument, 즉 임의의 인자 리스트는, 인자들을 함수에 전달하는 다른 방법중 하나 입니다.


함수의 body 안에서, 이 인자들은 튜플로 감싸져 있고. 이는 *args 생성자를 사용하여 정의 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Arbitrary Argument List 

def sum(*numbers):
s = 0
for n in numbers:
s += n
return s

# *numbers 로 임의의 인자가 지정되었기 때문에
# 인자가 몇개가 들어가든 상관 없습니다

print('1부터 4까지의 합은 {}'.format(sum(1,2,3,4)))
print('1부터 10까지의 합은 {}'.format(sum(1,2,3,4,5,6,7,8,9,10)))

# *args 에는 여러 인자들이 들어갈수 있고,
# 함수 내부에는 tuple 로 감싸져서 사용됩니다

def arbitrary_arguments(*args):
print(type(args))

arbitrary_arguments(1,2,3,4)

Lambda 함수


파이썬에서, 작은 익명의 함수들 (이름이 지어지지 않은) lambda 키워드를 생성하여 사용될수 있습니다.


lambda 형태의 함수들은, 다른 함수의 인자로써 사용될수도 있습니다


예를들면,


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# lambda forms 

def average(x, y):
return (x + y) / 2
print(average(4, 3))

# 위 함수를 lambda 를 사용하여 정의해 본다면,
print((lambda x, y: (x+ y)/2)(4, 3))

# 또다른 lambda 의 예시

def multiply_two(x, y):
return x * y

print(multiply_two(5, 5))
# 위 함수를 lambda 를 사용하여 정의하면,
print((lambda x, y: x * y)(5,5))