Python
(35)데코레이터 사용하기 - 2
매개변수가 있는 데코레이터 만들기 여태 우리가 만든 데코레이터는 데코레이터 함수 자체에는 매개변수가 없고 데코레이터 사용시에 매개변수를 받고 그 매개변수를 데코레이터 내부에서 사용하였다. 이번엔 데코레이터 함수 자체에 매개변수가 있는 데코레이터를 만들어 보려고한다. def 데코레이터(매개변수): 중첩함수1번(func): 중첩함수2번(func의 매개변수): r = func(func의 매개변수) 식 return r return 중첩함수2번 return 중첩함수1번 사용시 @데코레이터(인수) def 함수이름(): 코드 만들기 def is_multiple(x): def real_decorator(func): def wrapper(a, b): r = func(a, b) if r % x == 0: print('{0..
(34)데코레이터 사용하기
데코레이터(decorator) - 장식해주는 역할을 한다. @staticmethod,@classmethod 등 에사용하는 @를 의미함 함수를 장식하는 용도 함수를 변경하지않고 그 함수에 기능을 추가하고 싶거나 디버깅할때 사용된다. 데코레이터를 만들때 자주 사용하는 이름 trace : 추적자를 의미함 데코리에터 함수이름으로 자주사용한다. wrapper : 감싸는 무언가를 의미하는데 데코레이터 함수 내부에 작동하는 함수의 이름으로 사용 데코레이터 함수 만들기 예제 def hello(): print('hello 함수 시작') print('hello') print('hello 함수 끝') def world(): print('world 함수 시작') print('world') print('world 함수 끝') ..
(33)코루틴(coroutine) 사용하기
코루틴(cooperative routine)이란?? 여태 함수내에 함수를 사용하면 메인루틴과 서브루틴으로 나뉘어져 서브루틴은 해당 함수를 실행할때만 사용되고 곧바로 종료되었다. 코루틴이란 종료되지않고 서로 대기상태에 머물며 상호작용하는 코드 방식을 의미한다. 코루틴은 기본적으로 제너레이터의 형태이다. 코드를 실행할땐 send 메서드를 사용한다. send 메서드가 보낸값을 (yield)형식으로 받아 변수에 저장한다. 상호작용하는 함수 코드들의 실행 지점을 진입점(entry porint)라고 한다. while True:를 사용하여 무한반복루프로써 코드가 종료되지않게 한다. 1단계! 코루틴에 값을 보내보기 코루틴객체.send(값) : 코루틴에 값을 전달한다 변수 = (yield) : 전달 받은 값을 변수에 저..
생애 첫 코딩테스트 문제
사실 알고리즘 문제를 풀진 못했다. 우선 문제는 아래와 같다. 수포자 3명의 찍기 패턴은 다음과 같다. 수포자1 = [1,2,3,4,5] 수포자2 = [2,1,2,3,2,4,2,5] 수포자3 = [3,3,1,1,2,2,4,4,5,5] 그리고 나의 풀이는 밑에와 같다. while len(sp1) < 20: j = [1,2,3,4,5] sp1.append(j[i]) if i == len(j)-1: i -= len(j)-1 else: i += 1 while len(sp2) < 20: j = [2, 1, 2, 3, 2, 4, 2, 5] sp2.append(j[i]) if i == len(j)-1: i -= len(j)-1 else: i += 1 while len(sp3) < 20: j = [3, 3, 1, 1,..
(32)제너레이터 & yield
제너레이트는 yield 키워드로 간단하게 만들 수 있는 이터레이터 이다.(발생자 라고 부르기도한다.) 제너레이트와 이터레이트의 차이 제너레이트는 raise로 예외를 발생 시키지 않아도 함수끝에 도달하면 StopIteration이 자동발생 제너레이트는 next 메서드안에서 return 으로 직접 반환하지않아도 yield에서 값을 발생시킨다. 이터레이트는 return을 사용해서 반환후 바로 종료 되지만 제너레이트는 yield를 사용하기때문에 대기상태가된다. 제너레이트 만들기 yield 값 def number_generator(): yield 0 yield 1 yield 2 for i in number_generator(): print(i) 결과 0 1 2 for & 제너레이터 for 반복문에서 제너레이터 ..
(31)iterator & iterable 반복가능객체
iterator : 값을 차례대로 꺼낼 수 있는 객체 iterable : 반복 가능한 객체 (요소가 여러개 들어있고,한 번에 하나씩 꺼낼수 있는 객체) lazy evaluation(지연평가) : 이터레이터만 생성하고 값이 필요한 시점에 요소를 꺼내는방식 메모리에 부담을 줄일 수 있다. 반복 가능한 객체 알아보기 dir(객체) dir([1, 2, 3]) ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__i..