WeniVooks

검색

견고한 파이썬

함수와 인사하기

1. 함수란?

함수는 모든 프로그래밍의 기본 구성 요소 중 하나입니다. 함수는 특정 작업을 수행하는 코드 블록을 하나의 이름 아래로 모은 것입니다. 이를 통해 함수명을 "호출"하여 코드 블록을 실행할 수 있습니다.

def test(x, y): # 함수의 정의 print(x + y) print(x - y) print(x / y) print(x * y) test(10, 20) # 함수의 호출(함수를 사용) test(3, 10) # 함수의 호출(함수를 사용)

아래 그림처럼, 수학 시간에 배운 함수 개념과 유사합니다. 주어진 입력에 대해 특정 출력을 생성하는 것이죠.

함수를 사용하면 복잡한 코드를 단순화시키고, 반복되는 코드를 줄일 수 있습니다. 위 코드에 사칙 연산을 한 번 더 하고 싶다면 단지 test라는 함수를 한 번 더 호출하기만 하면 됩니다. 이로 인해 전체적인 코드가 더 깔끔해지고 관리하기 쉬워집니다. 또한, 이러한 접근법은 코딩 오류를 줄이고 프로그램의 효율성을 향상시킬 수 있습니다.

2. 함수를 사용하는 방법

2.1 함수의 정의

함수를 만들때는 def 키워드를 사용하는 것으로 약속을 합니다. 그리고 함수의 이름을 적고, 괄호를 적고, 콜론(:) 을 붙입니다. 이 키워드를 사용함으로써 파이썬에게 새로운 함수 my_function이 정의 되었다고 알려줍니다.

def my_function():
def my_function():
2.2 들여쓰기

파이썬에서는 들여쓰기가 매우 중요합니다. 들여쓰기는 코드 블록을 정의하는 방법으로 사용되며, 이를 통해 파이썬은 해당 코드 블록이 어디서 시작하고 어디서 끝나는지를 인식합니다.

함수 내부에서 사용되는 코드는 모두 동일한 수준의 들여쓰기를 가지고 있어야 합니다. 보통은 한 수준의 들여쓰기를 4개의 공백으로 정의합니다. 이렇게 들여쓰기를 통해 함수의 '본문'이라는 구역을 명확히 할 수 있습니다.

함수는 들여쓰기 된 곳까지만 함수의 범위로 간주합니다. 다음은 들여쓰기의 중요성에 대해서 살펴보는 예제입니다.

# 들여쓰기 - 스페이스바 4번 입력 (띄어쓰기) def my_function(): # 함수의 정의 print('1') print('2') print('3') my_function() # 함수의 호출

출력된 결과는 my_function()에 들여쓰기된 3개의 Print문이 실행된 것을 볼 수 있습니다. 그러면 마지막에 있던 print('3')을 들여쓰지 않고 내어써 보도록 하겠습니다.

def my_function(): print('1') print('2') print('3') my_function()

다음과 같이 순서에 의해 my_function()이 먼저 선언되었다고 하더라도 호출이 먼저 되지 않았고, 그렇기 때문에 print('3')이 먼저 실행된 후에 my_function의 결과가 출력된 것을 확인할 수 있습니다.

3. 함수를 사용하는 이유

위 예제는 함수를 선언하지 않고도 충분히 더 쉽고 직관적으로 코드를 구현할 수 있습니다.

def my_function():
    print('1')
    print('2')
    print('3')
 
my_function()
def my_function():
    print('1')
    print('2')
    print('3')
 
my_function()

이 코드는 아래와 같이 작성해도 동일한 작동을 합니다.

print('1')
print('2')
print('3')
print('1')
print('2')
print('3')

다만 만약 이 코드가 100번 반복이 되어야 한다면 아래와 같은 코드가 될 것입니다.

print('1')
print('2')
print('3')
print('1')
print('2')
print('3')
# ...
print('1')
print('2')
print('3')
print('1')
print('2')
print('3')
print('1')
print('2')
print('3')
# ...
print('1')
print('2')
print('3')

함수를 사용하지 않으면 코드의 가독성이 떨어지고 유지 보수를 할 때에도 어디를 어떻게 유지 보수해야 할지 짐작할 수 없게 됩니다.

또한 아래와 같은 코드를 확인해보도록 하겠습니다.

def 부지매입():
    pass
 
def 설계도면작성():
    pass
 
def 인력모집():
    pass
 
def 벽돌쌓기():
    pass
 
def 지붕올리기():
    pass
 
부지매입()
설계도면작성()
인력모집()
벽돌쌓기()
벽돌쌓기()
지붕올리기()
def 부지매입():
    pass
 
def 설계도면작성():
    pass
 
def 인력모집():
    pass
 
def 벽돌쌓기():
    pass
 
def 지붕올리기():
    pass
 
부지매입()
설계도면작성()
인력모집()
벽돌쌓기()
벽돌쌓기()
지붕올리기()

이 코드는 벽돌쌓기 함수가 2번 실행되었습니다. 이처럼 코드의 양이 많더라도 코드를 재사용하는 것은 한 줄이면 되며, 실수를 줄일 수도 있습니다. 또한 코드의 구조를 한 눈에 파악할 수도 있습니다.

4. 나아가기

4.1 함수의 이름 짓기

함수의 이름은 해당 함수가 무엇을 하는지 명확하게 알 수 있도록 짓는 것이 중요합니다. 함수의 이름을 보고 어떤 기능을 하는지 알 수 있도록 짓는 것이 좋습니다. 함수의 이름을 지을 때에는 동사로 시작하는 것이 좋습니다. 예를 들어, print_hello()와 같이요.

또한 함수는 함수의 이름에 해당되는 기능 하나만 수행하도록 작성하는 것이 좋습니다. 함수가 한 가지 이상의 기능을 수행하게 되면 함수의 이름이 모호해지고, 함수의 이름이 무엇을 의미하는지 알기 어려워집니다.

4.2 함수의 들여쓰기

이처럼 파이썬은 들여쓰기(indent)로 함수의 범위를 정합니다. 한 가지 주의할 것은 파이썬 공식 스타일 가이드인 PEP-8에서 들여쓰기를 스페이스 4개를 사용하는 것을 권장하고 있습니다.

대부분의 에디터에서는 탭(Tab)을 사용하면 스페이스 4번으로 변환을 해줍니다. colab도 마찬가지입니다. 다만 탭과 스페이스 4개는 다른 문자입니다. 특정 에디터에서는 탭을 스페이스 4번으로 자동 변환해주지 않을 수도 있으며, 이러한 경우에 탭을 쓴 코드와 스페이스 4번을 사용한 코드가 합쳐질 경우 에러가 나게 됩니다.

4.3 추상화 개념

추상화는 복잡한 문제를 해결하기 위해 필요한 기능을 단순화하여 사용자가 쉽게 사용할 수 있도록 하는 것입니다. 함수를 사용하면 프로그램을 단위로 나누어 관리할 수 있습니다. 이렇게 하면 프로그램을 관리하고 유지보수하기가 쉬워집니다.

다만 추상화를 높이면 코드의 구조 파악 가독성이 떨어지고, 코드의 유지보수가 어려워질 수 있습니다. 따라서 적절한 수준의 추상화를 유지하는 것이 중요합니다. 추상화를 낮추면 코드의 구조 파악 가독성이 높아지고 유지보수가 쉬워지지만, 코드의 양이 많아지고, 코드의 중복이 발생할 수 있습니다.

{"packages":["numpy","pandas","matplotlib","lxml"]}
7장 함수7.2 간단한 함수 만들어보기