본문 바로가기

python/uncategorized18

python 실행 중 코드 수정 input() asdf 이렇게 코드 쓰고 실행한 다음 input에 값 넣기 전에 둘째 줄을 qwer로 바꿨다. Traceback (most recent call last): File "c:\Users\falto\Desktop\pythonprojects\kakaotalkbot\a1.py", line 2, in qwer NameError: name 'asdf' is not defined 그럼 이렇게 된다. 2021. 8. 14.
__add__와 __radd__ int 클래스에는 __add__와 __radd__라는 메서드가 있다. __add__는 int + 무언가를 연산할 때 호출되는 메서드이고, __radd__는 무언가 + int를 연산할 때 호출되는 메서드이다. 이는 int 뿐만이 아니라 다른 클래스에서도 구현할 수 있다. class Asdf: def __add__(self, value): return 2 + value asdf = Asdf() a0 = asdf + 3 print(a0) # 5 class Asdf에 __add__ 메서드를 구현했다. asdf + 3을 연산할 때 __add__ 메서드의 value 매개변수에는 3이 들어간다. 결과는 5가 나온다. class Asdf: def __add__(self, value): return 2 + value a.. 2021. 8. 10.
시간 복잡도와 이중 for문 import time list_a = range(3000) def func0(list_a): ret = [] for i in range(len(list_a)): suma = 0 for a in list_a[:i+1]: suma += a ret.append(suma) return ret def func1(list_a): ret = [] suma = 0 for a in list_a: suma += a ret.append(suma) return ret start0 = time.monotonic() ret0 = func0(list_a) elapsedtime0 = time.monotonic() - start0 start1 = time.monotonic() ret1 = func1(list_a) elapsedtime.. 2021. 6. 4.
for문 도중 값이 바뀌는 것에 주의 >>> a = list('asdf1234') >>> a ['a', 's', 'd', 'f', '1', '2', '3', '4'] >>> for x in a: a.remove(x) ... >>> >>> a ['s', 'f', '2', '4'] for문 도중에 a의 배열이 변하게 하면, 의도치 않은 결과를 갖게 될 수 있다. asdf1234에서 a를 지우면 sdf1234가 남는데, for문은 a[0]을 처리했으니 a[1]을 처리하려고 할 것이다. 그런데 이 시점에서 a[1]은 s가 아닌 d이다. 즉 a[1]을 처리하고나면 sf1234가 남는다. sf1234에서 a[2]는 1이므로 처리하면 sf234... 이런 식으로 가서 마지막엔 sf24만 남게 된다. 그렇다면 for문 도중에 배열이 변하지 않게 하려면 어.. 2021. 5. 19.
while문에서 time.sleep의 중요성 아래 코드는 while문이 1초 동안 몇 번 반복되는지 알아보는 코드이다. import time a = time.time() b = 0 while True: b += 1 if time.time() - a > 1: break print(b) 3956691번 반복된다고 나온다. import time a = time.time() b = 0 while True: b += 1 if time.time() - a > 1: break time.sleep(0.001) print(b) 위 코드를 실행시켜보면 68번 반복된다. time.sleep(0.001)만 넣었을 뿐인데, 어마어마하게 반복 횟수가 줄어들었다. 이는 cpu 사용량을 줄일 수 있는 가장 쉬운 방법이다. while문에는 time.sleep을 꼭 넣는 습관을 .. 2021. 5. 17.
python mmap ipc github.com/off99555/python-mmap-ipc 위는 다른 사람이 만든 python mmap ipc 예제이다. 가장 중요한 점은 두 프로세스에서 mmap.mmap의 세 번째 인수를 같게 하는 것이다. 이렇게 하면 공유 메모리가 생성이 되는 것 같다. 2021. 4. 20.
python 표준 출력 표준 오류 파일로 저장 import sys log = open('log.log', 'at') sys.stdout = log sys.stderr = log print(1) print(1/0) 결과물 단 이렇게 하면 코드 실행 중에는 print 출력을 못 본다. 오로지 코드 실행이 다 끝나고 나서야 log.log 파일을 통해 출력과 오류를 볼 수 있다. 파이썬 코드 자동화로 돌려놓고 다른 일 하러 간다든지 어차피 print 출력을 못 보는 상황이고 코드 실행이 끝나고 나서 검토를 해야 하는 상황이면 저렇게 하는 것이 좋다. 2021. 4. 18.
dictionary changed size during iteration 해결 방법 my_dict = { 'a':1, 'b':2} for key, value in my_dict.items(): my_dict[key+'2'] = value + 1 print(my_dict) # 결과 # Traceback (most recent call last): # File "0.py", line 5, in # for key, value in my_dict.items(): # RuntimeError: dictionary changed size during iteration my_dict = { 'a':1, 'b':2} for key, value in list(my_dict.items()): my_dict[key+'2'] = value + 1 print(my_dict) # 결과 # {'a': 1, 'b':.. 2021. 4. 18.
정확한 값 보기 a = '1234' b = '1234 ' c = 1234 print(a) print(b) print(c) 위 파이썬 코드를 실행시켜보자. 1234 1234 1234 가 나올 것이다. str과 int가 구분이 안 되지 않는가? 그리고 같은 str끼리도 공백은 눈에 보이지 않으니 구분할 수가 없다. 그럼 어떻게 값을 정확하게 볼 수 있는가? 1. 리스트 안에 넣기 a = '1234' b = '1234 ' c = 1234 print([a, b, c]) 결과: ['1234', '1234 ', 1234] 타입과 공백을 명확하게 구분할 수 있다. 2. repr 함수 이용하기 a = '1234' b = '1234 ' c = 1234 print(repr(a)) print(repr(b)) print(repr(c)) 결과.. 2021. 4. 18.
컴퓨터 얼마나 켜졌는지 보기 파이썬에서 time.monotonic() 을 하면 컴퓨터 부팅 시간으로부터 지금까지의 시간이 반환된다. 참고로 절전 모드로 꺼도 시스템 종료로 끈 게 아니면 time.monotonic()의 값은 계속 늘어난다. 2021. 4. 18.