ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [코딩도장] day21. 파이썬 함수 사용하기
    IT/파이썬 2020. 9. 12. 15:03

    ■ 들어가기

    - 파이썬 코딩 도장 (남재윤/길벗). 을 공부하며 정리하는 블로그


    ▶ Unit29. 함수 사용하기

         - 29.1 Hello, world! 출력 함수 만들기

         - 29.2 덧셈 함수 만들기

         - 29.3 함수의 결과를 반환하기

         - 29.4 함수에서 값을 여러 개 반환하기

         - 29.5 함수의 호출 과정 알아보기

     

    >> 29.1 Hello, world! 출력 함수 만들기 <<

    - 다른 개발 언어들과 마찬가지로 파이썬에서도 함수(function) 사용 가능

     

    1. Hello, world! 출력 함수 만들기

    - 함수는 def에 함수 이름을 지정하고 ()(괄호)와 :(콜론)을 붙인 뒤 다음 줄에 원하는 코드를 작성 (def: define, 정의하다)

    - 사용법

    def 함수이름() :

        코드

     

    2. 함수 만들기

    >>> def hello() :
    print('Hello, world!')

     

    3. 함수 호출하기

    - 함수 이름과 ()를 적어주면 사용 가능

    - 사용법: 함수()

    >>> hello()
    Hello, world!
    >>> 

     

    4. 소스 파일에서 함수 만들고 호출하기

    소스 (function.py) 결과
    def hello() :
        print('Hello, world!')

    hello()
    Hello, world!

     

    5. 함수의 실행 순서

    1. 파이썬 스크립트 최초 실행

    2. hello 함수 호출

    3. hello 함수 실행

    4. print 함수 실행 및 'Hello, world!' 출력

    5. hello 함수 종료

    6. 파이썬 스크립트 종료

    출처 : 파이썬 코딩 도장 (dojang.io)

     

     

    6. 함수 작성과 함수 호출 순서

    - 함수를 만들기 전에 함수를 먼저 호출하면 안됨!

    - 함수가 정의(define)되지 않아 에러 발생!

    소스 (test.py) 결과
    hello()

    def hello() :
        print('Hello, world!')
    Traceback (most recent call last):
      File "C:/project/test.py", line 1, in <module>
        hello()
    NameError: name 'hello' is not defined

    >> 29.2 덧셈 함수 만들기 <<

    - 함수에 값을 넘겨 받아 동적으로 처리

    - 함수에서 값을 받기 위해서는 ()(괄호) 안에 변수 이름을 지정 => 매개변수(parameter)

      함수를 호출할 때 넣는 값인수(argument)라고 부름

    - 사용법

    def 함수이름(매개변수1, 매개변수2, ..) :

        코드

    >>> def add(a, b) :
    print(a + b)


    >>> add(10, 20)
    30

    [참고] 함수 독스트링(docstrings) 사용하기

    - 함수의 :(콜론) 바로 다음 줄에 """ """ (큰따옴표 세 개)로 문자열을 입력하면 함수에 대한 설명을 넣을 수 있음

    - 작음따옴표, 큰따옴표, 작은따옴표 세 개로 작성 가능하지만 파이썬 코딩 스타일 가이드(PEP8)에서는 큰따옴표 세 개 권장

    소스 (function_documentation_strings.py) 결과
    def add(a, b) :
        """이 함수는 a와 b를 더한 뒤 결과를 반환하는 함수"""
        return a + b

    x = add(10, 20)
    print(x)

    print(add.__doc__)  # 독스트링 출력하기 위해 __doc__ 로 출력
    30
    이 함수는 a와 b를 더한 뒤 결과를 반환하는 함수

    >> 29.3 함수의 결과를 반환하기 <<

    - 함수 마지막에 return을 사용하면 값을 함수 바깥으로 반환가능

    - return만 사용 시 None을 반환 (if 조건문과 조합해서 특정 조건 시 함수 중간에서 빠져나기기 위해 사용)

    - return으로 반환하는 값을 반환값이라고 하며 함수를 호출한 바깥에 결과를 알려주기 위해 사용

     

    >> 29.4 함수에서 값을 여러 개 반환하기 <<

    - 함수에서 값을 여러 개 반환할 때는 return에 값이나 변수를 ,(콤마)로 구분해서 지정!

    - 사용법

    def 함수이름(매개변수) :

        return 반환값1, 반환값2

    >>> def add_sub(a, b) :   # 덧셈과 뺄셈 값을 반환하는 함수
    return a + b, a - b

    >>> x, y = add_sub(10, 20)
    >>> x
    30
    >>> y
    -10

    - return으로 값을 여러 개 반환 시 실제로는 튜플이 반환됨

    - 튜플이 변수 여러 개에 할당되는 특성 이용 (언패킹)

    - return에 값 여러 개를 콤마로 구분해서 지정하거나 튜플, 리스트로 직접 반환 가능!

    >>> z = add_sub(10, 20)
    >>> z
    (30, -10)
    >>> 1, 2   # 실제 파이썬에서는 괄호없이 콤마로 값을 구분하면 튜플로 처리됨
    (1, 2)

    >> 29.5 함수의 호출 과정 알아보기 <<

    소스 (function_call.py) 결과
    def mul(a, b) :
        c = a * b
        return c

    def add(a, b) :
        c = a + b
        print(c)
        d = mul(a, b)
        print(d)

    x = 10
    y = 20
    add(x, y)
    30
    200

    출처 : 파이썬 코딩 도장 (dojang.io)

    - 줄1 ~ 줄12까지 실행하면 전역 프레임(global frame)에 함수 mul, add / 변수 x, y가 들어감

    - 프레임?? : 메모리에서 함수와 함수에 속한 변수가 저장되는 독립적인 공간

      ( C언어에서 stack과 유사....? // stack메모리 더 알아보기 )

    - 전역 프레임?? : 파이썬 스크립트 전체에서 접근가능한 영역

     

    출처 : 파이썬 코딩 도장 (dojang.io)

    - 함수 add 호출 후 줄7까지 실행한 상태

    - 함수 add의 스택 프레임이 생성되며, 매개변수 a와 b, c가 들어감

     

    출처 : 파이썬 코딩 도장 (dojang.io)

    - 줄8의 함수 mul을 호출한 뒤, 줄3 return까지 실행하면 함수 mul의 스택 프레임이 생성되며, 매개변수 a, b, c가 들어감

     

    출처 : 파이썬 코딩 도장 (dojang.io)

    - 줄9 print(d)까지 실행하면 함수 mul을 끝내고 함수 add로 돌아감

    - 함수 mul에서 반환한 반환값 200이 변수 d에 저장되며 add의 스택 프레임에 들어감

    - 함수 mul은 끝났기 때문에 스택 프레임도 사라짐

     

    출처 : 파이썬 코딩 도장 (dojang.io)

    - 줄13 add(x, y)까지 실행해서 함수 add를 끝내고 add의 스택 프레임도 사라짐

     

    ※ 전역 프레임은 스크립트 파일의 실행이 끝나면 사라짐

     

     

     

    ● 요약

    1. C언어하면서 메모리 부분이 가장 어려웠는데 파이썬에서도 나오는구나

    2. 역시 기초를 탄탄하게 배웁시다.

    댓글

Designed by Tistory.