python에서 zip 함수는 유용하게 쓰일 수 있는 메서드 중 하나입니다. 어떻게 쓰이는지 간단하게 예제를 보겠습니다. zip 메서드에 대한 설명을 보면, Iterable한 것을 여러개 받게끔 되어 있습니다. 뭐가 뭔지 모르겠으니, 설명에서 예제로 나온 것 부터 해석해 보도록 하겠습니다. list(zip('abcdefg', range(3), range(4)))를 보시면, iterable한 것이 3개나 들어왔음을 알 수 있어요. str, 범위, 범위 이렇게요. 그런데, 결과가 [('a', 0, 0), ('b', 1, 1), ('c', 2, 2)]가 최종적으로 나왔습니다. 여기서 유추할 수 있는 것 하나는, zip 메서드가 병렬적으로 iterator를 돌림을 알 수 있습니다. 'abcdefg', range..
코딩/파이선 검색 결과
GIL과 lock에 대해 공부하다 보면, 연산이 atomic하다. 그렇지 않다 이야기는 많이 들을 듯 싶습니다. a += 1 같은 것도 사실 바이트 코드로 보면 몇 개의 연산으로 이루어져 있을 겁니다. c python에서 한 줄의 코드에 어떤 바이트 코드들이 들어 있는지 간단하게 확인하는 방법이 없을까요? dis 모듈을 이용하시면 편하게 하실 수 있습니다. 저는 문서에 나 온 것 중, dis 함수만 언급하겠습니다. 나중에, 다른 것이 필요하다면 따로 보는 게 좋을 듯 싶어요. dis 모듈은 뭔지는 잘 모르겠어요. 그런데, Disassembler가 나오고, byte code가 나오는 걸로 보아서는 파이썬 코드를 기계어나, 혹은 바이트 코드로 변환하는 역할을 하는 모양새입니다. 여기에 있는 모듈 중에 우리가..
파이썬을 다루시다 보면 한 번 쯤 GIL에 대해서 들어본 적이 있을 겁니다. 그리고, 이에 대한 문서를 보면, jython이나 iron에는 GIL이 없다는 것을 알 수 있는데요. 이렇게 구현체마다 다른 특성을 가지는 경우가 있어요. 그래서, 버전과 함께 구현체를 확인하는 방법을 알아보려고 해요. python을 하는데, Jython을 쓰는지 pypy를 쓰는지, cpython을 쓰는지 모르면 말이 안 될 거고요. 이 질문의 답을 보면, platform을 써 보라고 합니다. platform을 import 해 보겠습니다. 여기에는, platform identifying data를 얻어오기 위한 모듈임을 알 수 있어요. function API를 통해서, information을 만들어 낸다는 이야기도 같이 덧붙이고..
파이썬에서 bfs는 어떻게 구현할까요? 이 말은 파이썬에서 어떻게 queue를 쓸까요? 와 같은 말입니다. collections에 deque가 있는데요. 그것을 이용하시면 됩니다. 예전에 list.pop(0)을 언급하면서 이야기를 잠깐 했던 기억이 나네요. [관련글] python에서 list.pop(0)을 쓰면 안 되나요? 먼저, append 부터 소개해 드리겠습니다. 이것은 오른쪽에, 원소를 추가합니다. 이 상황을 그림으로 그려 보겠습니다. 덱에 1만 있다고 해 봅시다. append(2)를 호출했다고 하면, 아래와 같이 될 겁니다. 1 오른쪽에 2가 추가되었습니다. 즉, 현재 deque에서 가장 오른쪽에 있는 것은 군청색으로 표시된 2인 것입니다. 다음에, 또 append 3을 하면 아래와 같이 될 겁..
파이썬에는 ==와 is가 있습니다. 이 둘의 차이를 알아봅시다. 먼저 is 연산자는 identity를 비교합니다. 설명을 보면 알 수 있습니다. 같은 오브젝트를 가리키면 x is y가 참값을 가집니다. 그렇지 않으면, false가 됩니다. 반면에 ==는 동등성을 비교하는 것인데요. 이것만 보면 헷갈리실 수 있으니, 예제를 보겠습니다. dog 객체가 2개 있습니다. a와 b는 'cho'라는 정보를 담고 있는 강아지 객체입니다. 보시면 __eq__하고 __hash__가 재정의 되어 있음을 알 수 있습니다. __eq__는 단지, st만을 가지고 비교하게 됩니다. a와 b의 필드 st의 값은 'cho'로 같았습니다. 그리고, 문자열은 내용이 같으면 참입니다. 어찌 되었던 Dog('cho')와 Dog('cho')..
최근댓글