Python 의 LEGB 와 패키지 및 장식 기 를 자세히 설명 합 니 다.

4086 단어 Python장식 기
Python 의 LEGB 와 패키지 및 장식 기 를 자세히 설명 합 니 다.
LEGB L>E>G?B
  • L:local 함수 내부 역할 영역
  • E:enclosing 함수 내부 와 내장 함수 사이
  • G:글로벌 전역 역할 영역
  • B:build-in 내장 역할 영역
  • python 폐쇄
    1.Closure:내부 함수 에서 enclosing 역할 영역 변수 에 대한 참조
    2.함수 실질 과 속성
  • 함 수 는 하나의 대상
  • 이다.
  • 함수 실행 완료 후 내부 변수 회수
  • 함수 속성
  • 함수 반환 값
  • 
    passline = 60
    def func(val):
      if val >= passline:
        print ('pass')
      else:
        print ('failed')
      def in_func():
        print (val)
      in_func()
      return in_func
    
    f = func(89)
    f()
    print (f.__closure__)
    
    
    일반적 상황
    
    def f_100(val):
      passline = 60
      if val >= passline:
        print ('pass')
      else:
        print ('failed')
    
    def f_150(val):
      passline = 90
      if val >= passline:
        print ('pass')
      else:
        print ('failed')
    
    f_100(89)
    f_150(89)
    
    
    폐쇄 하 다
    
    def set_passline(passline):
      def cmp(val):
        if val >= passline:
          print ('Pass')
        else:
          print ('failed')
      return cmp
    
    f_100 = set_passline(60)
    f_150 = set_passline(90)
    f_100(89)
    f_150(89)
    
    
    Closure:내부 함수 에서 enclosing 작용 역 변수 에 대한 인용 은 enclosing 작용 역 변 수 를 내부 함수 의 closure 에 전달 합 니 다
    폐쇄 적 역할:
  • 패키지
  • 코드 재 활용
  • python 패키지 2
    화 해 를 구하 다
    
    def my_sum(*arg):
      if len(arg) == 0:
        return 0
      for val in arg:
        if not isinstance(val,int): #     int   0
          return 0
      return sum(arg)
    
    def my_average(*arg):
      if len(arg) == 0:
        return 0
      for val in arg:
        if not isinstance(val,int): #     int   0
          return 0
      return sum(arg)/len(arg)
    
    print (my_sum(1,2,3,4,5))
    print (my_sum(1,2,3,4,5,'6'))
    print (my_aveage(1,2,3,4,5))
    print(my_average())
    
    
    폐쇄 적 사용
    
    def my_sum(*arg):
      return sum(arg)
    def my_average(*arg):
      return sum(arg)/len(arg)
    
    def dec(func):
      def in_dec(*arg): # my_sum
        print ('in dec arg= ',arg)
        if len(arg) ==0:
          return 0
        for val in arg:
          if not isinstance(val, int):
            return 0
        return func(*arg)  #   ,   in_dec    __closure__ ,      
      return in_dec
    
    my_sum = dec(my_sum)  #   
    
    print(my_sum (1,2,3,4,5))
    print(my_sum (1,2,3,4,5,'6'))
    # my_sum  in_dec  ,          ,    __closure__    my_sum
    
    
    python 장식 기
  • 장식 기 는 함 수 를 장식 하 는 데 쓰 인 다
  • 함수 대상 을 되 돌려 줍 니 다
  • 장식 함수 식별 자 에 의 해 되 돌아 오 는 함수 대상
  • 문법 사탕@deco
    장식 기 를 사용 하 는 방식
    
    def dec(func):
      def in_dec(*arg): # my_sum
        print ('in dec arg= ',arg)
        if len(arg) ==0:
          return 0
        for val in arg:
          if not isinstance(val, int):
            return 0
        return func(*arg)  #   ,   in_dec    __closure__ ,      
      return in_dec  #        , my_sum       None
    
    # my_sum = dec(my_sum)  #      
    @dec     #     my_sum      dec,            my_sum
    def my_sum(*arg):
      return sum(arg)
    def my_average(*arg):
      return sum(arg)/len(arg)
    
    print(my_sum (1,2,3,4,5))
    print(my_sum (1,2,3,4,5,'6'))
    
    
    다른 예
    
    def deco(func):
      def in_deco(x,y):
        print ('in deco')
        func(x,y)
      print ('call deco')
      return in_deco
    
    @deco
    def bar(x, y):
      print ('in bar',x+y)
    
    bar(1,2)
    
    
    이상 은 Python 에서 LEGB 와 패키지 및 인 테 리 어 에 대한 소개 입 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주시 거나 본 사이트 커 뮤 니 티 에 가서 토론 을 하 십시오.본 사이트 에 Python 에 관 한 글 이 많 습 니 다.찾 아 보 세 요.읽 어 주 셔 서 감사합니다. 도움 이 되 셨 으 면 좋 겠 습 니 다.본 사이트 에 대한 지지 에 감 사 드 립 니 다!

    좋은 웹페이지 즐겨찾기