[Python] 함수(function)

2022. 6. 25. 03:17·Language/Python
728x90

함수(function)

다음 그림과 같은 계산기는 계산하려는 숫자를 입력하면 내부에서 특정 연산을 수행하고 그 결과를 화면에 출력해 준다.

이와 비슷한 원리로 특정 값 X를 인수(arguments)로 전달받으면, 반드시 특정 값 Y를 결과로 반환(return)하는 일종의 계산기와 같은 개념을 함수(function)라고 할 수 있다.

프로그래밍에서는 하나의 특정 작업을 수행하기 위해 독립적으로 설계된 프로그램 코드의 집합을 함수(function)라고 부른다.

※ 인수(arguments)란 함수를 호출할 때 함수 내부에서 사용할 수 있도록 전달하는 데이터를 가리킨다.

함수를 사용하는 이유

print(), type(), range() 등과 같은 함수들은 모두 파이썬 내장 함수로 파이썬에서 미리 만들어 제공해 주는 함수들이다.

 

만약 이러한 함수가 없었다면 우리는 프로그램을 작성하기 전에 먼저 화면에 출력하거나 타입을 확인하는 등과 같은 기본적인 동작을 하는 코드를 매번 따로 작성해야 할 것이다. 또한, 어떤 동작에 수정 사항이 생긴다면, 그 동작을 사용한 모든 소스 코드를 전부 찾아서 수정해야만 할 것이다.

이처럼 함수를 사용하는 가장 큰 이유는 프로그램 내에서 중복적인 코드의 작성을 최소화하고, 코드의 재사용성을 높여주기 때문이다.

프로그램에서 특정 작업을 여러 번 반복해서 수행해야 할 때는 해당 작업을 수행하는 함수를 한 번만 작성하면 된다. 이후 프로그램 내에서 해당 작업을 수행해야 할 때는 작성해 놓은 함수를 단순히 호출하기만 하면 되기 때문이다.


함수 선언하고 호출하기

파이썬에서는 파이썬이 제공하는 내장 함수를 그대로 사용하는 것뿐만 아니라 자신만의 함수를 직접 만들어서 사용할 수도 있다.

 

파이썬에서 함수는 다음과 같이 선언한다.

문법
def 함수명(매개변수1, ...):
    실행할 코드1
    실행할 코드2
             ⦙

함수명은 함수를 호출할 때 사용하기 위한 이름이며, 매개변수(parameter)는 함수 호출 시 전달되는 인수의 값을 함수 내부에서 사용할 수 있도록 저장할 변수의 이름이다.

 

이렇게 선언된 함수는 다음과 같은 방식으로 호출할 수 있다.

문법
함수명(인수, ...)

인수(arguments)는 함수를 호출할 때 함수 내부에서 사용할 데이터를 전달해 주는 역할을 한다.

 

다음 예제는 hello라는 이름의 함수를 선언하고 호출하는 예제다.

def hello(): # 함수의 선언
    print("- 함수 시작 -")
    print("안녕하세요!")
    print("- 함수 끝 -")
    
    
hello() # 함수의 호출
hello() # 함수의 호출
hello() # 함수의 호출
실행 결과
- 함수 시작 -
안녕하세요!
- 함수 끝 -
- 함수 시작 -
안녕하세요!
- 함수 끝 -
- 함수 시작 -
안녕하세요!
- 함수 끝 -

위 예제의 hello() 함수는 아무런 인수를 가지지 않고 어떠한 값도 반환하지 않으며, 단순히 함수 내부의 코드만을 실행하는 가장 단순한 형태의 함수다.

hello() 함수처럼 인수를 전달받지 않는 함수는 언제나 같은 동작만을 수행하게 된다. 하지만 대부분의 함수는 인수를 전달받아 해당 인수에 따라 다른 동작을 수행하도록 하는 것이 일반적이다.

 

함수 호출 시 여러 개의 인수(arguments)를 한 번에 전달할 수 있으며, 인수들은 소괄호(())안에 쉼표(,)를 사용하여 구분한다.

 

다음 예제는 두 개의 인수를 전달받아 그 합을 출력하는 함수다.

def sum(a, b):
    print(a + b)


sum(1, 2)
sum(3, 4)
# sum(5)
# sum(6, 7, 8)
실행 결과
3
7

