4 minute read


함수 (Function)

함수(Function)란?

function_Procdess
함수의 수학적 정의WIKI

  • 주어진 입력을 가지고 어떠한 “기능”을 수행하여 그 결과를 출력:

    “기능” or “모듈(Module)” or “메소드(Method)” functionmc_Procdess
    함수WIKI



  • 한번만 정의하여 구현한다면 동일한 기능을 코드의 중복없이 모든 곳에서 여러 번 호출하여 사용 가능.
  • 붕어빵 가게의 붕어빵 “틀” 과 같은 역할을 수행한다.



함수의 종류 및 구조

  • 사용자 정의 함수 (User-Defined-Function)
    • 프로그래머가 직접 정의 / 작성한 함수
      def 함수명(변수1, 변수2, ...): # 함수의 입력 값
          명령문
          return <표현식>    # 함수의 출력 값
      
  • 라이브러리 붙박이 함수 (Built-in Function)
    • Python에서 기본적으로 제공하는 함수 builtin_Procdess
      Built-in FunctionsPython



함수의 정의

  • “함수명” 은 변수 이름 만드는 규칙과 동일하다.
      def 함수명(변수명1, 변수명2, ... , 변수명n):  # 함수의 입력값
          <몸체>
          return <표현식>  # 함수의 결과값
    
  • 변수명1, 변수명2, … , 변수명 n 은 <몸체> 에서 사용하기 위한 함수의 입력 값에 대한 변수의 이름. == 형식 파라미터 (Formal Parameter)
  • 함수를 정의 할 때에는 몸체가 실행 되지 않는다.
  • return이 없어도 함수 정의 가능. (return이 없는 함수를 procedure 라고 한다.)



함수의 호출 (Call)

  • 정의된 함수를 “사용” 하는 것.
<함수이름> (<표현식1>, <표현식2>, <표현식3>, ... , <표현식n>)
  • 이미 정의 되어있는 함수만 호출 가능
  • 괄호 안에 들어가는 표현식은 실제 파라미터(Actual Parameter) 혹은 인수(Argument)라고 한다.
    • 인수(실제 파라미터)개수 = 형식 파라미터의 개수
  • 호출 시 세부 동작 순서
    1. 표현식 계산
    2. 결과 값을 각각 형식 파라미터 변수에 지정
    3. 함수의 <몸체>를 실행
    4. 최종 결과값 반환



(Additional) Type Hint

  • Python은 동적 자료형 언어
    • 변수의 자료형(Type)이 계속 바뀔 수 있다.
      >>> a = 1
      >>> type(a)
      <class 'int'>
      >>> a = 'dj'
      >>> type(a) # 기존 int 였던 변수 'a'의 자료형이 초기화 될 때마다 그에 맞는 자료형으로 변환된다.
      <class 'str'> 
      
    • 함수 선언 시, 대개 자료형을 적지 않으며 다양한 타입의 값을 함수 호출 시 할당 할 수 있다.
  • Python 3.5 부터 Type Hint 지원
    • 함수 파라미터, 반환값의 “자료형” 을 표시할 수 있다.
    • 개발자를 위한 단순 참고용 표시일 뿐, 오류 검사 등의 기능은 없다.
      def my_life(what: str) -> str:
          return what + ' life'
      



함수의 정의 / 호출 예: isOdd()

  • 주어진 입력 값이 홀수면 true, 짝수면 false를 반환
      def isOdd(num):     # 함수의 정의
          if num % 2 == 1: return True
          else: return False
            
      N = int(input('자연수 N 입력: '))
      for i in range(1, N+1):
          if isOdd(i): print(i, end='')   # 함수의 호출
    
  • 함수의 수행 과정
    1. 변수 i 에 대한 값 계산
    2. 해당 값을 isOdd()함수의 매개 변수인 num 변수의 값으로 할당
    3. 함수 계산 실행
    4. 입력 값에 따른 결과 반환
    5. 변환된 값에 따른 동작 수행
    6. 이전 과정의 반복



지역 변수 및 전역 변수

  • 지역 변수(local variable)
    • 함수 내에서 최초로 정의 / 사용된 변수
    • 함수 코드 블록 내에서만 사용 가능
  • 전역 변수(global variable)
    • 가장 바깥의 코드 블록(들여쓰기(indent)가 없는 곳)에서 최초로 정의 / 사용된 변수
    • global 키워드로 정의된 변수
    • 프로그램 전체에서 사용 가능

  • 지역 / 전역 변수 사용의 우선순위
    • 지역 / 전역 변수 이름이 동일한 경우
      • 함수 안에서는 지역 변수 우선 사용
      • 함수 밖에서는 전역 변수 사용 (지역 변수는 사용 불가)
    • 소스 코드
      def foo(a)
          a = 1
          print(a)
      a = 10
      print(a)
      foo(a)
      print(a)
          
      # 실행결과
      >>>
      10
      1
      10  # 여기서 foo() 함수는 함수 밖 a의 값을 변경하지 못했다.
      
    • “global” 키워드로 지역변수의 전역 변수 선언이 가능하다.
    • 소스코드
      def foo():
          global a
          a = 1
          print(a)
      a = 10
      print(a)
      foo(a)
      print(a)
        
      # 실행 결과
      >>>
      10
      1
      1
      



