Unit 24. 함수 사용하기
프로그래밍을 하다 보면 들어가는 값만 바뀔 뿐 같은 코드가 계속 반복되는 경우가 많습니다. 특히 같은 코드를 반복해서 작성하면 코드도 길어지고 중간에 실수할 가능성이 커집니다.
파이썬은 함수(function)라는 기능을 제공하는데 특정 용도의 코드를 한 곳에 모아 놓은 것을 뜻합니다. 그래서 처음 한 번만 작성해 놓으면 나중에 필요할 때 계속 불러 쓸 수 있습니다. 예를 들어 지금까지 사용했던 print, input 등도 모두 파이썬에서 미리 만들어 둔 함수입니다.
함수는 다양한 사용 방법이 있으므로 이제부터 각 유닛에서 함수의 사용법을 자세히 알아보겠습니다.
24.1 Hello, world! 출력 함수 만들기
함수는 def에 함수 이름을 지정하고 ( )(괄호)와 :(콜론)을 붙인 뒤 다음 줄에 원하는 코드를 작성하면 됩니다(함수의 이름을 짓는 방법은 변수와 같습니다). 이때 코드는 반드시 들여쓰기를 해야 합니다(들여쓰기 규칙은 if, for, while과 같습니다).
def 함수이름(): 코드 #↑ 들여쓰기 4칸
여기서 def는 정의하다(define)에서 따온 키워드입니다.
그럼 'Hello, world!'를 출력하는 함수를 만들어보겠습니다.
>>> def hello(): ... print('Hello, world!') # ← 들여쓰기 4칸 ... # ← 빈 줄에서 엔터 키를 누름
함수 이름은 hello로 지정하고, 그다음 줄에서 print로 'Hello, world!' 문자열을 출력하도록 만들었습니다.
함수를 만들었으니 사용을 해봐야겠죠? 함수를 만든 부분 아래에서 hello()와 같이 함수 이름과 ()를 적어주면 함수를 사용할 수 있습니다.
- 함수()
>>> hello() Hello, world!
이렇게 함수를 사용하는 방법을 "함수를 호출(call)한다"라고 부릅니다.
이번에는 소스 파일에서 함수를 만들고 호출해보겠습니다. 다음 내용을 IDLE의 소스 코드 편집 창에 입력한 뒤 실행해보세요.
function.py
def hello(): print('Hello, world!') hello()
Hello, world!
-
SyntaxError: invalid syntax: 함수의 형식이 맞지 않아서 발생하는 에러입니다. ( )(괄호)의 짝이 맞는지, :(콜론)을 빠뜨리지 않았는지 확인해주세요.
-
함수 호출이 되지 않음: 함수를 호출할 때 ( )(괄호)를 빠뜨리지 않았는지 확인해주세요. 그냥 hello처럼 괄호를 붙이지 않으면 함수가 호출되지 않습니다.
hello 함수가 만들어진 뒤 호출되어서 'Hello,
world!' 문자열이 출력됩니다.
이제 파이썬 함수의 실행 순서를 알아보겠습니다. hello 함수는 다음과 같은 순서로 실행됩니다.
- 파이썬 스크립트 최초 실행
- hello 함수 호출
- hello 함수 실행
- print 함수 실행 및 'Hello, world!' 출력
- hello 함수 종료
- 파이썬 스크립트 종료
단, 함수를 만들기 전에 함수를 먼저 호출하면 안됩니다. 다음과 같이 함수를 먼저 호출한 뒤 함수를 만들 수는 없습니다.
hello() # hello 함수를 만들기 전에 함수를 먼저 호출 def hello(): # hello 함수를 만듦 print('Hello, world!')
실행 결과
Traceback (most recent call last): File "C:₩project₩function.py", line 1, in <module> hello() # hello 함수를 만들기 전에 함수를 먼저 호출 NameError: name 'hello' is not defined
함수를 먼저 호출하면 함수가 정의(define)되지 않았다는 에러가 발생합니다. 왜냐하면 파이썬 코드는 위에서 아래로 순차적으로 실행되기 때문입니다. 반드시 함수를 먼저 만든 뒤에 함수를 호출해야 합니다.
내용이 없는 빈 함수를 만들 때는 코드 부분에 pass를 넣어줍니다.
def hello(): pass
나중에 다른 사람이 만든 파이썬 소스 코드를 보다 보면 pass를 자주 접할 수 있습니다. pass는 아무 일을 하지 않아도 함수의 틀을 유지할 필요가 있을 때 사용합니다.