6. 함수 선언하기
【파이선 배우기】
1. 함수 정의하기
2. 내장 함수
3. 모듈과 임포트
음료수 자판기에서 원하는 음료가 나오도록 프로그램을 만드는 일은 결코 단순한 일이 아니다. 하지만 누군가가 한 번 프로그램을 만들어 놓으면 만들어 놓은 프로그램을 누구나 재사용해서 언제든지 원하는 음료수가 나올 수 있도록 할 수 있다. 사용자는 음료수 자판기 내부에서 어떤 프로그램에 의해서 원하는 음료수가 나오는지 신경 쓰지 않고 이미 만들어진 프로그램에 의해 원하는 버튼만 누르면 원하는 음료수를 바로 얻을 수 있다.
우리가 가장 많이 사용했던 print() 함수는 괄호 안의 내용을 화면에 출력하는 함수이지만, 우리는 어떤 과정을 거쳐서 괄호 안의 내용이 화면에 출력되는지는 신경 쓸 필요 없이 출력하고 싶은 내용을 괄호 안에 입력했다. 이렇게 파이선에는 많은 함수가 사용되고 있다. 파이선 내부에서 직접 제공하는 함수도 있고, 직접 함수를 만들어서 사용할 수도 있다. 이번 시간에는 함수에 대해 알아보도록 하겠다.
1함수 정의하기
가. 함수의 개념
함수란 어떤 일을 수행하는 코드의 묶음을 말한다. 파이선을 처음 시작할 때 “Hello World!”를 화면에 출력하기 위해 print()라는 함수를 사용했다. 파이선에서는 이렇게 만들어진 함수(내장함수)를 사용할 수도 있고, 직접 함수를 정의하여 사용하는 방법도 있다.
나. 함수의 형태
함수는 매개변수를 입력받은 후 그 매개변수를 가공 및 처리한 후에 반환값을 돌려준다. 커피자판기를 함수의 예로 든다면, 커피자판기에 넣는 동전과 버튼이 매개변수이며, 반환값으로 커피가 나오는 것이다.
다. 함수 정의하기
def 함수 이름(매개 변수 목록):
# 코드 블록
return 결과
# 기호는 주석을 의미한다. 프로그램에서 # 기호를 만나면 그 줄은 해석하지 않고 무시한다. 주석은 프로그램을 이해하는데 도움이 되는 내용을 적어두거나 프로그램을 보게 될 다른 사람에게 전달할 내용을 적어두기 위한 메모와 같은 기능으로 사용한다. 따라서 프로그램을 입력할 때 # 기호 이후의 내용은 입력하지 않아도 프로그램의 실행 결과에는 전혀 영향을 미치지 않는다.
def로 함수를 정의할 수 있다. 다음 함수 정의 예시는 아래와 같은 과정으로 실행된다. 다음은 함수 정의하기와 관련된 예제 코드이다.
## 함수 정의
def testhap(v1, v2) :
result=0
result=v1+v2
return result
## 변수 선언
a=0
## 메인 코드
a=testhap(10, 20)
print("10과 20의 testhap() 함수 결과는 %d" % a)
>6function1.py
10과 20의 testhap() 함수 결과는 30
1) 함수 호출: 11행의 testhap(10, 20)으로 함수를 호출하면 10과 20이라는 매개변수를 가지고 testhap() 함수를 호출한다.
2) 함수 실행: def로 정의한 testhap 함수는 매개변수 v1과 v2의 합을 result에 대입한 후, return result 문장에 의해 이 함수를 호출했던 11행으로 돌아간다.
3) 결과 반환: 함수를 실행하여 얻은 result 값(30)을 testhap() 함수를 호출했던 곳으로 반환한다.
4) hap에 반환값 대입: 반환된 값 30을 변수 a에 대입한다.
라. 코딩해 보기
1) 입력받은 두 수의 곱을 구하는 함수인 gop을 만드는 프로그램을 코딩해 보자.
def gop(v1, v2):
result=0
result=v1*v2
return result
a, a1, a2=0, 0, 0
a1=int(input("첫 번째 숫자:"))
a2=int(input("두 번째 숫자:"))
a=gop(a1, a2)
print("%d * %d = %d" % (a1, a2, a))
2) 입력받은 두 수중 큰 수를 구하는 함수인 kun을 만드는 함수를 코딩해 보자.
def kun(v1, v2) :
result=0
if v1>=v2:
result=v1
else:
result=v2
return result
a, a1, a2=0, 0, 0
a1=int(input("첫 번째 숫자:"))
a2=int(input("두 번째 숫자:"))
a=kun(a1, a2)
print("%d , %d 중 큰 수는 %d" % (a1, a2, a))
2내장 함수
우리는 print(), input() 등 이미 몇 가지 내장 함수를 사용해왔다. 파이선 내장 함수들은 별도의 설정 없이 바로 사용할 수 있다. 많이 사용하는 파이선 내장함수는 다음과 같다.
가. input
변수에 입력 인수로 입력을 하기 위한 함수
a=input()
print(a)
b=int(input("숫자를 입력하세요.: "))
print(b)
>6in_func1.py
안녕
안녕
숫자를 입력하세요.: 2
2
사용자의 입력을 받을 수 있는 함수이다. 프로그램을 실행하면 변수 a 값을 입력받기 위해 대기하는 상태가 된다. “안녕”이라는 텍스트를 입력하면 print(a) 함수에 의해 변수 a의 값인 “안녕”이 출력되며, 변수 b를 입력받기 위해 “숫자를 입력하세요:”와 함께 변수 b의 값을 입력받기 위해 대기하는 상태가 된다. 2를 입력해주면 변수 b에 대입된 2가 출력된다. 이때 int(input())을 사용하지 않고 input()으로 수를 입력받는 경우에는 숫자 2가 아닌 문자열 2로 인식하므로 주의해야 한다.
나. print
출력을 하기 위한 함수
print(10)
print("안녕")
>6in_func2.py
10
안녕
print() 함수를 이용해 수를 출력하면 수가 그대로 출력되며 텍스트를 출력하고 싶은 경우 “ ” 안에 출력하고 싶은 텍스트를 쓰면, 해당 텍스트가 그대로 출력된다.
다. int
정숫값을 표현해주는 변수로 소수점을 버린 값이 출력되며, int(a, radix)는 radix 진수로 표현된 값을 10진수로 변환하여 반환하는 함수
a=int('10')
b=int(10.5)
c=int(10)
d=int('11', 2)
print(a, b, c, d)
>6in_func3.py
10 10 10 3
1행에서 텍스트 10은 변수 a에 정수로 변환되어 대입된다. 2행에서는 실수 10.5가 정수로 변환되어 소수점을 버린 10이 변수 b에 대입되며, 3행에서는 변수 c에 정수 10이 대입된다. 4행에서는 2진수로 표현된 11이 10진수로 변환하여 변수 d에는 3이 대입된다.
라. len
입력값의 길이를 반환하는 함수
print(len("hello"))
print(len([1, 2, 3, 4, 5]))
print(len((1, 'a')))
>6in_func4.py
5
5
2
1행에서는 Hello 텍스트의 길이인 5가 출력되며, 2행에서는 5개 값으로 이루어진 리스트의 길이인 5가 출력된다. 3행에서는 1과 문자 ‘a’의 2개 값으로 이루어진 튜플의 길이인 2가 출력된다.
마. type
입력값의 자료형을 판별해주는 함수
print(type("hello"))
print(type([]))
>6in_func5.py
<class 'str'>
<class 'list'>
type() 함수는 입력값의 자료형을 판별해주는 함수로 1행에서는 hello라는 텍스트을 판별해서 <class ‘str’>이, 2행에서는 []의 리스트 값을 판단해서 <class ‘list’>라는 결과를 출력했다.
3module과 import
모듈(Module)은 함수의 집합으로 생각할 수 있다. test.py 프로그램에서 만든 test1() 함수와 test2() 함수를 a.py 프로그램과 b.py 프로그램에서 사용하고 싶다면 test1() 함수와 test2() 함수를 import 해서 사용할 수 있다. import는 외부에서 작성한 함수를 현재 코드에서 사용할 수 있게 해주는 예약어로 import 할 때는 .py는 붙이지 않는다.
test1() 함수 정의
test2() 함수 정의
test3() 함수 정의
import test
test1() 함수 호출
test2() 함수 호출
test3() 함수 호출
import test
test1() 함수 호출
test2() 함수 호출
test3() 함수 호출
test 모듈은 test1(), test2(), test3() 함수의 집합이다. a.py와 b.py프로그램에서 import test를 사용하면 test모듈을 사용할 수 있다. 이때 test1() 함수를 호출하려고 한다면 test.test1()와 같이 ‘모듈 이름.함수 이름()’의 형태로 사용하면 된다. 다음은 모듈을 생성하고 모듈의 함수를 import로 호출한 예제 코드이다.
def test1():
print("test1 함수 호출")
def test2():
print("test2 함수 호출")
def test3():
print("test3 함수 호출")
import test
test.test1()
test.test2()
test.test3()
>6module1.py
test1 함수 호출
test2 함수 호출
test3 함수 호출
test.py 파일과 8module1 파일은 같은 폴더에 저장한다. test.py는 모듈을 생성한 파일로 별도의 실행은 필요하지 않는다. 8module1 파일에서 생성한 모듈을 사용하기 위해 import 문으로 test 모듈을 불러온다. 앞서 학습한 대로 모듈명.함수명()을 사용해 모듈에 포함되어 있는 test1, test2, test3 함수를 불러오고 실행해보면 test 모듈에 있는 함수가 실행되는 것을 확인할 수 있다.