파 이 썬 장식 기 가 준 커피 에 재 료 를 좀 넣 어 주세요.

6302 단어 Python장식 기
함수 회고
1.python 에서 함 수 는 1 등 시민 이 고 함수 도 대상 입 니 다.우 리 는 함 수 를 변수 에 부여 할 수 있다.

def make_cofe(type):
    print('     : {}'.format(type))
​
get_cofe = make_cofe
get_cofe('  ')
​
####  #####
     :   
이 예 에서 우 리 는 함수 makecofe 에 변수 get 부여cofe,그 후에 get 호출cofe,함수 make 호출cofe()。
2.함 수 를 매개 변수 로 하여 다른 함수 에 전달 합 니 다.

def make_cofe(type):
    print('     : {}'.format(type))
​
def shop(func,type):
    func(type)
​
shop(make_cofe,'  ')
​
####  ####
     :   
이 예,우 리 는 makecofe 는 매개 변수 로 shop 에 들 어가 서 호출 합 니 다.
3.함 수 는 끼 워 넣 을 수 있 습 니 다.

def shop(type):
    def make_cofe(type):
        print('     : {}'.format(type))
    make_cofe(type)
​
shop('  ')
​
#####  ####
     :   
이 코드 에서 우 리 는 함수 shop 내부 에서 함수 make 를 정의 했다.cofe 4.함수 의 반환 값 도 함수 대상(패키지 닫 기)일 수 있 습 니 다.

def shop():
    def make_cofe(type):
        print('     : {}'.format(type))
    return make_cofe
​
get_cofe=shop()
get_cofe("  ")
​
####  #####
     :   
여기,함수 shop()의 반환 값 은 함수 대상 make 입 니 다.cofe 자체,그 후에 우 리 는 이 를 변수 get 에 부여 합 니 다.cofe,get 재 호출카페
장식
다음은 본 격 적 으로 장식 기 공 부 를 시작 하 겠 습 니 다.우리 먼저 문 제 를 하나 생각해 보 자.만약 우리 가 커피숍 에 가서 커피 한 잔 을 원한 다 면,우 리 는 어떻게 실현 해 야 합 니까?그렇게 쓸 지도 몰라.

def cofe():
    print('  ', end='')
​
cofe()
​
####  ####
  
그럼 우 리 는 지금 설탕 을 넣 은 커피 한 잔 을 마시고 싶 습 니 다.우 리 는 어떻게 써 야 합 니까?그렇게 생각 하 실 수도 있 습 니 다.그것 도 쉽 지 않 습 니 다.바로 cofe()함수 에서 고치 면 되 잖 아 요.

def cofe():
    print('    ', end='')
​
cofe()
​
####  ####
    
그럼 문제 가 생 겼 습 니 다.만약 에 우리 가 지금 설탕 을 넣 은 커피 를 마시고 싶 지 않다 면 어떻게 해 야 합 니까?cofe()함수 에서 지 울 수 는 없 잖 아 요.그럼 설탕 을 넣 은 커피 를 마시고 싶 은 사람 이 있 고,설탕 을 넣 은 커피 를 마시고 싶 지 않 은 사람 이 있다 면 어떻게 해 야 할 지,두 개의 cofe()함 수 를 쓸 수 는 없 잖 아 요.그럼 문 제 를 가지 고 아래 코드 를 보 겠 습 니 다.

def add_sugar(func):
    def add():
        print('  ',end='')
        func()
    return add
​
def cofe():
    print('  ',end='')
​
cofe = add_sugar(cofe)
​
print("    ",end='')
cofe()
​
####  #####
        
변수 cofe 는 내부 함수 add()를 가리 키 고 내부 함수 add()에 서 는 원 함수 cofe()를 호출 하기 때문에 마지막 에 cofe()를 호출 할 때'설탕 넣 기'를 먼저 인쇄 한 다음'커피'를 출력 합 니 다.여기 함수 addsugar()는 하나의 장식 기 입 니 다.진정 으로 실행 해 야 할 함수 cofe()를 감 싸 고 행동 을 바 꾸 었 지만 원 함수 cofe()는 변 하지 않 습 니 다.더 우아 한 화법 을 살 펴 보 자.

def add_sugar(func):
    def add():
        print('  ',end='')
        func()
    return add
​
@add_sugar
def cofe():
    print('  ',end='')
​
print("    ",end='')
cofe()
​
#####  #####
        
