파이썬 문법

logging 을 import하여 exc_info를 로그로 남길 수도 있겠지만.. 나는 에러가 발생했을 때 마다 slack으로 정확히 어떤 파일의 몇번째 줄에서 문제가 발생했는지 알림을 받고 싶었다. traceback 모듈을 사용해보자. traceback은 파이썬의 표준 라이브러리에 포함된 모듈이므로 별도 설치가 필요없다. :D (구버전 파이썬을 써야만 하는 상황이라 버전 안맞을까봐 걱정할 필요가 없다!) 에러 정보를 콘솔에 출력(print) 하려면 traceback.print_exc() 특정 변수에 예외정보를 담으려면? try: test = "이건 테스트지" print(test[100]) # test 문자열의 100번째 인덱스는 없으니 에러가 발생하지요 except Exception as e: impo..
api를 만들 때 리스트로 만드는 것 보다 딕셔너리를 주로 많이 쓰게 된다. 내가 파이썬을 처음 배웠던 시절에는 딕셔너리 자료형이 순서를 보장하지 않는다고 했던 것이 기억나 가급적 순서보장이 필요할 땐 리스트를 주로 썼었다. 근데 아무리봐도 리스트보단 딕셔너리를 쓰는 것이 더 나아보이는 상황이 종종 있었는데 이것이 또 순서가 보장되었으면 했다. 그렇다고 키값을 요소로 가지는 리스트와 딕셔너리를 둘다 쓰긴 싫었는데... 다행스럽게 파이썬 3.6버전부턴 키 추가 순서가 보장된다!🎉🎉 https://blog.hwahae.co.kr/all/tech/6662 Python3.6 부터는 Dict가 순서를 기억한다. – 화해 블로그 | 기술 블로그 Python3.6 화해 개발팀에서는 닥블(닥치고 블로그)이라는 소모임을..
파이썬에서 데이터를 읽고 쓸때에는 항상 절대경로만 사용해서 몰랐었다. 이번에는 상대경로를 쓰고 싶어서 상대경로로 써보는데 이게 뭔 일인지... 왜 자꾸 없는걸 있다고 하고 있는걸 없다고 하는거지? 했다. 결론부터 말하자면 현재 헷갈릴 땐 일단 os.getcwd() os.listdir() 를 써서 현재 위치나 현재 위치의 하위 폴더들을 확인해보자. 디렉토리의 상태는 다음과 같다. PATH_TEST/Folder1/Folder1-1/file1-1.py PATH_TEST/Folder1/Folder1-2/file1-2.txt 가 있다. import os if os.path.exists("../Foler1-2/file1-2.txt"): print("file1-2.txt가 존재함") else: print("file1..
알고리즘 풀 때마다 이따금 input() 에서 속도가 걸려서 문제가 생기는 경우가 있었다. 이럴 땐 sys.stdin 을 대신해서 사용하곤 했는데 더 좋은 방법을 찾았다. input() 대신 stdin을 사용하면 sys를 따로 호출해서 써야하는 부분이 귀찮았는데 더 좋은 대안을 찾았다! 파일 입출력 함수인 open()을 사용하면 된다! input == sys.stdin.readline == open(0).readline 대충 기능으로만 보면 동일해보인다. 제일 느려! T = input() 빠른데 매번 호출이 귀찮아.. from sys import stdin input = stdin.readline T = input() 우와 최고다!! input = open(0).readline T = input()
해당 글은 Yang Zhou님의 5 Best Practices of Destructuring Assignments in Python 를 번역하였습니다. 변수에 value(값) 을 저장하는 방법은 프로그래밍의 기본 소양입니다. 어떤 프로그래밍 언어들 중에서도 특히나 파이썬의 경우 이러한 과정을 더욱 우아하게 처리할 수 있는 방법이 있죠. 예시를 한번 보도록 합시다. a, *mid, b = [1, 2, 3, 4, 5, 6] print(a, mid, b) # 1 [2, 3, 4, 5] 6 위의 코드와 같이 * 을 통해 가운데의 mid 변수는 가운데 요소들(2,3,4,5)을 리스트로 받은 것을 확인할 수 있습니다. 이러한 방식이 파이썬에서의 구조분해 할당을 받는 방법 중 하나입니다. 해당 문서는 파이썬에서의 주..
이게 뭔데요? key와 value를 저장하는 데이터 구조 key를 통해 바로 데이터를 받아올 수 있기 때문에 속도가 획기적으로 빨라짐 파이썬에서는 Dictionary 가 해시 테이블로 구현되어 있음 빠른 접근과 탐색이 필요할 때 사용하기 좋다 (일단 딕셔너리에 사용되는 함수 대부분의 시간복잡도는 O(1)) 딕셔너리 형태 값 초기화 (빨간 줄은 mypy 설정으로 인한 에러이다. 따라서 result: dict[str, int] = collections.defaultdict(int) 로 해줘도 무관) 위와 같이 collections.defaultdict(디폴트로 설정할 값의 자료형) 을 넣으면 해당 키의 value를 넣기도 전에 설정한 자료형으로 초기화됨 참고문제 참고 https://www.fun-coding..
우리 파이썬도 타입을 지정할 수 가 있었다네요. (3.6 버전부터 말이죠?) 참고 사실 지정이라는 말보다는 '힌트'를 줄 수 있다가 더 정확하겠다. 기존에도 docstring을 통해서 힌트를 줄 순 있었지만 이건 에디터상에서도 좀 더 확실하게 힌트를 주는 듯 하다. *에디터 환경은 파이참 다음과 같이 int타입의 파라미터를 받고, str타입으로 return을 하는 함수를 정의해주었다. 함수 안에서 int타입인 my_input을 형변환 없이 그대로 리턴하였더니 Expected type 'str', got 'int' instead :2 라는 경고표시가 보인다. 또 int타입으로 받아야 할 파라미터를 "hello world"라는 str형으로 주었더니 Expected type 'int', got 'str' in..
프로그램을 짰는데 이따금 생각했던 것 보다 너무나 느린 경우가 있다. 가령 1기가가 넘어가는 obj모델을 geopy.geodesic을 활용한 좌표계의 변환이 하루가 넘어가버린다든가 원인을 열심히 생각해본 결과, 이 미천한 개발자는 언어(파이썬)의 성능을 탓하게 되었는데.. 인터프리터 언어인 파이썬은 편리한만큼 느리다는 말이 만연했기 때문이다. 결론적으로 파이썬 성능을 의심하지말라.. 위의 링크의 글에 의하면 파이썬은 Numba라는 라이브러리를 통해 더 빠르게 바꿀 수 있다고 한다. 해당 라이브러리를 사용하면 C나 포트란 같은 언어보다도 빨라질 수 있다고 한다. 여지껏 느린언어라며 아무것도 모르는 바보같은 개발자(그 누구도 아닌 바로 나)에게 조롱당해온 불쌍한 파이썬이여...그 누명도 이젠 안녕(?) 하지..
파이썬에서 병렬처리를 한다는 것...파이썬에 대해 좀더 deep하게 알아야하는 과정이 필요한 것 같은데? 가령 cpu나 램은 파이썬에서 어떻게 동작하는게 효율적인가 같은. 그런데 그걸 하나하나 다 뜯고 공부한 후에 프로그램을 짤 시간이 없었다. 기한 안에 어떻게든 만들어야했기에 선택권이 없는 상황에 처했다. 그래서 어떻게..? 그냥 했다. 무작정. 되는대로. 손이가는대로. 마음가는대로. 파이썬에서 특정 라이브러리를 꼭 써야하는 일이 있었는데 이 글에서는 geopy를 예시로 글을 써보겠다. 해당 라이브러리는 좌표계 변환을 위해 사용하는 것인데, geopy의 geodesic이 정확도가 높은 대신에 속도가 엄청나게 느리다. 어느정도 정확도를 포기하고 속도를 빠르게 하고싶다면 great_circle이라는 놈을 ..
파이썬은 아주 간단한 차이일지라도 성능에는 정말 다른 결과를 가져오는 일이 종종 있다. 개발하다가 너무 느린 함수가 있었는데 어떻게 기존 코드를 최적화해서 속도를 줄일 순 없을까 보던 중... 소 뒷걸음질 치다가 쥐잡은 것 마냥 속도 개선이 되었다. 그럼 어떻게..? 파이썬에서 리스트를 사용할 때 가급적 다음과 같이 사용을 지양해야 한다. 추가받을_리스트 = 추가받을_리스트 + [추가할 요소] 백문이 불여일견이니 코드와 결과를 한번 보자 from collections import deque import time import random # 10000개짜리의 샘플 리스트를 무작위로 생성해보자 add_list = random.sample(range(100000), 100000) # case1 sample_l..
연산자에서 주의할 점 만약 논리 연산자 왼쪽 값으로 연산의 결과가 결정될때, python은 논리연산자 오른쪽의 값을 계산하지 않는다. False and ...인 경우나 True or ...인 경우 가령 변수 a와 함수 f()를 정의해보자 a = 10 def f(): global a a = 0 return True True or f() 이때 결과 값은 True가 나온다. 하지만 함수 f()는 실행되지 않으므로 a의 값은 여전히 10으로 남아 있는다. 반면, a = 10 def f(): global a a = 0 return True f() or True 이렇게 실행한 경우에는 함수 f()가 실행되므로 a의 값이 0으로 바뀌게 된다. 문제 a = 10 def foo() : global a a = a + 5 ..
Variables 참고한 글 1 다음과 같은 코드를 실행했다 가정해보자. a = 10 => a라는 이름의 변수공간에 정수 10을 넣었다. (x) => a가 '어떤 주소값'을 가지는데 그 '어떤 주소값'이 가리키는 공간에 100이라는 '값(value)'의 '정수형 객체(object)'가 존재한다.(o) 다시 말해 변수(variable)는 값(value)을 가진 객체(object)가 존재하는 곳을 가리키는 주소(memory address)를 가진다고 볼 수 있다. 파이썬에서 메모리에 할당된 객체의 주소는 id( )함수를 사용하면 된다. aa = 123 bb = 124 print("aa의 메모리 주소 : ", id(aa)) print("bb의 메모리 주소 : ", id(bb)) aa의 메모리 주소 : 4504..
sovelop
'파이썬 문법' 카테고리의 글 목록