본문 바로가기

app/python

(50)
pip multiple versions of dependency resolver problem INFO: pip is looking at multiple versions of to determine which version is compatible with other requirements. This could take a while. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. pip의 dependency resolver 문제로 pip의 최신 버전에서 나타나는 문제이다. 설치하려는 패키지와..
파이썬 부동소수점 사용시 주의할점 부동 소수점 오류 예 0.1 == 0.1 # True 0.2 == 0.1+0.1 # True 0.3 == 0.1+0.1+0.1 # False 0.4 == 0.2+0.2 # True 0.5 == 0.2+0.2+0.1 # True 0.6 == 0.2+0.2+0.2 # False 0.9 == 0.5+0.4 # True 0.9 == 0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1 # False 0.1을 100번 더하면 10이 나와야 되는데... 0.1을 정확히 표현할 수 없기 때문에 발생하는 오류입니다. result = 0.0 for i in range(0, 100): result += 0.1 print(result) 이 모든것은 부동 소수점에서 발생하는 문제이다. 소수점 연산은 정확한 연산을 ..
array의 연산을 빠르게 하는 방법 import timeit arr = [i for i in range(4000 * 4000)] def slow_sum(): sum = 0 for x in range(4000): for y in range(4000): sum += arr[x + 4000 * y] # print(sum) # 127999992000000 def fast_sum(): sum = 0 for x in range(4000): for y in range(4000): sum += arr[x * 4000 + y] # print(sum) # 127999992000000 timer1 = timeit.Timer('slow_sum()', setup='from __main__ import slow_sum') t1 = timer1.timeit(numb..
Peephole optimization 해당 문서는 https://legacy.python.org/workshops/1998-11/proceedings/papers/montanaro/montanaro.html 를 번역한 것으로, 파이썬의 버전에 따라 결과가 다를 수 있습니다. 원본 문서 python 1.5 버전으로 1998.11월에 작성되었습니다. 파이썬 코드는 간단한 방식으로 고수준 가상 머신에 의해 컴파일 됩니다. 성능을 향상시키기 위해 코드에 peephole optimizer를 적용할 수 있어야 합니다. 이 문서는 기존 바이트 컴파일러와 통합 된 Python으로 작성된 peephole optimization를 조사합니다. 일반적으로, peephole optimization는 opcode의 패턴을 찾아 더 효율적인 코드로 치환해줍니다. p..
The internals of Python string interning 해당 글은 http://guilload.com/python-string-interning/ 를 번역한 글입니다. 해당 글은 Python 2.7.7 버전에서의 인 터닝에 대한 글입니다. 파이썬 버전에 따라 차이가 있을 수 있습니다. 파이썬 최신 버전에 대한 이야기는 https://nephtyws.github.io/python/interning/ 를 보시면 됩니다. 며칠 전 동료에게 내장 함수 intern의 기능을 설명해야 했습니다. >>> s1 = 'foo!' >>> s2 = 'foo!' >>> s1 is s2 False >>> s1 = intern('foo!') >>> s1 'foo!' >>> s2 = intern('foo!') >>> s1 is s2 True 이것은 내부적으로 어떻게 동작할까요? PyS..
wsgi를 왜 쓰나요 "uwsgi를 왜 쓰나요?”라는 질문을 “파이썬에서 통신을 하기 위해 지정한 인터페이스예요”라고 대답을 했지만 … 개인적으로 충분한 대답이 되지 않은 것 같아 이 글을 작성합니다. 해당 글은 “왜”, “어떻게” 그리고 "정말 쓰면 좋아요?”를 주제로 정하고 작성하였습니다. 1. 왜 django의 runserver로 배포 하면 안돼요? django에서는 runserver를 통해 개발 및 테스트를 합니다. 네. runserver는 “개발 및 테스트”가 목적입니다. django의 공식 문서에의 runserver의 글입니다. (https://docs.djangoproject.com/en/2.2/ref/django-admin/#runserver) DO NOT USE THIS SERVER IN A PRODUCTIO..
Python dictionary implementation 해당 글은 http://www.laurentluce.com/posts/python-dictionary-implementation/의 글을 번역한 것입니다. 해당 글의 소스는 python2를 기준으로 작성되었으며 python버전에 따라 다를 수 있습니다. dictionary은 키로 색인되며 연관 배열로 표시될 수 있습니다. dictionary에 3 개의 키 / 값 쌍을 추가해 봅시다 : >>> d = {'a': 1, 'b': 2} >>> d['c'] = 3 >>> d {'a': 1, 'b': 2, 'c': 3} 이 방법으로 값에 액세스 할 수 있습니다. >>> d['a'] 1 >>> d['b'] 2 >>> d['c'] 3 >>> d['d'] Traceback (most recent call last) Fi..
python list implementation 해당 글은 http://www.laurentluce.com/posts/python-list-implementation/ 를 번역한 글입니다. 해당 글의 로직은 python버전에 따라 다를 수 있습니다. List object C structure listobject.h의 소스 파일 typedef struct { PyObject_VAR_HEAD PyObject **ob_item; Py_ssize_t allocated; } PyListObject; list 오브젝트는 cpython의 위와 같은 c structure로 선언되어 있습니다. ob_item는 list의 데이터에 대한 포인터입니다. allocated는 메모리에 할당된 슬롯의 개수입니다. list의 전체 사이즈는 ob_size로 표현되며, 크기는 아래와..