Python 의 LEGB 와 패키지 및 장식 기 를 자세히 설명 합 니 다.
LEGB L>E>G?B
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 에 전달 합 니 다폐쇄 적 역할:
화 해 를 구하 다
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 장식 기장식 기 를 사용 하 는 방식
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 에 관 한 글 이 많 습 니 다.찾 아 보 세 요.읽 어 주 셔 서 감사합니다. 도움 이 되 셨 으 면 좋 겠 습 니 다.본 사이트 에 대한 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.