여기@문법 사탕 이 라 고 합 니 다.@addsugar 는 앞의 cofe=add 에 해당 합 니 다.슈 가(cofe)문 구 는 더욱 간결 할 뿐이다.따라서 프로그램 에 서 는 이런 표기 법 을 사용 하 는 것 을 권장 한다.자,우리 의 문 제 를 돌 이 켜 보 자.설탕 을 넣 은 커피 를 마시고 싶 은 사람 이 있 으 면 설탕 을 넣 은 커피 를 마시고 싶 지 않 은 사람 이 있다 면 어 떡 하지?장식 기 를 배 웠 다 면 간단 하지 않 겠 습 니까?설탕 을 넣 은 커피 를 마 시 려 면 설탕 을 넣 은 장식 기@add슈 가 에 게 설탕 을 넣 지 않 은 것 을 마 시 면 장식 기 를 넣 지 않 으 면 우 리 는 이 문 제 를 완벽 하 게 해결 할 수 있 습 니 다.함수 내 부 를 바 꾸 지 않 는 전제 에서 함수 에 새로운 기능 을 추가 하 였 습 니 다.지금까지 우 리 는 가장 간단 한 장식 기 를 다 배 웠 다.다음 에 우 리 는 한 가지 문 제 를 고려 하고 있 습 니 다.만약 에 원 함수 cofe()에서 인 자 를 장식 기 에 전달 해 야 한다 면 어떻게 합 니까?간단 한 방법 은 대응 하 는 장식 기 함수 add()에 해당 하 는 인 자 를 추가 할 수 있 습 니 다.

def add_sugar(func):
    def add(type):
        print('  ',end='')
        func(type)
    return add
​
@add_sugar
def cofe(type):
    print('{}  '.format(type),end='')
​
​
cofe("  ")
print()
cofe("  ")
​
####  #####
      
      
하지만 새로운 문제 가 생 겼 다.만약 내 가 또 하나의 함수(밀 크 티 함수)가 있다 면,add 를 사용 해 야 한다.슈 가()장식 기,그런데 이 새로운 함 수 는 두 개의 인자 가 있 는데 어떻게 해 야 하나 요?일반적인 상황 에서 우 리 는*args 와**kwargs 를 장식 기 내부 함수 add()의 매개 변수 로 합 니 다.*args 와**kwargs 는 임의의 수량 과 유형의 인 자 를 받 아들 이 는 것 을 의미 하기 때문에 설탕 장식 기 를 넣 으 면 다음 형식 으로 쓸 수 있 습 니 다.

def add_sugar(func):
    def add(*args, **kwargs):
        print('  ',end='')
        func(*args, **kwargs)
    return add
     
@add_sugar
def cofe(type):
    print('{}  '.format(type),end='')
​
@add_sugar
def milk_tea(type,num):
    print('{} {}  '.format(num,type), end='')
​
​
cofe("  ")
print()
milk_tea("xx  ","4")
​
####  ####
      
  4 xx    
이렇게 하면 우리 의 커피 와 밀 크 티 는 모두 설탕 을 넣 을 수 있다.앞에서 우리 가 말 한 것 은 함수 의 장식 기 입 니 다.다음은 장식 기로 서 의 종 류 를 말씀 드 리 겠 습 니 다.클래스 장식 기 는 주로 함수 에 의존 합 니 다.call__(),클래스 의 인 스 턴 스 를 호출 할 때마다 함수call__()한 번 실 행 될 겁 니 다.

​class Add_sugar:
    def __init__(self, func):
        self.func = func
        self.add_suger = "  "
​
    def __call__(self, *args, **kwargs):
        print(self.add_suger,end='')
        return self.func(*args, **kwargs)
​
@Add_sugar
def cofe():
    print("  ")
​
cofe()
​
####  #####
    
마지막 으로 우리 커피 에 설탕 도 넣 고 얼음 도 넣 어야 한다 면 우 리 는 어떻게 해 야 합 니까?우리 가 얼음 을 넣 는 장식 기 를 정 의 했 으 면 좋 겠 는데.

def add_sugar(func):
    def add():
        print('  ',end='')
        func()
    return add
​
def add_ice(func):
    def add():
        print('  ',end='')
        func()
    return add
​
​
@add_sugar
@add_ice
def cofe():
    print('  ',end='')
​
cofe()
​
####  ####
      
파 이 썬 인 테 리 어 에 관 한 글 입 니 다.-커피 에 재 료 를 넣 어 드 리 는 글 은 여기까지 입 니 다.파 이 썬 인 테 리 어 에 관 한 더 많은 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기