closure

  • 함수 내부에 상태 정보를 가지고 있다.

  • 상태 정보 = 관련 있는 데이터(함수가 처리하려는 데이터)

  • class를 사용할 수 없을 때 쓴다.

    • 계좌 만들기 예제

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      def account(clnt_name, balance):  # 상태 정보 - free variable
      def change_money(money):
      nonlocal balance
      balance += money
      return (clnt_name, balance)
      return change_money


      # global variable - 맨 바깥쪽
      # local variable - 함수 내
      # free variable - 상태 정보


      my_acnt = account('greg', 5000)
      your_acnt = account('john', 3000)


      type(my_acnt)
      >> function


      my_acnt.__name__ == your_acnt.__name__
      >> True


      my_acnt.__name__
      >> 'change_money'


      # input 값 + 상태 정보 = output이 나온다.
      my_acnt(1000)
      >> ('greg', 6000)


      your_acnt(1000)
      >> ('john', 4000)


      # cell_contents : 담겨 있는 상태 정보를 불러옴
      cells = my_acnt.__closure__
      for cell in cells:
      print(cell.cell_contents, end = ' ')
      >> 6000 greg
Share