위의 예제에서 함수 선언에 사용된 a와 b를 매개변수라 하고, 함수 호출 시 전달된 1, 2와 3, 4를 인수라고 부른다.

위 예제의 5번과 6번 라인처럼 함수를 호출할 때 다른 값의 인수를 전달하면, 그 결과 또한 달라지는 것을 확인할 수 있다.

또한, 인수를 전달할 때는 반드시 함수의 선언에서 명시된 매개변수의 개수와 같은 수의 인수만을 전달해야 한다.

만약 주석 처리된 7번과 8번 라인처럼 매개변수의 개수와 다른 수의 인수를 전달하면 TypeError가 발생하며, 프로그램은 강제 종료된다.


값을 반환(return)하는 함수

파이썬에서는 전달받은 인수를 가지고 함수 내부에서 여러 명령문을 실행한 결과를 return 문을 사용하여 반환할 수 있다.

이러한 반환(return)문은 함수의 종료를 의미하며, 함수를 호출한 곳으로 해당 결괏값을 반환해 준다.

문법
def 함수명(매개변수1, ...):
    실행할 코드1
    실행할 코드2
             ⦙
    return 결괏값

return 문을 사용하여 함수에서 반환된 값은 다음과 같이 곧바로 변수에 대입하여 사용할 수 있다.

문법
변수명 = 함수명(인수, ...)
def sum(a, b):
    print("- 함수 시작 -")
    # return a + b
    print("- 함수 끝 -")
    return a + b


c = sum(1, 2)
print(c)

print(sum(3, 4))
실행 결과
- 함수 시작 -
- 함수 끝 -
3
- 함수 시작 -
- 함수 끝 -
7

위 예제의 8번 라인처럼 반환값을 변수에 대입하여 사용할 수 있으며, 11번 라인처럼 그대로 사용할 수도 있다.

하지만 11번 라인처럼 사용하면 함수의 결괏값을 단 한 번만 사용할 수 있으며, 이후에는 해당 결괏값에 접근할 수 없다.

 

그리고 3번과 5번 라인의 return 문의 주석 처리를 서로 바꾸면, 4번 라인의 print() 문이 실행되지 않고 함수가 종료되는 것을 확인할 수 있다.

이처럼 함수 내부에서 return 문을 만나게 되면 함수의 나머지 부분은 더 이상 실행되지 않고 곧바로 종료된다.

'Language > Python' 카테고리의 다른 글

[Python] 변수의 유효 범위(variable scope)  (0) 2022.06.25
[Python] 함수(function), 매개변수  (0) 2022.06.25
[Python] 딕셔너리(dictionary) 타입  (0) 2022.06.25
[Python] 세트(set) 타입  (0) 2022.06.25
[Python] 튜플(tuple)타입  (0) 2022.06.25
'Language/Python' 카테고리의 다른 글
  • [Python] 변수의 유효 범위(variable scope)
  • [Python] 함수(function), 매개변수
  • [Python] 딕셔너리(dictionary) 타입
  • [Python] 세트(set) 타입
arajo
arajo
  • arajo
    아라 메모장
    arajo
  • 전체
    오늘
    어제
    • 분류 전체보기 (509)
      • Language (298)
        • HTML (55)
        • CSS (11)
        • JavaScript (70)
        • TypeScript (8)
        • Python (33)
        • Java (119)
        • C (0)
        • C# (2)
      • Programming (92)
        • Programming (14)
        • Web (51)
        • Apache (1)
        • MySQL (23)
        • AWS (3)
      • Framework | Library (26)
        • Framework | Library (3)
        • Vue.js (2)
        • React.js (5)
        • React Native (4)
        • Node.js (1)
        • Ajax (1)
        • Bootstrap (8)
        • Spring (1)
        • Flutter (1)
      • etc (2)
      • 휴식 (19)
        • 책 (13)
        • 일기 (5)
        • 게임 일기 (1)
      • A (71)
        • 공부 (18)
        • 기타 (6)
        • 일 (47)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    next.js
    타입스크립트
    array
    MySQL
    Java
    Python
    변수
    리액트
    CSS
    파이썬
    객체
    HTML
    자바스크립트
    web
    event
    JavaScript
    react
    object
    제어문
    TypeScript
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
arajo
[Python] 함수(function)
상단으로

티스토리툴바