Programming/Python
-
리스트 컴프리헨션 사용시 주의점Programming/Python 2022. 8. 18. 15:10
강화학습 코드를 작성하다가 정말 작은 실수 때문에 3시간을 날려서 기록으로 남겨둔다. 테이블 기반의 강화학습 코드를 작성할 때 주의해야할 것은 리스트의 얕은 복사와 깊은 복사 문제이다. # 얕은 복사 action_value = [0 for _ in range(5)] value_table = [action_value for _ in range(5)] value_table[0][0] = 1 print(value_table) 위와 같이 코드를 작성하면 결과가 아래와 같이 출력된다. [[1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0]] 왜 일까? value_table[0]의 원소들은 모두 action_value를..
-
[Python] 파이썬 Closure 및 Decorator 설명Programming/Python 2022. 8. 12. 15:56
데코레이터를 이해하려면 먼저 클로저를 알아야 합니다. 클로저를 이해하려면 파이썬에서 변수 범위가 어떻게 작동하는지 알고 있어야 합니다. 파이썬 변수 범위부터 살펴보겠습니다. 파이썬의 변수 범위 규칙 전역변수는 프로그램의 어떤 부분에서든 접근 가능한 변수입니다. 보통 함수 외부에 정의하거나 함수 내부에서 global 키워드를 통해 전역변수를 조작합니다. b = 6 # 전역변수 def my_func_local(): a = 3 # 지역변수 b = 3 print(f"local a: {a}") print(f"local b: {b}") def my_func_global(): global b # b라는 지역변수를 전역변수로 사용한다는 의미 a = 3 # 지역변수 b = 3 print(f"local a: {a}") p..
-
[Python] __all__ 의 역할Programming/Python 2022. 8. 9. 16:42
__all__ 변수의 역할 어떤 라이브러리 내의 패키지를 분석할 때 보통 __init__.py 를 살펴보게 된다. 이때, __all__ 이라는 변수에 다른 패키지에 속한 함수나 클래스의 이름들을 리스트로 만들어 할당하는 것을 볼 수 있다. 이 변수의 역할은 다른 파일에서 특정 패키지를 `from lib import *`와 같이 쓸 때, *에 들어갈 변수, 함수, 클래스들을 선언하는 것이다. +-- folder | +-- all.py | +-- points.py # ex) points.py __all__ = ['Points', 'add'] class Points: pt1 = (1, 2) pt2 = (-1, -2) def add(pt1, pt2): x = pt1[0] + pt2[0] y = pt2[1] + ..