fluent python
-
generatorfluent python 2019. 6. 15. 15:21
어떤 자료를 순회하기 위해 이터레이블(iterable) 클래스를 직접 정의할 수도 있지만 대신에 제너레이터(generator) 함수를 사용할 수도 있다. __iter__() 메서드를 구현했으므로 abc.Iterable 클래스의 하위 클래스인 것으로 간주한다. 이전의 iterable, iterable 포스팅에서 Sentence의 __iter__() 는 SentenceIterator() 생성자를 호출해서 반복자를 생성하고 리턴했다. 그러나 위 Sentence의 반복자는 제너레이터 객체로서, __iter__() 메서드를 호출할 때 자동으로 생성된다. __iter__() 메서드는 제너레이터 함수기 때문이다. 1. 제너레이터 함수의 작동방식 함수 본체 안에 yield 키워드를 가진 함수는 모두 제너레이터 함수다...
-
iterable and iteratorfluent python 2019. 6. 9. 20:45
1. 시퀸스가 반복가능한 이유 : __iter__(), __getitem__() 파이썬의 반복자(iterator)패턴은 메모리에 다 들어가지 않을 정도로 큰 데이터집합을 한꺼번에 가져오는 것이 아니라 한 번에 하나씩 가져온다. 파이썬의 컬렉션은 모두 반복형(iterable type)이며, 다음과 같은 연산을 지원하기 위해 내부적으로 반복자(iterator)를 사용한다. for 루프 컬렉션의 생성과 확장 텍스트 파일을 한 번에 한 줄씩 반복 지능형 리스트, 딕셔너리, 집합 튜플 언패킹 함수 호출시 * 를 이용해서 위치 인자로 들어오는 값들을 언패킹 먼저 Sentence 라는 클래스를 구현하여 반복형(iterable type)을 알아보자. 이 클래스의 생성자는 텍스트로 구성된 문자열을 받은 후 단어별로 순회..
-
함수의 매개변수fluent python 2019. 5. 11. 19:42
위치 인자 & 키워드 인자파이썬의 위치 매개변수와 키워드 매개변수는 함수에 인자를 전달하는 데 다양한 방법을 제공한다. 아래의 tag()함수는 HTML 태그를 생성한다. x ------------------------hello------------------------helloworld------------------------hello------------------------helloworld------------------------------------------------hellopython------------------------hellopython------------------------21: 위치 인자를 1개만 사용해서 호출하면 이름을 가진 빈 태그를 생성한다. 22 ~ 23: 첫번째 ..
-
일급함수, 고위함수, 콜러블fluent python 2019. 5. 6. 21:33
일급함수파이썬에서 함수는 일급객체다. 어떤 프로그램 개체가 일급객체가 되기 위해서는 아래의 조건을 만족해야 한다. * 런타임에 생성할 수 있다. * 데이터 구조체의 변수나 요소에 할당할 수 있다. * 함수의 파라미터로 전달할 수 있다. * 함수의 리턴값으로 할당할 수 있다. 아래의 코드는 파이썬의 함수가 객체임을 보여준다. xxxxxxxxxx>>> def factorial(n):... '''this is factorial'''... return n * factorial(n-1) if n > 1 else n... >>> factorial>>> factorial(10)3628800>>> factorial.__doc__'this is factorial'>>> type(factorial)factorial함수는..
-
인코딩과 디코딩fluent python 2019. 5. 6. 01:02
파이썬3의 str()은 항상 유니코드 문자열을 리턴하지만 파이썬2는 경우가 다르다. xxxxxxxxxxdef str(s): # python2 """Return a nice string representation of the object. The return value is a str or unicode instance. """ if type(s) is str or type(s) is unicode: return s r = s.__str__() if not isinstance(r, (str, unicode)): raise TypeError('__str__ returned non-string') return rIn Python 2, objects can specify both a string and unic..
-
python의 dictfluent python 2019. 4. 6. 13:27
mapping objectdict는 다양한 방식으로 정의할 수 있다. xxxxxxxxxx>>> a = dict(one=1, two=2, three=3)>>> b = {'one': 1, 'two': 2, 'three': 3}>>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))>>> d = dict([('one', 1), ('two', 2), ('three', 3)])>>> e = dict({'three': 3, 'two': 2, 'one': 1})>>> a == b == c == d == eTruedict은 mapping 객체 중 하나에 해당하며 mapping객체의 정의는 아래와 같다. 임의의 키 검색을 지원하고 Mapping 또는 MutableMapping추상클..