Boolean 자료형(추가)

  • Python 에서 Boolean 자료형은 정수 자료형의 부분형(subtype)
    • 변수에 True를 저장하면 실제로는 정수 1이 저장, False는 정수 0이 저장된다.
    • 반대로 정수 0도 False, 0이 아닌 정수는 True로 인식 가능.



실습 (1) 세 정수의 최대값 반환 함수

  • 구현 내용
    • 형식 매개 변수로 주어진 세 정수 x, y, z의 최대값을 반환하는 함수 max3(x, y, z)를 정의.
    • max3 함수의 호출을 사용하여, 표준 입력된 세 정수 a, b, c의 최대값을 구하는 프로그램 구현.
(1) 소스코드 및 실행 결과(클릭)

5_1_1_Procdess
소스 코드 및 실행 결과



실습 (2) 두 정수의 약수 여부 판별 함수

  • 구현 내용
    • 형식 매개 변수로 주어진 두 정수 n, m에 대해 n이 m의 약수인지의 여부를 판별한 결과를 반환하는 함수 isDivisor(n, m) 정의
    • isDivisor 함수의 호출을 사용하여, 표준 입력된 정수 a의 모든 약수를 출력하는 프로그램 구현
(2) 소스코드 및 실행 결과(클릭)

5_1_2_Procdess
소스 코드 및 실행 결과



실습 (3) 세 정수의 최대 공약수 구하기

  • 구현 내용
    • 형식 매개 변수로 주어진 두 정수 x, y에 대해 x와 y의 최대 공약수를 반환하는 함수 gcd2(x, y)정의.
    • gcd2 함수의 호출을 사용하여, 표준 입력된 세 정수 a, b, c의 최대 공약수를 출력하는 프로그램 구현.
(3) 소스코드 및 실행 결과(클릭)

5_1_3_Procdess
소스 코드 및 실행 결과



실습 (4) 세 정수의 최소공배수 구하기

  • 구현 내용
    • 5.1.3의 gcd2(x, y) 함수를 호출하여 두 정수의 최소공배수를 구하는 lcm2(x, y) 함수를 작성
    • lcm2 함수를 활용하여 표준 입력된 세 정수 a, b, c의 최소 공배수를 출력하는 프로그램 구현
(4) 소스코드 및 실행 결과(클릭)

5_1_4_Procdess
소스 코드 및 실행 결과

def gcd2(x, y):
    while y:
        x, y = y, x%y
        
    return x

def lcm2(x, y):
    return x*y//gcd2(x, y)
    

a = input('자연수 a 입력: ')
b = input('자연수 b 입력: ')
c = input('자연수 c 입력: ')

try:

    a = int(a)
    b = int(b)
    c = int(c)
    
    if a <= 0 or b <= 0 or c <= 0:
        print('잘못된 입력입니다')
    else:
        print('최소공배수 : ', lcm2(lcm2(a, b), c))
except:
    print('잘못된 입력입니다')



실습 (5) 완전수 판별

  • 구현 내용
    • 매개 변수로 주어진 m이 완전수인지 판별하는 함수 isPerfect(m)을 작성
    • isPerfect 함수 호출을 사용하여 표준 입력된 정수 a가 완전수인지 판별하는 프로그램 작성 (예외 처리 포함할 것)
(5) 소스코드 및 실행 결과(클릭)

5_2_1_Procdess
소스 코드 및 실행 결과



실습 (6) 모든 완전수 출력

  • 구현 내용
    • isPerfect 함수 호출을 사용하여 표준 입력된 2보다 큰 자연수 N보다 작거나 같은 모든 완전수 출력 (예외 처리 포함할 것)
(6) 소스코드 및 실행 결과(클릭)

5_2_2_Procdess
소스 코드 및 실행 결과





최대한의 설명을 코드 블럭 내의 주석으로 달아 놓았습니다.

혹시 이해가 안가거나 추가적인 설명이 필요한 부분, 오류 등의 피드백은 언제든지 환영합니다!

긴 글 읽어주셔서 감사합니다. 포스팅을 마칩니다.



처음으로~

Task Lists

  • 함수 (Function)
  • 함수의 종류 및 구조
  • 함수의 정의
  • 함수의 호출 (Call)
  • (Additional) Type Hint
  • 함수의 정의 / 호출 예: isOdd()
  • 지역 변수 및 전역 변수
  • Boolean 자료형(추가)
  • 실습 (1) 세 정수의 최대값 반환 함수
  • 실습 (2) 두 정수의 약수 여부 판별 함수
  • 실습 (3) 세 정수의 최대 공약수 구하기
  • 실습 (4) 세 정수의 최소공배수 구하기
  • 실습 (5) 완전수 판별
  • 실습 (6) 모든 완전수 출력

Comments