본문 바로가기
반응형

Python81

[Python] 잘 알려져 있지 않은 파이썬 기능 'Hidden features of Python' 언젠가 스택오버플로에서 찾았는데, 파이썬에서 잘 알려져 있지 않은 기능을 공유하는 글이다. (다만 스택오버플로의 취지에는 맞지 않는 질문이라 지금은 close 됨)한 번에 읽기에는 좀 길어서 북마크해뒀었는데 가끔 보면서 흥미로운 게 있으면 적어놨다. Function argument unpacking 별표(*;asterisk) 연산자를 사용하여 리스트나 딕셔너리를 언패킹할 수 있다.>>> a = [1, 2, 3, 4, 5] >>> print(*a) 1 2 3 4 5 >>> b = {'a': 1, 'b': 2, 'c': 3, 'd': 4} >>> print(*b) a b c d오와!했지만 손이 안 가서 쓰지 않는다.아웃! C 스타일 코딩을 가능케 하는 모듈 .. 2019. 3. 19.
[Python] generator와 yield # generator란?파이썬의 generator란 yield라는 키워드를 사용하는 iterator 생성 함수이다. * iterator란 countable한 값들을 가지고 있는 객체이다. 이 iterator가 iterate 된다는 것은 모든 값을 가로지를 수 있음을 뜻한다. 파이썬에서 iterator는 iterator 프로토콜을 시행하는 객체이며, __iter__()와 __next__() 메소드를 가지고 있다. # generator 함수 생성generator를 만드는 방법은 간단하다. 평범한 함수에서 return 대신 yield 키워드를 사용하면 된다. 함수가 하나 이상의 yield를 가지고 있다면 generator 함수가 된다. 한편 yield와 return은 모두 같은 값을 리턴하지만, return은.. 2019. 2. 18.
Python3.6에서는 dict가 입력순으로 정렬된다. (스택오버플로 질문 Are dictionaries ordered in Python 3.6+?의 답변을 참고했다.) '''# 읽지 않아도 되는 서론회사에서 random 함수가 사용된 함수를 테스트하다가 신기한 점을 발견했다. 내 컴퓨터(Python3.6)에서는 마냥 잘 되던 테스트가 다른 컴퓨터(Python3.5)에서는 계속 실패했던 것이다. 하지만 가끔 통과되는 경우도 있어서 영문을 몰랐는데 알고보니 딕셔너리의 정렬 여부 때문이었다.import random random.seed(1) dict_a = {'a': 1, 'b': 2, 'c':3, 'd':4, 'e':5} key = random.choice(list(dict_a.keys())) # 딕셔너리 키 값중 하나를 랜덤으로 선택 할당 assert key.. 2019. 2. 15.
[Django] QuerySet을 사용할 때 쿼리를 몇 번 가져오는지 확인하자 사이트에서 Get 방식으로 가져오는 API 하나가 1.5초 정도로 너무 오래 걸린다 싶었는데 django-debug-toolbar(공식문서)의 SQL탭을 보니 쿼리를 150번 정도 돌리고 있었다.그렇게 복잡한 API도 아니었는데 이렇게 쿼리를 많이 돌리는 이유를 보니, - serializer에서 다른 테이블을 참조- for loop로 QuerySet을 돌림 이 중 두 번째, for loop로 QuerySet을 돌리는 실수가 가장 치명적이었다.심지어 for loop 아래의 for loop에서까지 돌리고 있었다.쿼리 1-10개 정도야 반짝하고 가져오지만 100개가 넘어가면... 그래서 for loop 아래에서 Model.objects.filter(..) 등으로 QuerySet을 가져오는 부분을 모두 바깥으로.. 2019. 2. 13.
반응형