function

  • routine, subroutine, proceduce, function
  1. 함수 정의

    • 전역 변수(global variable) : global frame에 쌓인다.
    • 지역 변수(local variable) : 함수가 호출되고 stack frame이 생길때 생기고 함수가 끝나면 사라진다.
    • 함수 선언 시, 들여쓰기 공백은 4칸으로 4의 배수로만 띄워주면 문제없다.
      1
      2
      3
      4
      5
      a = 10 # 전역 변수
      b = 20 # 전역 변수
      def func(c,d):
      e = c + d # 지역 변수
      return e
  2. 함수 호출

    • 함수가 호출되는 시점이 바로 stack frame이 생성되는 시점이다.
      1
      2
      func(a, b)
      >> 30
  3. namespace

    • 변수의 유효 범위를 namespace 기반으로 결정

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      # 전역 변수 g_val은 global frame에 생성
      # stack frame이 생성되는 시점은 func(g_val)이 실행될 때
      # def func(val) 부분이 생성 시점이 아님
      # 함수가 호출됨으로 인해 매개변수 val은 120을 가리킴
      # 하지만 전역 변수 g_val은 20으로 변하지 않음
      g_val = 20
      def func(val):
      val += 100

      func(g_val)
      g_val
      >> 20
    • global문을 사용하여 func() 내에서 전역 변수 수정 가능

      1
      2
      3
      4
      5
      6
      7
      def func():
      global g_val
      g_val += 30

      func()
      g_val
      >> 50
    • namespace 개념을 통해 ‘이름 공간’에서 가장 가까운 변수에 접근

    • nonlocal문을 사용하면 함수에서 가장 가까운 해당 변수에 접근할 수 있다.
    • nonlocal문으로 지정해주지 않아도 가장 가까운 해당 변수에 접근한다.
    • 가장 가까운 변수에 접근하게 되면 그 이상의 공간 변수로 접근하지 않는다.
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      # 변수 b와 같은 경우, 전역 변수와 지역 변수 모두 아니다.
      a = 10
      def outer():
      b = 100
      def inner1():
      b = 30
      def inner2():
      nonlocal b
      b -= 10
      print(b)
      d = 40
      inner2()
      inner1()
      print(b)
      outer()

      >> 20
      100
Share