한 대의 자동차를 만들기 위해서는 수백 개의 협력업체에서 부품을 공급해야 합니다. 이들 부품을 자동차 공장에서 조립하면 자동차가 생산됩니다.
이와 같은 원리를 프로그램에 대해서도 적용할 수 있습니다. 지금까지는 간단한 프로그램이었기 때문에 하나의 함수로도 충분하였습니다.
하지만 윈도우나 한글과 같은 커다란 프로그램은 모든 코드가 하나의 함수 안에 들어 있다고 가정해봅시다. 흔히 대형 프로그램의 코드는 수만 라인이 넘습니다.
이것이 하나의 함수 안에 들어 있다면 코드를 작성한 사람도 시간이 지나면 이해하거나 디버깅하기 어려울 것입니다.

그렇다면 어떻게 해야 할까요? 정답은 작은 조각으로 분리하는 것입니다. 파이썬에서는 작은 조각이 함수에 해당합니다.
복잡하고 규모가 큰 프로그램은 여러 개의 함수로 나누어서 작성되어야 합니다. 먼저 주어진 문제를 분석한 후에, 보다 단순하고 이해하기 쉬운 문제들로 나누게 됩니다.
문제가 충분히 작게 나누어지면 각 문제를 해결하는 절차를 함수로 작성합니다.
문제를 한 번에 해결하려고 하지 말고 더 작은 크기의 문제들로 분해합니다. 문제가 충분히 작아질 때까지 계속해서 분해합니다.
문제가 충분히 작아졌으면 각각의 문제를 함수로 작성합니다. 이들 함수들을 조립하면 최종 프로그램이 완성됩니다.
간단한 예로, 데이터를 수집하여 데이터를 처리하고 결과를 보여주는 프로그램은 아래와 같은 함수들로 구성될 것입니다.

파이썬 프로그램에서도 main() 함수를 작성하고 스크립트의 맨 아래에서 main()을 호출하도록 하는 것이 바람직하다고 생각하는 개발자들도 많습니다.
구체적인 예로 성적을 사용자로부터 읽어서 크기순으로 정렬하여 화면에 출력하는 프로그램을 작성한다고 생각해봅시다. 사용자가 음수를 입력하면 입력을 종료합니다.
def readList():
nlist = []
flag = True
while flag:
number = int(input("숫자를 입력하시오 : "))
if number < 0:
flag = False
else:
nlist.append(number)
return nlist
def processList(nlist):
nlist.sort()
return nlist
def printList(nlist):
for i in nlist:
print("성적 =", i)
def main():
nlist = readList()
processList(nlist)
printList(nlist)
if __name__ == "__main__": # 이 모듈이 단독으로 실행된다면, main()을 호출합니다.
main()
<실행 결과>
숫자를 입력하시오 : 30
숫자를 입력하시오 : 50
숫자를 입력하시오 : 10
숫자를 입력하시오 : 90
숫자를 입력하시오 : 60
숫자를 입력하시오 : -1
성적 = 10
성적 = 30
성적 = 50
성적 = 60
성적 = 90
각 함수들은 특징적인 한 가지 작업(기능)만을 맡아야 합니다. 하나의 함수가 여러 가지 작업을 하면 안 됩니다.
다른 것과 구별되는 한 가지의 작업만을 하여야 합니다. 만약 함수 안에서 여러 작업들이 섞여 있다면 각각을 다른 함수들로 분리하여야 합니다.
이런 식으로 함수를 사용하게 되면 문자들을 작업별로 분류할 수 있어 소스 코드의 가독성이 높아집니다.
또한 함수 이름만 보아도 어떤 작업인지를 대략 알 수 가 있어 소스 코드를 다른 사람이 읽기가 쉬워집니다.