Coding for KidsCoding for Kids
창의적인 레벨도전 과제교사 가이드
기능 투표
고급 파이썬 개발 과정
챕터
>
레벨

데코레이터
데코레이터 최적화

목표

데코레이터를 사용하여 재료를 수집하고 다양한 종류의 피자를 준비합니다.

이제 오븐이 준비되었으므로 나중에 요리할 피자를 미리 준비할 시간입니다. 데코레이터 사용법을 알게 되었으니 이를 조금 최적화해봅시다. 코드에서 @ 기호 뒤에 데코레이터 이름을 붙이고 이 코드를 데코레이트된 함수 위에 배치하면, 변수를 사용하지 않고도 자동으로 데코레이터를 적용할 수 있습니다. 예를 들어:

# Decorator def create_pizza(func): def set(): pizza = ["dough","red sauce","cheese"] player.combine(pizza) func() return set # Function being decorated with @ @create_pizza def peperoni_pizza(): player.place("Peperoni") player.speak("Peperoni Pizza has been prepped") # Using pre-decorated function peperoni_pizza()

이 기술은 함수가 사용 전에 미리 데코레이트되어 과정이 간소화된다는 점을 주목할 만하지만, 때로는 더 큰 유연성을 위해 데코레이터를 변수에 할당하고 싶을 수도 있습니다.

먼저, 금색 X 표시까지 걸어가 피자 만들 재료를 집어드세요. 피자 만들 재료는 다음과 같습니다: "cheese", "dough", "red sauce", "peperoni", "ham", "olive", "pepper", "onion""pineapple". 이 재료 대부분은 식료품 선반을 나타내는 행렬(Matrix) 안에 있으며, 리스트 컴프리헨션을 사용하여 집어들고자 하는 모든 항목들을 리스트에 저장하세요.

shelves = [ ["cheese", "dough", "jar"], ["jar", "red sauce", "jar"], ["peperoni", "jar" , "ham"], ["olive", "pepper", "onions"] ] ingredients = [ item for row in shelves for item in row if not "jar" in item]

위의 코드에서 리스트 ingredientsshelves라는 이름의 행렬의 행들을 순회하며, "jar"로 명명된 모든 항목을 제거합니다. 이 리스트 컴프리헨션은 모든 항목을 수동으로 추가해야 하는 시간을 절약해줍니다. 사용할 재료를 확인하기 위해 speak() 함수를 재료 리스트와 함께 사용하세요.

모든 재료가 모인 후 "pineapple"을 제외하고, 피자를 만들기 위한 함수들은 그 기능을 완전하게 수행하기 위해 place() 함수를 추가해야 합니다. 이 함수들은 코드 에디터에서 설정되어 있으며 이름은 다음과 같습니다: peperoni_pizza() (필요 재료: "peperoni"), vegetable_pizza() (필요 재료: "olive", "pepper", "onion"), 그리고 pineapple_pizza() (필요 재료: "ham""pineapple").

어두운 X 표시까지 걸어가서 데코레이트된 함수를 사용하여 피자를 준비하세요. 빨간 카펫이 있는 X 표시에서는 peperoni_pizza()를, 초록 카펫에서는 vegetable_pizza()를, 노란 카펫에서는 pineapple_pizza()를 만듭니다. 노란 카펫으로 가는 도중, 밝은 X 표시에서 멈추어 캐비닛을 향해 collect() 함수를 사용하여 "pineapple"을 집어드세요. 레벨을 성공적으로 완료하기 위해 모든 피자를 준비하세요.

코드북